function Calendar(D){this.table=D.getElementsByTagName("table")[0];
this.body=D.getElementsByTagName("tbody")[0];
var B=D.getElementsByTagName("select");
this.selectMonth=B[0];
this.selectYear=B[1];
this.currentCell=null;
this.mode="future";
EventListener.addEvent(this.table,"click",this.scope(this.getDate));
EventListener.addEvent(this.table,"mousemove",this.scope(this.hoverDate));
B[0].onchange=B[1].onchange=this.scope(this.chooseDate);
var A=new Date();
this.now=new Date(A.getFullYear(),A.getMonth(),A.getDate());
var C=new Date(parseInt(this.selectYear.value,10),(parseInt(this.selectMonth.value,10)-1),1);
this.setDate(C)
}Calendar.prototype={chooseDate:function(D){var B=parseInt(this.selectYear.value);
var C=parseInt(this.selectMonth.value)-1;
var A=1;
this.setDate(new Date(B,C,A))
},setDate:function(A,B){this.currentDate=A;
this.currentMonth=A.getMonth();
this.currentYear=A.getFullYear();
if(B){this.mode=B
}Utils.setSelectValue(this.selectMonth,this.currentMonth+1);
Utils.setSelectValue(this.selectYear,this.currentYear);
this.createTable()
},cloneSelects:function(B,D){var A=B.options;
var E=D.options;
this.selectYear.options.length=this.selectMonth.options.length=0;
for(var C=0;
(C<A.length||C<E.length);
C++){if(B[C]){this.selectYear.options[C]=new Option(A[C].text,A[C].value)
}if(D[C]){this.selectMonth.options[C]=new Option(D[C].text,D[C].value)
}}this.selectMonth.DC.updateOptions();
this.selectYear.DC.updateOptions()
},setAction:function(A){this.action=A
},hoverDate:function(C){var B=EventListener.getTarget(C);
var A=B.innerHTML;
if(this.currentCell&&(!B||B!=this.currentCell)){ClassName.remove(this.currentCell,"current")
}if(/td/i.test(B.nodeName)&&/^[0-9]+$/.test(A)&&!/past/.test(B.className)){this.currentCell=B;
ClassName.add(B,"current")
}},getDate:function(D){var C=EventListener.getTarget(D);
var A=C.innerHTML;
if(/td/i.test(C.nodeName)&&/^[0-9]+$/.test(A)&&!/past/.test(C.className)){try{this.action(new Date(this.currentYear,this.currentMonth,A));
EventListener.cancelEvent(D)
}catch(B){}}},createTable:function(){var B=this.currentDate;
B.setDate(1);
var I,L,J,E=false;
var H=B.getMonth();
var F=B.getDay();
var K=F+42;
var G=document.createElement("tbody");
this.currentCell=null;
this.table.removeChild(this.body);
this.body=this.table.appendChild(G);
var D=/future/i;
var A=/past/i;
for(var C=0;
C<K;
C++){I=C+1-F;
B.setMonth(H);
if(I<1){I=" "
}else{B.setDate(I);
if(B.getMonth()!=H){I=" ",E=true
}}if(C%7==0){if(E){break
}L=this.body.insertRow(C/7)
}J=L.insertCell(C%7);
J.innerHTML=I;
if((B<this.now&&D.test(this.mode))||(B>=this.now&&A.test(this.mode))){J.className="past"
}if(C%7==0||C%7==6){J.className+=" weekend"
}}},shiftDate:function(A,B){var C=this.currentMonth+=B;
var D=this.currentYear+=A;
if(C%12<0||C>12){D+=C%12;
C=(12+C)%12
}this.currentDate=new Date(D,C,1);
this.currentMonth=C;
this.currentYear=D;
this.createTable()
},scope:function(B){var A=this;
return function(){return B.apply(A,arguments)
}
}};