function Calendar(months,days,startOfWeek){this.months=months.split(',');this.days=days.split(',');this.startOfWeek=0;this.activeCalendar='';this.space=0;this.currentDate;this.monthsLength=new Array(31,28,31,30,31,30,31,31,30,31,30,31);this.setStartOfWeek=function(startOfWeek){this.startOfWeek=startOfWeek;var y=0;var newDays=new Array();for(var x=startOfWeek;x<=6;x++){newDays[y]=this.days[x];y++;}
for(var x=0;x<startOfWeek;x++){newDays[y]=this.days[x];y++;}
this.days=newDays;}
this.setStartOfWeek(startOfWeek);this.init=function(name){var button=document.getElementById(name+'Button');if(button){button.style.display='block';button.name=name;button.onclick=function(){calendar.show(this.name);return false;}}
var dayField=document.getElementById(name+'Day');if(dayField){dayField.calendar=name;dayField.onchange=function(){calendar.changeDate(this.calendar);}}
var monthField=document.getElementById(name+'Month');if(monthField){monthField.calendar=name;monthField.onchange=function(){calendar.changeDate(this.calendar);}}
var yearField=document.getElementById(name+'Year');if(yearField){yearField.calendar=name;yearField.onkeyup=function(){calendar.changeDate(this.calendar);}}}
this.changeDate=function(calendarName){if(calendarName==this.activeCalendar){this.setCurrentDate();this.generate();}}
this.close=function(){var calendarInstance=document.getElementById(this.activeCalendar+'Calendar');if(calendarInstance){calendarInstance.style.display='none';}
this.activeCalendar='';}
this.show=function(name){if(this.activeCalendar!=''){if(this.activeCalendar==name){return this.close();}
else{this.close();}}
this.activeCalendar=name;this.setCurrentDate();this.generate();}
this.setSpace=function(){var tempDate=new Date(this.currentDate.getFullYear(),this.currentDate.getMonth(),1);var day=tempDate.getDay();this.space=(6-this.startOfWeek)+day+1;if(this.space>=7)this.space=this.space-7;}
this.isLeapYear=function(year){var year=(year>=2000)?year:((year<80)?year+2000:year+1900);var check1=year%4;var check2=year%100;var check3=year%400;var result=((check3=="0")?(1):((check2=="0")?(0):((check1=="0")?(1):(0))));if(result==0)return false;return true;}
this.isYear=function(value){if(value=="")return false;for(var x=1900;x<=2100;x++){if(value==x)return true;}
return false;}
this.generate=function(){this.setSpace();var start=1;var end=this.monthsLength[this.currentDate.getMonth()];if(this.currentDate.getMonth()==1&&this.isLeapYear(this.currentDate.getFullYear()))end=29;var calendarInstance=document.getElementById(this.activeCalendar+'Calendar');if(!calendarInstance)return;for(var i=calendarInstance.childNodes.length-1;i>=0;i--){calendarInstance.removeChild(calendarInstance.childNodes[i]);}
calendarInstance.style.display='block';var table=document.createElement('table');table.className='inlineCalendarHeader';calendarInstance.appendChild(table);var row=document.createElement('tr');table.appendChild(row);var cell=document.createElement('td');cell.className='changeElement';row.appendChild(cell);var link=document.createElement('a');if(IS_IE)link.onclick="calendar.backwardMonth()";else link.onclick=function(){calendar.backwardMonth();};cell.appendChild(link);link.innerHTML='&laquo;';cell=document.createElement('td');row.appendChild(cell);var span=document.createElement('span');cell.appendChild(span);span.appendChild(document.createTextNode(this.months[this.currentDate.getMonth()]));cell=document.createElement('td');cell.className='changeElement';row.appendChild(cell);link=document.createElement('a');if(IS_IE)link.onclick="calendar.forwardMonth()";else link.onclick=function(){calendar.forwardMonth();};cell.appendChild(link);link.innerHTML='&raquo;';table=document.createElement('table');table.className='inlineCalendarTable';calendarInstance.appendChild(table);row=document.createElement('tr');table.appendChild(row);for(var index=0;index<=6;index++){cell=document.createElement('td');cell.className='weekDays';row.appendChild(cell);cell.appendChild(document.createTextNode(this.days[index]));}
row=document.createElement('tr');table.appendChild(row);for(var index=0;index<this.space;index++){cell=document.createElement('td');row.appendChild(cell);}
var e=start-1;var mark=0;if(this.isYear(document.getElementById(this.activeCalendar+"Year").value)==true){if(document.getElementById(this.activeCalendar+"Year").value==this.currentDate.getFullYear()&&this.currentDate.getMonth()==document.getElementById(this.activeCalendar+'Month').selectedIndex-1){mark=document.getElementById(this.activeCalendar+'Day').selectedIndex;}}
for(var index=1;index<=end-e;index++){var border=index+this.space;var className='dayField';if(index==mark){className='markedDayField';}
cell=document.createElement('td');cell.className=className;row.appendChild(cell);link=document.createElement('a');if(IS_IE)link.onclick="calendar.setDate("+start+");";else{link.name=start;link.onclick=function(){calendar.setDate(this.name);};}
cell.appendChild(link);link.appendChild(document.createTextNode(start));start++;if((border==7||border==14||border==21||border==28||border==35)&&index+1<=end-e){row=document.createElement('tr');table.appendChild(row);}}
while(border%7!=0){cell=document.createElement('td');row.appendChild(cell);border++;}
table=document.createElement('table');table.className='inlineCalendarFooter';calendarInstance.appendChild(table);row=document.createElement('tr');table.appendChild(row);cell=document.createElement('td');cell.className='changeElement';row.appendChild(cell);link=document.createElement('a');if(IS_IE)link.onclick="calendar.backwardYear();";else link.onclick=function(){calendar.backwardYear();};cell.appendChild(link);link.innerHTML='&laquo;';cell=document.createElement('td');row.appendChild(cell);span=document.createElement('span');cell.appendChild(span);span.appendChild(document.createTextNode(this.currentDate.getFullYear()));cell=document.createElement('td');cell.className='changeElement';row.appendChild(cell);link=document.createElement('a');if(IS_IE)link.onclick="calendar.forwardYear();";else link.onclick=function(){calendar.forwardYear();};cell.appendChild(link);link.innerHTML='&raquo;';if(IS_IE){calendarInstance.innerHTML=calendarInstance.innerHTML;var parentHeight=calendarInstance.parentNode?calendarInstance.parentNode.offsetHeight:0;calendarInstance.style.marginTop=(-calendarInstance.offsetHeight-parentHeight)+'px';}}
this.setCurrentDate=function(){var today=new Date();var year=today.getFullYear();if(this.isYear(document.getElementById(this.activeCalendar+"Year").value)==true){year=document.getElementById(this.activeCalendar+"Year").value;}
var month=today.getMonth();if(document.getElementById(this.activeCalendar+"Month").selectedIndex!=0){month=document.getElementById(this.activeCalendar+"Month").selectedIndex-1;}
var day=today.getDate();if(document.getElementById(this.activeCalendar+"Day").selectedIndex!=0){var day=document.getElementById(this.activeCalendar+"Day").selectedIndex;if(day>this.monthsLength[month]){day=this.monthsLength[month];if(month==1&&this.isLeapYear(year)){day=29;}}}
this.currentDate=new Date(year,month,day);}
this.backwardMonth=function(){if(this.currentDate.getMonth()==0){this.currentDate=new Date(this.currentDate.getFullYear()-1,11,1);}
else{this.currentDate=new Date(this.currentDate.getFullYear(),this.currentDate.getMonth()-1,1);}
this.generate();}
this.forwardMonth=function(){if(this.currentDate.getMonth()==11){this.currentDate=new Date(this.currentDate.getFullYear()+1,0,1);}
else{this.currentDate=new Date(this.currentDate.getFullYear(),this.currentDate.getMonth()+1,1);}
this.generate();}
this.backwardYear=function(){this.currentDate=new Date(this.currentDate.getFullYear()-1,this.currentDate.getMonth(),this.currentDate.getDate());this.generate();}
this.forwardYear=function(){this.currentDate=new Date(this.currentDate.getFullYear()+1,this.currentDate.getMonth(),this.currentDate.getDate());this.generate();}
this.setDate=function(day){document.getElementById(this.activeCalendar+'Day').selectedIndex=day;document.getElementById(this.activeCalendar+'Month').selectedIndex=this.currentDate.getMonth()+1;document.getElementById(this.activeCalendar+'Year').value=this.currentDate.getFullYear();this.close();}}
