var calendars=[];var defaultCalendarParams={};function Calendar(){this.alwaysOpen=false;this.target=null;this.calIndex=null;this.viewingDate=null;this.selectedDate=null;this.calendarJQueryObject=null;this.monthAbbrs=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];this.isOffset=false;
this.parseYYYYMM=function(c){var d=new Date();if(typeof(c)=="undefined"){return d;}if(c==""){return d;}var b=/(\d{4})(\d{2})/;var a=b.exec(c);if(a){if(a[2].charAt(0)=="0"){a[2]=a[2].charAt(1);}d.setFullYear(a[1]);d.setMonth(a[2]-1);}return this.getCleanDateFromTime(d);};this.parseMM_DD_YYYY=function(c){var d=new Date();
if(typeof(c)=="undefined"){return d;}if(c==""){return d;}var b=/(\d{1,2})\/(\d{1,2})\/(\d{4})/;var a=b.exec(c);if(a){if(a[1].charAt(0)=="0"){a[1]=a[1].charAt(1);}if(a[2].charAt(0)=="0"){a[2]=a[2].charAt(1);}d.setFullYear(a[3]);d.setDate(a[2]);d.setMonth(a[1]-1);}return this.getCleanDateFromTime(d);};
this.setTargetDate=function(a){if($(this.target).is(":text")){$(this.target).val((a.getMonth()+1)+"/"+a.getDate()+"/"+a.getFullYear());return;}$(this.target).find(".monthSelector").val(a.getMonth()+1);$(this.target).find(".daySelector").val(a.getDate());$(this.target).find(".yearSelector").val(a.getFullYear());
};this.getTargetDate=function(){if($(this.target).is(":text")){return this.parseMM_DD_YYYY($(this.target).val());}return this.parseMM_DD_YYYY($(this.target).find(".monthSelector").val()+"/"+$(this.target).find(".daySelector").val()+"/"+$(this.target).find(".yearSelector").val());};this.syncDates=function(){if(this.selectedDate==null){this.selectedDate=this.getTargetDate();
}if(this.viewingDate==null){this.viewingDate=new Date();}this.viewingDate.setTime(this.selectedDate.getTime());this.viewingDate.setDate(1);};this.spawnAlwaysOpen=function(b,a,c){this.alwaysOpen=true;this.target=b;this.calIndex=calendars.push(this)-1;this.calendarJQueryObject=$("<div/>").addClass("calendar").addClass("calendarAlwaysOpen").append($("<div/>").addClass("jsCalendarObjectId").text(this.calIndex).css("display","none")).append($("<div/>").addClass("calendarHeader").append($("<div/>")).append($("<div/>")).append($("<div/>").addClass("monthDescriptor").text("January 2009"))).append($("<div/>").addClass("headCalendarRow").addClass("calendarRow").append($("<div/>").addClass("calendarCell").text("S")).append($("<div/>").addClass("calendarCell").text("M")).append($("<div/>").addClass("calendarCell").text("T")).append($("<div/>").addClass("calendarCell").text("W")).append($("<div/>").addClass("calendarCell").text("T")).append($("<div/>").addClass("calendarCell").text("F")).append($("<div/>").addClass("calendarCell").text("S")));
this.renderMonth(a,c);$(b).append(this.calendarJQueryObject);};this.spawn=function(b){this.target=b;this.calIndex=calendars.push(this)-1;this.syncDates();var a=this.calIndex;this.calendarJQueryObject=$("<div/>").addClass("calendar").addClass("ninjaCalendar").append($("<div/>").addClass("jsCalendarObjectId").text(this.calIndex).css("display","none")).append($("<div/>").addClass("calendarHeader").append($("<div/>").addClass("calendarHeaderArrowsLeft").text("<").click(function(){calendars[a].renderPreviousMonth();
})).append($("<div/>").addClass("calendarHeaderArrowsRight").text(">").click(function(){calendars[a].renderNextMonth();})).append($("<div/>").addClass("monthDescriptor"))).append($("<div/>").addClass("headCalendarRow").addClass("calendarRow").append($("<div/>").addClass("calendarCell").text("S")).append($("<div/>").addClass("calendarCell").text("M")).append($("<div/>").addClass("calendarCell").text("T")).append($("<div/>").addClass("calendarCell").text("W")).append($("<div/>").addClass("calendarCell").text("T")).append($("<div/>").addClass("calendarCell").text("F")).append($("<div/>").addClass("calendarCell").text("S")));
this.renderMonth();$(b).after(this.calendarJQueryObject);$(b).click(function(){calendars[a].show();});};buildNewRow=function(){return $("<div/>").addClass("calendarRow");};datesMatchOnDayLevel=function(b,a){if(typeof(b)=="undefined"||typeof(a)=="undefined"){return false;}if(b==null||a==null){return false;
}if(b.getDate()!=a.getDate()){return false;}if(b.getMonth()!=a.getMonth()){return false;}if(b.getFullYear()!=a.getFullYear()){return false;}return true;};clearCalendar=function(a){a.find(".calendarRow:not(.headCalendarRow)").remove();};this.renderNextMonth=function(){this.viewingDate.setMonth(this.viewingDate.getMonth()+1);
this.renderMonth();};this.renderPreviousMonth=function(){this.viewingDate.setMonth(this.viewingDate.getMonth()-1);this.renderMonth();};this.renderMonth=function(a,c){if(a==null){a=this.viewingDate;}if(typeof(a)=="string"){a=this.parseYYYYMM(a);}if(c==null){c=defaultCalendarParams;}clearCalendar(this.calendarJQueryObject);
var h=new Date();h.setTime(a.getTime());this.calendarJQueryObject.find(".monthDescriptor").text(this.monthAbbrs[a.getMonth()]+" "+a.getFullYear());h.setDate(1);var d=0;var g=h.getDay();var i=buildNewRow();var b=this.calIndex;while(d<g){i.append($("<div/>").addClass("calendarCell").html("&nbsp;"));d++;
}var f=new Date();f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0);while(h.getMonth()==a.getMonth()){var e=$("<div/>").addClass("calendarCell").text(h.getDate());if(h.getTime()<f.getTime()){e.addClass("pastCalendarCell");}else{this.doFutureDay(h,e,b);}if(!$(this.target).hasClass("independentCalendar")){this.evaluateParametersForDay(c,h,e);
}if(datesMatchOnDayLevel(this.selectedDate,h)){e.addClass("selectedCalendarCell");}i.append(e);if(h.getDay()==6){this.calendarJQueryObject.append(i);i=buildNewRow();}h.setDate(h.getDate()+1);}if(h.getDay()!=0){this.calendarJQueryObject.append(i);}this.calendarJQueryObject.append($("<div/>").css("clear","both"));
};this.evaluateParametersForDay=function(e,d,b){var f=new Date();f.setTime(d.getTime());if(this.isOffset){f.setDate(f.getDate()-1);}if(typeof(e[f.getFullYear()])=="undefined"){return;}if(typeof(e[f.getFullYear()][f.getMonth()+1])=="undefined"){return;}if(typeof(e[f.getFullYear()][f.getMonth()+1][f.getDate()])=="undefined"){return;
}paramsForDay=e[f.getFullYear()][f.getMonth()+1][f.getDate()];if(typeof(paramsForDay.cssClass)!="undefined"){b.addClass(paramsForDay.cssClass);}if(typeof(paramsForDay.click)!="undefined"){var c=new Date(f.getTime());var a=paramsForDay.click;b.click(function(){a(c);});}if(typeof(paramsForDay.clickable)!="undefined"&&!paramsForDay.clickable){var c=new Date(f.getTime());
b.unbind("click");}};this.doFutureDay=function(d,c,b){var a=d.getTime();c.addClass("futureCalendarCell");if(!this.alwaysOpen){c.addClass("futureCalendarCell").click(function(){calendars[b].selectDate(a);$(".ninjaCalendar").hide();});}};this.getCleanDateFromTime=function(b){var a=new Date();a.setTime(b);
a.setMilliseconds(0);a.setSeconds(0);a.setMinutes(0);a.setHours(0);return a;};this.selectDate=function(a){this.selectedDate.setTime(this.getCleanDateFromTime(a).getTime());this.viewingDate.setTime(this.getCleanDateFromTime(a).getTime());this.viewingDate.setDate(1);this.setTargetDate(this.selectedDate);
this.renderMonth();var c=this.findOlderSibling();var b=this.findYoungerSibling();if(c!=null){if(c.selectedDate.getTime()<=this.selectedDate.getTime()){var e=new Date();e.setTime(this.selectedDate.getTime());e.setDate(e.getDate()+1);c.selectDate(e);}}if(b!=null){if(b.selectedDate.getTime()>=this.selectedDate.getTime()){var d=new Date();
d.setTime(this.selectedDate.getTime());d.setDate(d.getDate()-1);b.selectDate(d);}}};this.findOlderSibling=function(){var d=$(this.target).parents(".calendarFamily");if(d.length==0){return null;}var c=this;var b=false;var a=null;d.children(".hasCalendar").each(function(){var e=getCalendarFromTarget(this.id);
if(b){b=false;a=e;}if(c.calIndex==e.calIndex){b=true;}});return a;};this.findYoungerSibling=function(){var d=$(this.target).parents(".calendarFamily");if(d.length==0){return null;}var c=this;var b=false;var a=null;d.children(".hasCalendar").each(function(){var e=getCalendarFromTarget(this.id);if(c.calIndex==e.calIndex){b=true;
}if(b){return;}a=e;});return a;};this.hide=function(){this.calendarJQueryObject.hide();};this.broadcastHide=function(){$(".ninjaCalendar").hide();};this.show=function(){this.selectedDate=this.getTargetDate();this.syncDates();this.renderMonth();this.broadcastHide();this.calendarJQueryObject.show();this.repositionCalendar();
};this.repositionCalendar=function(){var c=$(this.target).position();var b=c.top;var a=this.calendarJQueryObject.css("height");if(a.length>2){a=a.substring(0,a.length-2);}b-=a;if(b<3||isNaN(b)){b=3;}this.calendarJQueryObject.css("top",b).css("left",c.left);};}function getCalendarFromTarget(a){for(var b=0;
b<calendars.length;b++){if(calendars[b].target.id==a){return calendars[b];}}}$(function(){$(".hasCalendar").each(function(){if(getCalendarFromTarget(this.id)){return;}var a=new Calendar();a.spawn(this);});$(".offsetCalendar").each(function(){var a=getCalendarFromTarget(this.id);a.isOffset=true;a.renderMonth();
});$("body").click(function(a){if($(a.target).hasClass("hasCalendar")){return;}if($(a.target).hasClass("allowCalendarOpen")){return;}if($(a.target).parents(".calendar").length!=0){return;}$(".ninjaCalendar").hide();});});