function MakeCalendarCurrent(element,callback)
{var d=new Date();return MakeCalendarDMY(element,d.getDate(),d.getMonth()+1,d.getFullYear(),callback);}
function MakeCalendarDMY(element,day,month,year,callback)
{MakeCalendarDMYInternal(element,day,month,year,day,month,year,callback);}
function MakeCalendarDMYInternal(element,day,month,year,initialDay,initialMonth,initialYear,callback)
{ClearElement(element);var tableOuter=AppendElement(element,'table',{border:0,cellSpacing:0,cellPadding:4,className:'calendar'});var tbodyOuter=AppendElement(tableOuter,'tbody',{});var trOuter_1=AppendElement(tbodyOuter,'tr',{});var tdOuter_1_1=AppendElement(trOuter_1,'td',{className:'calendarCorner',style:{width:'33.333%'}});var tableUL=AppendElement(tdOuter_1_1,'table',{border:0,cellSpacing:0,cellPadding:1,width:'100%'});var tbodyUL=AppendElement(tableUL,'tbody',{});var trUL_1=AppendElement(tbodyUL,'tr',{});var tdUL_1_1=AppendElement(trUL_1,'td',{style:{textAlign:'left'}});var prevMonth=month-1;if(prevMonth==0)prevMonth=12;tdUL_1_1.innerHTML='< '+MonthName(prevMonth);if(NotTheFuture(day,prevMonth,year,initialDay,initialMonth,initialYear))
{tdUL_1_1.onmouseover=MakeCaller(CalendarHoverOn,tdUL_1_1);tdUL_1_1.onmouseout=MakeCaller(CalendarHoverOff,tdUL_1_1);tdUL_1_1.onclick=MakeCaller(MakeCalendarDMYInternal,element,0,prevMonth,year,initialDay,initialMonth,initialYear,callback);}
var trUL_2=AppendElement(tbodyUL,'tr',{});var tdUL_2_1=AppendElement(trUL_2,'td',{style:{textAlign:'left'}});var prevYear=year-1;tdUL_2_1.innerHTML='<'+prevYear;if(NotTheFuture(day,month,prevYear,initialDay,initialMonth,initialYear))
{tdUL_2_1.onmouseover=MakeCaller(CalendarHoverOn,tdUL_2_1);tdUL_2_1.onmouseout=MakeCaller(CalendarHoverOff,tdUL_2_1);tdUL_2_1.onclick=MakeCaller(MakeCalendarDMYInternal,element,0,month,prevYear,initialDay,initialMonth,initialYear,callback);}
var tdOuter_1_2=AppendElement(trOuter_1,'td',{style:{width:'33.333%',textAlign:'center'}});tdOuter_1_2.innerHTML=MonthName(month)+'
'+year;var tdOuter_1_3=AppendElement(trOuter_1,'td',{className:'calendarCorner',style:{width:'33.333%'}});var tableUR=AppendElement(tdOuter_1_3,'table',{border:0,cellSpacing:0,cellPadding:1,width:'100%'});var tbodyUR=AppendElement(tableUR,'tbody',{});var trUR_1=AppendElement(tbodyUR,'tr',{});var tdUR_1_1=AppendElement(trUR_1,'td',{style:{textAlign:'right'}});var nextMonth=month+1;if(nextMonth==13)nextMonth=1;tdUR_1_1.innerHTML=MonthName(nextMonth)+' >';if(NotTheFuture(day,nextMonth,year,initialDay,initialMonth,initialYear))
{tdUR_1_1.onmouseover=MakeCaller(CalendarHoverOn,tdUR_1_1);tdUR_1_1.onmouseout=MakeCaller(CalendarHoverOff,tdUR_1_1);tdUR_1_1.onclick=MakeCaller(MakeCalendarDMYInternal,element,0,nextMonth,year,initialDay,initialMonth,initialYear,callback);}
var trUR_2=AppendElement(tbodyUR,'tr',{});var tdUR_2_1=AppendElement(trUR_2,'td',{style:{textAlign:'right'}});var nextYear=year+1;tdUR_2_1.innerHTML=nextYear+'>';if(NotTheFuture(day,month,nextYear,initialDay,initialMonth,initialYear))
{tdUR_2_1.onmouseover=MakeCaller(CalendarHoverOn,tdUR_2_1);tdUR_2_1.onmouseout=MakeCaller(CalendarHoverOff,tdUR_2_1);tdUR_2_1.onclick=MakeCaller(MakeCalendarDMYInternal,element,0,month,nextYear,initialDay,initialMonth,initialYear,callback);}
var trOuter_2=AppendElement(tbodyOuter,'tr',{});var tdOuter_2_1=AppendElement(trOuter_2,'td',{colSpan:3});var tableLower=AppendElement(tdOuter_2_1,'table',{border:0,cellSpacing:0,cellPadding:1,style:{textAlign:'center'}});var tbodyLower=AppendElement(tableLower,'tbody',{});var trLower_1=AppendElement(tbodyLower,'tr',{});for(var dow=0;dow<7;++dow)
{var td_dow=AppendElement(trLower_1,'td',{});td_dow.innerHTML=DowName(dow);}
var firstDow=DayOfWeek(1,month,year);var daysInMonth=DaysPerMonth(month,year);var tr=null;var column;var td;for(var aDay=0;aDay<=daysInMonth;)
{if(tr==null||column==7)
{tr=AppendElement(tbodyLower,'tr',{});column=0;}
if(aDay==0)
{if(columninitialYear)
return false;if(monthinitialMonth)
return false;if(day<=initialDay)
return true;return false;}
function CalendarHoverOn(element)
{element.oldId=element.id;element.id='calendarHover';}
function CalendarHoverOff(element)
{element.id=element.oldId;}
function CalendarSelect(element,callback,day,month,year)
{var prevSelected=element.calendar.selected;if(prevSelected!=null)
prevSelected.className=prevSelected.oldClass;element.oldClass=element.className;if(element.className=='calendarToday')
element.className='calendarTodaySelected';else
element.className='calendarSelected';element.calendar.selected=element;callback(day,month,year);}
function MonthName(month)
{var monthName=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];return monthName[month-1];}
function DowName(dow)
{var dowName=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];return dowName[dow];}
function DayOfWeek(day,month,year)
{var d=new Date();d.setDate(day);d.setMonth(month-1);d.setYear(year);d.setHours(12);d.setMinutes(0);d.setSeconds(0);return d.getDay();}
var daysPerMonth=[31,28,31,30,31,30,31,31,30,31,30,31];function DaysPerMonth(month,year)
{if(month==2&&IsLeapYear(year))
return 29;return daysPerMonth[month-1];}
function IsLeapYear(year)
{if(year%4!=0)
return false;if(year%100!=0)
return true;if(year%400!=0)
return false;return true;}