/********************************************************************************* class:	Khronos Calendar Class* author:	Christopher Sheldon [MicroAge Solutions e-Business Developer]* notes:	Do not remove, reproduce or use this code without express written permission.*			Copyright \u00A9 2004 MicroAge Solutions. *			www.microagesolutions.com*****//********Altered by Jason Thomas Nov 2008 to move "Previous Month" link to the left of month/year********/function CreateKhronos(){this.version='2.0.090804';this.views=new Array();this.createDatePicker=function(){};this.createMonthView=function(sName,sData,sDivider,iTop,iLeft,sPrint,sClose,sHome,sPrevious,sNext,sDetailsPrint,sDetailsClose){asViews[asViews.length]=sName;this.views[sName]=new View('month',sData,sDivider,iTop,iLeft,sPrint,sClose,sHome,sPrevious,sNext,sDetailsPrint,sDetailsClose);};this.createWeekView=function(sName,sData,sDivider,iTop,iLeft,sPrint,sClose){asViews[asViews.length]=sName;this.views[sName]=new View('week',sData,sDivider,iTop,iLeft,sPrint,sClose);};this.createDayView=function(){};this.createMinimizedView=function(sName,sData,sDivider,iTop,iLeft,sPrint,sClose,sHome,sPrevious,sNext,sDetailsPrint,sDetailsClose,sMinimized){asViews[asViews.length]=sName;this.views[sName]=new View('minimized',sData,sDivider,iTop,iLeft,sPrint,sClose,sHome,sPrevious,sNext,sDetailsPrint,sDetailsClose,sMinimized);};function fPrintData(){this.year=0;this.month=0;this.name='';this.index=0;}this.printData=new fPrintData();this.printPage='';this.closeView=fCloseView;this.createView=fCreateView;this.printView=fPrintView;this.refreshView=fRefreshView;this.load=fLoad;var aiDaysPerMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);var abEmbedded=new Array();var asViews=new Array();var dToday=new Date();var iCurrentDay=dToday.getDate();var iCurrentMonth=dToday.getMonth();var iCurrentYear=dToday.getFullYear();function View(sType,sData,sDivider,iTop,iLeft,sPrint,sClose,sHome,sPrevious,sNext,sDetailsPrint,sDetailsClose,sMinimized){this.type=sType;this.data=sData;this.divider=sDivider;this.top=iTop;this.left=iLeft;this.days=new Array('S','M','T','W','R','F','S');this.months=new Array('January','February','March','April','May','June','July','August','September','October','November','December');this.currentStyle='font-weight: bold; text-decoration: underline;';if(sType=='week'){this.detailPrint=sPrint;}else{this.detailPrint=sDetailsPrint;}this.holiday=fHoliday;this.print=sPrint;this.close=sClose;this.dataIndex=0;this.home=sHome;this.previous=sPrevious;this.next=sNext;this.day=iCurrentDay;this.month=iCurrentMonth;this.year=iCurrentYear;this.detailClose=sDetailsClose;if(sType=='minimized'){this.minimized=sMinimized?sMinimized:'^';}}function fHoliday(iYear,iMonth,iDay){var sEvent='';var a=iYear%19;var b=Math.floor(iYear/100);var c=(b-Math.floor(b/4)-Math.floor((8*b+13)/25)+19*a+15)%30;var d=(c-Math.floor(c/28)*(1-Math.floor(c/28)*Math.floor(29/(c+1)*Math.floor((21-a)/11))));var e=(iYear+Math.floor(iYear/4)+d+2-b+Math.floor(b/4))%7;var f=d-e+28;var iEasterDay=f;var iEasterMonth=3;if(f>31){iEasterDay=f-31;}else{iEasterMonth=2;}if(iMonth==0&&iDay==1){sEvent='New Year\'s Day';}if(iMonth==1&&iDay==14){sEvent='St. Valentine\'s Day';}if(iMonth==4){var iThisDate=new Date(iYear,4,25);var iWeekday=iThisDate.getDay();var iThisDay=(iWeekday==0?19:25-iWeekday+1);if(iDay==iThisDay){sEvent='Victoria Day';}}if(iMonth==iEasterMonth&&iDay==iEasterDay-2){sEvent='Good Friday';}if(iMonth==iEasterMonth&&iDay==iEasterDay){sEvent='Easter Sunday';}if(iMonth==6&&iDay==1){sEvent='Canada Day';}if(iMonth==7){var iThisDate=new Date(iYear,7,1);var iWeekday=iThisDate.getDay();var iThisDay=(iWeekday==1?1:(iWeekday>1?9-iWeekday:2));if(iDay==iThisDay){sEvent='Civic Holiday';}}if(iMonth==8){var iThisDate=new Date(iYear,8,1);var iWeekday=iThisDate.getDay();var iThisDay=(iWeekday==1?1:(iWeekday>1?9-iWeekday:2));if(iDay==iThisDay){sEvent='Labour Holiday';}}if(iMonth==9){var iThisDate=new Date(iYear,8,1);var iWeekday=iThisDate.getDay();var iThisDay=(iWeekday==1?8:(iWeekday>1?14-iWeekday:9));if(iDay==iThisDay){sEvent='Thanksgiving';}}if(iMonth==10&&iDay==11){sEvent='Rememberance Day';}if(iMonth==11&&iDay==25){sEvent='Christmas Day';}if(iMonth==11&&iDay==26){sEvent='Boxing Day';}return sEvent;}function fCreateViews(){for(var iCounter=0;iCounter<asViews.length;iCounter++){ var elDiv=document.getElementById(asViews[iCounter]); if(elDiv){  elDiv.style.position='relative';  abEmbedded[asViews[iCounter]]=true; }else{  var elBody=document.body;  elDiv=document.createElement('div');  elBody.appendChild(elDiv);  elDiv.style.position='absolute';  elDiv.style.visibility='hidden';  abEmbedded[asViews[iCounter]]=false; } switch(khronos.views[asViews[iCounter]].type){ case 'month':  elDiv.id=asViews[iCounter]+'1';  elDiv.className=asViews[iCounter]+'Month';  elDiv.innerHTML=fCreateMonthView(asViews[iCounter],iCurrentMonth,iCurrentYear);  break; case 'week':  elDiv.id=asViews[iCounter]+'2';  elDiv.className=asViews[iCounter]+'Details';  elDiv.innerHTML=fCreateDetailView(asViews[iCounter],iCurrentDay,iCurrentMonth,iCurrentYear);  break; case 'minimized':  elDiv.id=asViews[iCounter];  elDiv.className=asViews[iCounter]+'Minimized';  elDiv.innerHTML=fCreateMinimizedView(asViews[iCounter]);  elDiv.style.cursor='pointer';  elDiv.onclick=fCreateView;  break; default:  break; } if(!abEmbedded[asViews[iCounter]]){  gsl.positionElement(elDiv,khronos.views[asViews[iCounter]].top,khronos.views[asViews[iCounter]].left);  elDiv.style.visibility='visible';  } }}function fCreateMinimizedView(sName){var sHtml=khronos.views[sName].minimized;return sHtml;}function fCreateView(sName,iDay,iMonth,iYear,iView){ if(iView!=2){  sName=this.id;  var elParent=document.getElementById(sName);  var elDiv=document.getElementById(sName+'1');  if(elDiv){  }else{   var elBody=document.body;   elDiv=document.createElement('div');   elBody.appendChild(elDiv);   elDiv.id=sName+'1';   elDiv.className=sName+'Month';}   elDiv.style.visibility='hidden';   var iLeft=(gsl.documentWidth-elParent.offsetLeft<elDiv.offsetWidth+5?elParent.offsetLeft-elDiv.offsetWidth:elParent.offsetLeft);   gsl.positionElement(elDiv,elParent.offsetTop,iLeft);   if(elDiv.filters){    if(elDiv.filters[0]){     elDiv.filters[0].enabled=true;     elDiv.filters[0].apply();    }   }   elDiv.innerHTML=fCreateMonthView(sName,iCurrentMonth,iCurrentYear);   elDiv.style.visibility='visible';   if(elDiv.filters){    if(elDiv.filters[0]){     elDiv.filters[0].play();    }   }  }else{   var elParent=document.getElementById(sName+'1');   var elDiv=document.getElementById(sName+'2');   if(elDiv){   }else{    var elBody=document.body;    elDiv=document.createElement('div');    elBody.appendChild(elDiv);    elDiv.id=sName+'2';    elDiv.className=sName+'Details';   }   elDiv.style.visibility='hidden';   //Moved the Details   //Removed the +5 that moved the details 5 pixels right   //Added +30 to move the details down 30 pixels   var iLeft=(gsl.documentWidth-elParent.offsetLeft-elParent.offsetWidth>elDiv.offsetWidth+5?elParent.offsetLeft+elParent.offsetWidth:elParent.offsetLeft-elDiv.offsetWidth-5);   gsl.positionElement(elDiv,elParent.offsetTop+30,iLeft,true);   elDiv.style.visibility='visible';   if(elDiv.filters){    if(elDiv.filters[0]){     elDiv.filters[0].enabled=true;     elDiv.filters[0].apply();    }   }   elDiv.innerHTML=fCreateDetailView(sName,iDay,iMonth,iYear);   if(elDiv.filters){    if(elDiv.filters[0]){     elDiv.filters[0].play();    }   }  } }  function fCreateMonthView(sName,iMonth,iYear){ var iDaysThisMonth=(iYear%4==0&&iMonth==1?29:aiDaysPerMonth[iMonth]); var dThisMonth=new Date(iYear,iMonth,1); var iFirstDOM=dThisMonth.getDay(); var iDayCounter=-iFirstDOM; var iIndex=khronos.views[sName].dataIndex; var sHtml='<table class="Month" style="width: 100%;" cellpadding="0" cellspacing="0" border="0">'; sHtml+='<tr><td>'; sHtml+='<table class="Category" style="width: 100%;" cellpadding="0" cellspacing="0" border="0"><tr>'; if(khronos.views[sName].data.length>1){  sHtml+='<td><select onchange="khronos.views[\''+sName+'\'].dataIndex = this.value; khronos.refreshView(\''+sName+'\', '+iCurrentMonth+', '+iCurrentYear+');">';  for(var iCounter=0;iCounter<khronos.views[sName].data.length;iCounter++){   if(khronos.views[sName].dataIndex==iCounter){    sHtml+='<option value="'+iCounter+'" selected>'+khronos.views[sName].data[iCounter].name+'</option>';   }else{    sHtml+='<option value="'+iCounter+'">'+khronos.views[sName].data[iCounter].name+'</option>';   }  }  sHtml+='</select></td>';}sHtml+='<td align="right">';  sHtml+='<table class="Buttons" cellpadding="0" cellspacing="0" border="0"><tr>';  if(khronos.views[sName].print&&khronos.printPage){   sHtml+='<td class="Print" style="cursor: pointer;" onclick="khronos.printView(\''+sName+'\', '+(iMonth+1)+', '+iYear+');" align="center">'+khronos.views[sName].print+'</td>';  }  if(khronos.views[sName].close&&khronos.views[sName].type=='minimized'){   sHtml+='<td class="Close" style="cursor: pointer;" onclick="khronos.closeView(\''+sName+'\', 1);" align="center">'+khronos.views[sName].close+'</td>';  }  sHtml+='</tr></table>';  sHtml+='</td></tr></table>';  sHtml+='</td></tr>';  sHtml+='<tr><td>';  sHtml+='<table class="Title" style="width: 100%; height: 100%;" cellpadding="0" cellspacing="0" border="0"><tr>';  if(khronos.views[sName].previous){   sHtml+='<td><table class="Buttons" style="cursor: pointer;" cellpadding="0" cellspacing="0" border="0">';   sHtml+='<td class="Previous" style="cursor: pointer;" onclick="khronos.refreshView(\''+sName+'\', '+(iMonth-1)+', '+iYear+');" align="center">'+khronos.views[sName].previous+'</td>';   sHtml+='</tr></table></td>';  }  sHtml+='<td style="width: 100%">'+khronos.views[sName].months[iMonth]+' '+iYear+'</td><td align="right">';  sHtml+='<table class="Buttons" style="cursor: pointer;" cellpadding="0" cellspacing="0" border="0">';  if(khronos.views[sName].home){   sHtml+='<td class="Home" style="cursor: pointer;" onclick="khronos.refreshView(\''+sName+'\', '+iCurrentMonth+', '+iCurrentYear+');" align="center">'+khronos.views[sName].home+'</td>';  }  if(khronos.views[sName].next){   sHtml+='<td class="Next" style="cursor: pointer;" onclick="khronos.refreshView(\''+sName+'\', '+(iMonth+1)+', '+iYear+');" align="center">'+khronos.views[sName].next+'</td>';  }  sHtml+='</table>';  sHtml+='</td></tr></table></td></tr>';  sHtml+='<tr><td>';  sHtml+='<table class="WeekDayBar" style="width: 100%; cursor: default;" cellpadding="0" cellspacing="'+(khronos.views[sName].divider?khronos.views[sName].divider:'0')+'" border="0">';  sHtml+='<tr>';  for(var iCounter=0;iCounter<7;iCounter++){   sHtml+='<td class="WeekDay">'+khronos.views[sName].days[iCounter]+'</td>';  }  sHtml+='</tr></table>';  sHtml+='</td></tr>';  sHtml+='<tr><td style="height: 100%;">';  sHtml+='<table class="Detail" style="width: 100%; height: 100%; cursor: default;" cellpadding="0" cellspacing="'+(khronos.views[sName].divider?khronos.views[sName].divider:'0')+'" border="0">';  for(var iCounter=0;iCounter<6;iCounter++){   sHtml+='<tr>';   for(var iCounter2=0;iCounter2<7;iCounter2++){    iDayCounter++;    if(iDayCounter>0&&iDayCounter<=iDaysThisMonth){     if(khronos.views[sName].data[iIndex].data[iYear]&&khronos.views[sName].data[iIndex].data[iYear][iMonth]&&khronos.views[sName].data[iIndex].data[iYear][iMonth][iDayCounter]){      sHtml+='<td class="EventDay" style="'+(iYear==iCurrentYear&&iMonth==iCurrentMonth&&iDayCounter==iCurrentDay?khronos.views[sName].currentStyle:'')+' cursor: pointer;" onclick="khronos.createView(\''+sName+'\', '+iDayCounter+', '+iMonth+', '+iYear+', 2);">'+iDayCounter+'</td>';     }else if(khronos.views[sName].holiday(iYear,iMonth,iDayCounter)){      sHtml+='<td class="Holiday" style="'+(iYear==iCurrentYear&&iMonth==iCurrentMonth&&iDayCounter==iCurrentDay?khronos.views[sName].currentStyle:'')+' cursor: pointer;" onclick="khronos.createView(\''+sName+'\', '+iDayCounter+', '+iMonth+', '+iYear+', 2);">'+iDayCounter+'</td>';     }else{      sHtml+='<td class="Day" style="'+(iYear==iCurrentYear&&iMonth==iCurrentMonth&&iDayCounter==iCurrentDay?khronos.views[sName].currentStyle:' cursor: default;')+'">'+iDayCounter+'</td>';    }   }else{    sHtml+='<td class="Blank">&nbsp;</td>';   }  }  sHtml+='</tr>'; } sHtml+='</table>'; sHtml+='</td></tr>'; sHtml+='</table>'; return sHtml;}function fPrintView(sName,iMonth,iYear){this.printData.year=iYear;this.printData.month=iMonth;this.printData.name=sName;this.printData.index=khronos.views[sName].dataIndex;var elWindow=gsl.openWindow(this.printPage,'KhronosPrint','');}function fRefreshView(sName,iMonth,iYear){if(iMonth>11){iMonth=0;iYear++;}if(iMonth<0){iMonth=11;iYear--;}var elDiv=document.getElementById(sName+'1');if(elDiv.filters){if(elDiv.filters[0]){elDiv.filters[0].enabled=true;elDiv.filters[0].apply();}}elDiv.innerHTML=fCreateMonthView(sName,iMonth,iYear);if(elDiv.filters){if(elDiv.filters[0]){elDiv.filters[0].play();}}}function fCloseView(sName,iView){gsl.showSelects();var elDiv=document.getElementById(sName+iView);if(elDiv.filters){if(elDiv.filters[0]){elDiv.filters[0].enabled=true;elDiv.filters[0].apply();}}elDiv.style.visibility='hidden';var iDelay=0;if(elDiv.filters){if(elDiv.filters[0]){elDiv.filters[0].play();iDelay=Math.floor(elDiv.filters[0].duration*1000);}}setTimeout('var elBody = document.body; elBody.removeChild(document.getElementById(\''+sName+iView+'\'));',iDelay);}function fCreateDetailView(sName,iDay,iMonth,iYear,sHoliday){ var sHtml='<table class="Detail" style="width: 100%;" cellpadding="0" cellspacing="0" border="0">'; sHtml+='<tr><td style="width: 100%;">'; sHtml+='<table class="Title" style="width: 100%;" cellpadding="0" cellspacing="0" border="0"><tr>'; sHtml+='<td>'+khronos.views[sName].months[iMonth]+' '+iDay+', '+iYear+'</td><td align="right">'; sHtml+='<table class="Buttons" cellpadding="0" cellspacing="0" border="0">'; if(khronos.views[sName].detailPrint&&khronos.printPage){  sHtml+='<td class="Print" style="cursor: pointer;" onclick="khronos.printView(\''+sName+'\', '+(iMonth+1)+', '+iYear+');" align="center">'+khronos.views[sName].detailPrint+'</td>'; } if(khronos.views[sName].detailClose&&khronos.views[sName].type!='detail'){  sHtml+='<td class="Close" style="cursor: pointer;" onclick="khronos.closeView(\''+sName+'\', 2);" align="center">'+khronos.views[sName].detailClose+'</td>'; } sHtml+='</table>'; sHtml+='</td></tr></table>'; sHtml+='</td></tr>'; sHtml+='<tr><td>'; sHtml+='<div class="List" style="position: relative; overflow: auto;">'; if(khronos.views[sName].holiday(iYear,iMonth,iDay)){  sHtml+='<table class="Holiday" style="width: 100%;" cellpadding="0" cellspacing="0" border="0">';  sHtml+='<tr><td style="width: 100%;">';  sHtml+=khronos.views[sName].holiday(iYear,iMonth,iDay)+'<br />';  sHtml+='</td></tr>';sHtml+='</table>'; } if(khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear]&&khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth]&&khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth][iDay]){  var asEvents=khronos.views[sName].data[khronos.views[sName].dataIndex].data[iYear][iMonth][iDay].split('~');  sHtml+='<table style="width: 100%;" cellpadding="0" cellspacing="0" border="0">';  for(var iCounter=0;iCounter<asEvents.length;iCounter++){   var asThisEvent=asEvents[iCounter].split('|');   sHtml+='<tr><td class="Out" style="cursor: pointer;" onclick="location.href = \''+asThisEvent[3]+'\';"><b>';   sHtml+=asThisEvent[0]+'</b><br />';   sHtml+=asThisEvent[1]+'<br />';   sHtml+=asThisEvent[2]+'<br />';   sHtml+='</td></tr>';  }  sHtml+='</table>';  sHtml+='</div>';  sHtml+='</td></tr>';  sHtml+='</table>'; } return sHtml;}function fLoad(){fCreateViews();}}var khronos=new CreateKhronos();function KhronosData(){this.name=new Array();this.data=new Array();this.addData=function(iMonth,iDay,iYear,sData){if(!this.data[iYear]){this.data[iYear]=new Array();}if(!this.data[iYear][iMonth]){this.data[iYear][iMonth]=new Array();}this.data[iYear][iMonth][iDay]=(this.data[iYear][iMonth][iDay]?this.data[iYear][iMonth][iDay]+'~':'')+sData;};}
