YAHOO.namespace('EventCalendar');YAHOO.EventCalendar.BaseCalendar=function(){};YAHOO.EventCalendar.BaseCalendar.prototype={init:function(pageDate,eventDetailUrl,pastMonthsToDisplay,futureMonthsToDisplay,includeNavigator)
{var dateString=(pageDate.getMonth()+1)+'/'+pageDate.getFullYear();pageDate=(pageDate)?pageDate:new Date();pastMonthsToDisplay=(pastMonthsToDisplay)?pastMonthsToDisplay:1;futureMonthsToDisplay=(futureMonthsToDisplay)?futureMonthsToDisplay:6;this.maxStartDate=new Date();this.maxEndDate=new Date();this.maxStartDate=YAHOO.widget.DateMath.subtract(this.maxStartDate,YAHOO.widget.DateMath.MONTH,pastMonthsToDisplay);this.maxEndDate=YAHOO.widget.DateMath.add(this.maxEndDate,YAHOO.widget.DateMath.MONTH,futureMonthsToDisplay);this.calendarTableId='calendar';this.calendarContainerId="eventCalendarContainer";this.popupDivId='eventCalendarPopupContainer';this.events=[];this.eventDays=[];this.eventDetailUrl=eventDetailUrl;this.calendar=new YAHOO.widget.Calendar(this.calendarTableId,this.calendarContainerId,{pagedate:dateString,navigator:includeNavigator});this.subscribeEvents();},getDateObjFromStr:function(sDate)
{var matches=sDate.match(/^(\d{1,2})[\-\/](\d{1,2})[\-\/](\d{4})/);if(matches){return YAHOO.widget.DateMath.getDate(matches[3],(matches[1]-1),matches[2]);}
return false;},getDateStrFromObj:function(oDate,sep)
{sep=(sep)?sep:'/';return(oDate.getMonth()+1)+sep+oDate.getDate()+sep+oDate.getFullYear();},addEvent:function(oEvent)
{var dayKey=0,added=false,clonedEvent,startDate,endDate;for(dayKey in this.eventDays){if(this.eventDays.hasOwnProperty(dayKey)){if(this.eventDays[dayKey].dateString==oEvent.startDate){this.eventDays[dayKey].addEvent(oEvent);added=true;}}}
startDate=this.getDateObjFromStr(oEvent.startDate);if(!added){if(startDate>=this.maxStartDate){var day=new YAHOO.EventCalendar.Day(oEvent.startDate);day.addEvent(oEvent);this.eventDays.push(day);}}
if(oEvent.repeatType!==0){if(startDate){switch(oEvent.repeatType)
{case 1:startDate=YAHOO.widget.DateMath.add(startDate,YAHOO.widget.DateMath.DAY,1);if(startDate<=this.maxEndDate){clonedEvent=YAHOO.ObjectManip.clone(oEvent);endDate=this.getDateObjFromStr(clonedEvent.endDate);endDate=YAHOO.widget.DateMath.add(endDate,YAHOO.widget.DateMath.DAY,1);clonedEvent.startDate=this.getDateStrFromObj(startDate);clonedEvent.endDate=this.getDateStrFromObj(endDate);this.addEvent(clonedEvent);}
break;case 5:startDate=YAHOO.widget.DateMath.add(startDate,YAHOO.widget.DateMath.WEEK,1);if(startDate<=this.maxEndDate){clonedEvent=YAHOO.ObjectManip.clone(oEvent);endDate=this.getDateObjFromStr(clonedEvent.endDate);endDate=YAHOO.widget.DateMath.add(endDate,YAHOO.widget.DateMath.WEEK,1);clonedEvent.startDate=this.getDateStrFromObj(startDate);clonedEvent.endDate=this.getDateStrFromObj(endDate);this.addEvent(clonedEvent);}
break;case 6:var dayNum=startDate.getDate();var monthNum=startDate.getMonth();var yearNum=startDate.getFullYear();var startingTimestamp=startDate.valueOf();while(startDate<this.maxEndDate){startDate.setDate(1);monthNum++;if(monthNum==13){monthNum=1;yearNum++;startDate.setFullYear(yearNum);}
startDate.setMonth(monthNum);var daysInMonth=YAHOO.widget.DateMath.findMonthEnd(startDate).getDate();if(daysInMonth>=dayNum){var msDiff=startDate.valueOf()-startingTimestamp;clonedEvent=YAHOO.ObjectManip.clone(oEvent);startDate.setDate(dayNum);endDate=this.getDateObjFromStr(clonedEvent.endDate);endDate.setTime(endDate.valueOf()+msDiff);clonedEvent.startDate=this.getDateStrFromObj(startDate);clonedEvent.endDate=this.getDateStrFromObj(endDate);this.addEvent(clonedEvent);break;}}
break;case 7:startDate=YAHOO.widget.DateMath.add(startDate,YAHOO.widget.DateMath.YEAR,1);if(startDate<=this.maxEndDate){clonedEvent=YAHOO.ObjectManip.clone(oEvent);endDate=this.getDateObjFromStr(clonedEvent.endDate);endDate=YAHOO.widget.DateMath.add(endDate,YAHOO.widget.DateMath.YEAR,1);clonedEvent.startDate=this.getDateStrFromObj(startDate);clonedEvent.endDate=this.getDateStrFromObj(endDate);this.addEvent(clonedEvent);}
break;}}}
this.events.push(oEvent);},getEventDayForDate:function(oDate)
{var dayKey=0,workingDateStr=this.getDateStrFromObj(oDate,'/');for(dayKey in this.eventDays){if(this.eventDays.hasOwnProperty(dayKey)){if(workingDateStr==this.eventDays[dayKey].dateString){return this.eventDays[dayKey];}}}
return false;},subscribeEvents:function(){},render:function(){}};
