var Calendar=new Class({options:{blocked:[],classes:[],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],direction:0,draggable:true,months:["January","February","March","April","May","June","July","August","September","October","November","December"],navigation:1,offset:1,onHideStart:Class.empty,onHideComplete:Class.empty,onShowStart:Class.empty,onShowComplete:Class.empty,pad:1,tweak:{x:0,y:0}},initialize:function(_1,_2){

if(!_1){

return false;

}

this.setOptions(_2);

var _3=["calendar","prev","next","month","year","today","invalid","valid","inactive","active","hover","hilite"];

var _4=_3.map(function(_5,i){

if(this.options.classes[i]){

if(this.options.classes[i].length){

_5=this.options.classes[i];

}

}

return _5;

},this);

this.classes=_4.associate(_3);

this.calendar=new Element("div",{"styles":{left:"-1000px",opacity:0,position:"absolute",top:"-1000px",zIndex:1000}}).addClass(this.classes.calendar).injectInside(document.body);

this.calendar.coord=this.calendar.getCoordinates();

if(window.ie6){

this.iframe=new Element("iframe",{"styles":{height:this.calendar.coord.height+"px",left:"-1000px",position:"absolute",top:"-1000px",width:this.calendar.coord.width+"px",zIndex:999}}).injectInside(document.body);

this.iframe.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";

}

this.fx=this.calendar.effect("opacity",{onStart:function(){

if(this.calendar.getStyle("opacity")==0){

if(window.ie6){

this.iframe.setStyle("display","block");

}

this.calendar.setStyle("display","block");

this.fireEvent("onShowStart",this.element);

}else{

this.fireEvent("onHideStart",this.element);

}

}.bind(this),onComplete:function(){

if(this.calendar.getStyle("opacity")==0){

this.calendar.setStyle("display","none");

if(window.ie6){

this.iframe.setStyle("display","none");

}

this.fireEvent("onHideComplete",this.element);

}else{

this.fireEvent("onShowComplete",this.element);

}

}.bind(this)});

if(window.Drag&&this.options.draggable){

this.drag=new Drag.Move(this.calendar,{onDrag:function(){

if(window.ie6){

this.iframe.setStyles({left:this.calendar.style.left,top:this.calendar.style.top});

}

}.bind(this)});

}

this.calendars=[];

var id=0;

var d=new Date();

d.setDate(d.getDate());

for(var i in _1){

var _a={button:$(i+"_button"),el:$(i),els:[],id:id++,month:d.getMonth(),visible:false,year:d.getFullYear()};

if(!this.element(i,_1[i],_a)){

continue;

}

_a.el.addClass(this.classes.calendar);

_a.button.setProperty("type","button").addClass(this.classes.calendar).addEvent("click",function(_b){

this.toggle(_b);

}.pass(_a,this));

_a.val=this.read(_a);

$extend(_a,this.bounds(_a));

$extend(_a,this.values(_a));

this.rebuild(_a);

this.calendars.push(_a);

}

},blocked:function(_c){

var _d=[];

var _e=new Date(_c.year,_c.month,1).getDay();

var _f=new Date(_c.year,_c.month+1,0).getDate();

this.options.blocked.each(function(_10){

var _11=_10.split(" ");

for(var i=0;i<3;i++){

if(!_11[i]){

_11[i]="*";

}

_11[i]=_11[i].contains(",")?_11[i].split(","):new Array(_11[i]);

}

if(_11[2].contains(_c.year+"")||_11[2].contains("*")){

if(_11[1].contains(_c.month+1+"")||_11[1].contains("*")){

_11[0].each(function(val){

if(val>0){

_d.push(val.toInt());

}

});

if(_11[3]){

_11[3]=_11[3].contains(",")?_11[3].split(","):new Array(_11[3]);

for(var i=0;i<_f;i++){

var day=(i+_e)%7;

if(_11[3].contains(day+"")){

_d.push(i+1);

}

}

}

}

}

},this);

return _d;

},bounds:function(cal){

var _16=new Date(1000,0,1);

var end=new Date(2999,11,31);

var _18=new Date().getDate();

if(this.options.direction>0){

_16=new Date();

_16.setDate(_18+this.options.pad*cal.id);

}

if(this.options.direction<0){

end=new Date();

end.setDate(_18-this.options.pad*(this.calendars.length-cal.id-1));

}

cal.els.each(function(el){

if(el.getTag()=="select"){

if(el.format.test("(y|Y)")){

var _1a=[];

el.getChildren().each(function(_1b){

var _1c=this.unformat(_1b.value,el.format);

if(!_1a.contains(_1c[0])){

_1a.push(_1c[0]);

}

},this);

_1a.sort(this.sort);

if(_1a[0]>_16.getFullYear()){

d=new Date(_1a[0],_16.getMonth()+1,0);

if(_16.getDate()>d.getDate()){

_16.setDate(d.getDate());

}

_16.setYear(_1a[0]);

}

if(_1a.getLast()<end.getFullYear()){

d=new Date(_1a.getLast(),end.getMonth()+1,0);

if(end.getDate()>d.getDate()){

end.setDate(d.getDate());

}

end.setYear(_1a.getLast());

}

}

if(el.format.test("(F|m|M|n)")){

var _1d=[];

var _1e=[];

el.getChildren().each(function(_1f){

var _20=this.unformat(_1f.value,el.format);

if($type(_20[0])!="number"||_20[0]==_1a[0]){

if(!_1d.contains(_20[1])){

_1d.push(_20[1]);

}

}

if($type(_20[0])!="number"||_20[0]==_1a.getLast()){

if(!_1e.contains(_20[1])){

_1e.push(_20[1]);

}

}

},this);

_1d.sort(this.sort);

_1e.sort(this.sort);

if(_1d[0]>_16.getMonth()){

d=new Date(_16.getFullYear(),_1d[0]+1,0);

if(_16.getDate()>d.getDate()){

_16.setDate(d.getDate());

}

_16.setMonth(_1d[0]);

}

if(_1e.getLast()<end.getMonth()){

d=new Date(_16.getFullYear(),_1e.getLast()+1,0);

if(end.getDate()>d.getDate()){

end.setDate(d.getDate());

}

end.setMonth(_1e.getLast());

}

}

}

},this);

return {"start":_16,"end":end};

},caption:function(cal){

var _22={prev:{"month":true,"year":true},next:{"month":true,"year":true}};

if(cal.year==cal.start.getFullYear()){

_22.prev.year=false;

if(cal.month==cal.start.getMonth()&&this.options.navigation==1){

_22.prev.month=false;

}

}

if(cal.year==cal.end.getFullYear()){

_22.next.year=false;

if(cal.month==cal.end.getMonth()&&this.options.navigation==1){

_22.next.month=false;

}

}

if($type(cal.months)=="array"){

if(cal.months.length==1&&this.options.navigation==2){

_22.prev.month=_22.next.month=false;

}

}

var _23=new Element("caption");

var _24=new Element("a").addClass(this.classes.prev).appendText("<");

var _25=new Element("a").addClass(this.classes.next).appendText(">");

if(this.options.navigation==2){

var _26=new Element("span").addClass(this.classes.month).injectInside(_23);

if(_22.prev.month){

_24.clone().addEvent("click",function(cal){

this.navigate(cal,"m",-1);

}.pass(cal,this)).injectInside(_26);

}

_26.adopt(new Element("span").appendText(this.options.months[cal.month]));

if(_22.next.month){

_25.clone().addEvent("click",function(cal){

this.navigate(cal,"m",1);

}.pass(cal,this)).injectInside(_26);

}

var _29=new Element("span").addClass(this.classes.year).injectInside(_23);

if(_22.prev.year){

_24.clone().addEvent("click",function(cal){

this.navigate(cal,"y",-1);

}.pass(cal,this)).injectInside(_29);

}

_29.adopt(new Element("span").appendText(cal.year));

if(_22.next.year){

_25.clone().addEvent("click",function(cal){

this.navigate(cal,"y",1);

}.pass(cal,this)).injectInside(_29);

}

}else{

if(_22.prev.month&&this.options.navigation){

_24.clone().addEvent("click",function(cal){

this.navigate(cal,"m",-1);

}.pass(cal,this)).injectInside(_23);

}

_23.adopt(new Element("span").addClass(this.classes.month).appendText(this.options.months[cal.month]));

_23.adopt(new Element("span").addClass(this.classes.year).appendText(cal.year));

if(_22.next.month&&this.options.navigation){

_25.clone().addEvent("click",function(cal){

this.navigate(cal,"m",1);

}.pass(cal,this)).injectInside(_23);

}

}

return _23;

},changed:function(cal){

cal.val=this.read(cal);

$extend(cal,this.values(cal));

this.rebuild(cal);

if(!cal.val){

return;

}

if(cal.val.getDate()<cal.days[0]){

cal.val.setDate(cal.days[0]);

}

if(cal.val.getDate()>cal.days.getLast()){

cal.val.setDate(cal.days.getLast());

}

cal.els.each(function(el){

el.value=this.format(cal.val,el.format);

},this);

this.check(cal);

this.calendars.each(function(kal){

if(kal.visible){

this.display(kal);

}

},this);

},check:function(cal){

this.calendars.each(function(kal,i){

if(kal.val){

var _34=false;

if(i<cal.id){

var _35=new Date(Date.parse(cal.val));

_35.setDate(_35.getDate()-(this.options.pad*(cal.id-i)));

if(_35<kal.val){

_34=true;

}

}

if(i>cal.id){

var _35=new Date(Date.parse(cal.val));

_35.setDate(_35.getDate()+(this.options.pad*(i-cal.id)));

if(_35>kal.val){

_34=true;

}

}

if(_34){

if(kal.start>_35){

_35=kal.start;

}

if(kal.end<_35){

_35=kal.end;

}

kal.month=_35.getMonth();

kal.year=_35.getFullYear();

$extend(kal,this.values(kal));

kal.val=kal.days.contains(_35.getDate())?_35:null;

this.write(kal);

if(kal.visible){

this.display(kal);

}

}

}

},this);

},clicked:function(td,day,cal){

cal.val=(this.value(cal)==day)?null:new Date(cal.year,cal.month,day);

this.write(cal);

if(!cal.val){

cal.val=this.read(cal);

}

if(cal.val){

this.check(cal);

this.toggle(cal);

}else{

td.addClass(this.classes.valid);

td.removeClass(this.classes.active);

}

},display:function(cal){

this.calendar.empty();

this.calendar.className=this.classes.calendar+" "+this.options.months[cal.month].toLowerCase();

var div=new Element("div").injectInside(this.calendar);

var _3b=new Element("table").injectInside(div).adopt(this.caption(cal));

var _3c=new Element("thead").injectInside(_3b);

var tr=new Element("tr").injectInside(_3c);

for(var i=0;i<=6;i++){

var th=this.options.days[(i+this.options.offset)%7];

tr.adopt(new Element("th",{"title":th}).appendText(th.substr(0,1)));

}

var _40=new Element("tbody").injectInside(_3b);

var tr=new Element("tr").injectInside(_40);

var d=new Date(cal.year,cal.month,1);

var _42=((d.getDay()-this.options.offset)+7)%7;

var _43=new Date(cal.year,cal.month+1,0).getDate();

var _44=new Date(cal.year,cal.month,0).getDate();

var _45=this.value(cal);

var _46=cal.days;

var _47=[];

var _48=[];

this.calendars.each(function(kal,i){

if(kal!=cal&&kal.val){

if(cal.year==kal.val.getFullYear()&&cal.month==kal.val.getMonth()){

_47.push(kal.val.getDate());

}

if(cal.val){

for(var day=1;day<=_43;day++){

d.setDate(day);

if((i<cal.id&&d>kal.val&&d<cal.val)||(i>cal.id&&d>cal.val&&d<kal.val)){

if(!_48.contains(day)){

_48.push(day);

}

}

}

}

}

},this);

var d=new Date();

var _4c=new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime();

for(var i=1;i<43;i++){

if((i-1)%7==0){

tr=new Element("tr").injectInside(_40);

}

var td=new Element("td").injectInside(tr);

var day=i-_42;

var _4f=new Date(cal.year,cal.month,day);

var cls="";

if(day===_45){

cls=this.classes.active;

}else{

if(_47.contains(day)){

cls=this.classes.inactive;

}else{

if(_46.contains(day)){

cls=this.classes.valid;

}else{

if(day>=1&&day<=_43){

cls=this.classes.invalid;

}

}

}

}

if(_4f.getTime()==_4c){

cls=cls+" "+this.classes.today;

}

if(_48.contains(day)){

cls=cls+" "+this.classes.hilite;

}

td.addClass(cls);

if(_46.contains(day)){

td.setProperty("title",this.format(_4f,"D M jS Y"));

td.addEvents({"click":function(td,day,cal){

this.clicked(td,day,cal);

}.pass([td,day,cal],this),"mouseover":function(td,cls){

td.addClass(cls);

}.pass([td,this.classes.hover]),"mouseout":function(td,cls){

td.removeClass(cls);

}.pass([td,this.classes.hover])});

}

if(day<1){

day=_44+day;

}else{

if(day>_43){

day=day-_43;

}

}

td.appendText(day);

}

},element:function(el,f,cal){

if($type(f)=="object"){

for(var i in f){

if(!this.element(i,f[i],cal)){

return false;

}

}

return true;

}

el=$(el);

if(!el){

return false;

}

el.format=f;

if(el.getTag()=="select"){

el.addEvent("change",function(cal){

this.changed(cal);

}.pass(cal,this));

}else{

el.readOnly=true;

el.addEvent("focus",function(cal){

this.toggle(cal);

}.pass(cal,this));

}

cal.els.push(el);

return true;

},format:function(_5e,f){

var g="";

if(_5e){

var d=_5e.getDate();

var day=this.options.days[_5e.getDay()];

var m=_5e.getMonth()+1;

var _64=this.options.months[_5e.getMonth()];

var y=_5e.getFullYear()+"";

for(var i=0;i<f.length;i++){

var c=f.charAt(i);

switch(c){

case "y":

y=y.substr(2);

case "Y":

g+=y;

break;

case "m":

if(m<10){

m="0"+m;

}

case "n":

g+=m;

break;

case "M":

_64=_64.substr(0,3);

case "F":

g+=_64;

break;

case "d":

if(d<10){

d="0"+d;

}

case "j":

g+=d;

break;

case "D":

day=day.substr(0,3);

case "l":

g+=day;

break;

case "S":

if(d%10==1&&d!="11"){

g+="st";

}else{

if(d%10==2&&d!="12"){

g+="nd";

}else{

if(d%10==3&&d!="13"){

g+="rd";

}else{

g+="th";

}

}

}

break;

default:

g+=c;

}

}

}

return g;

},navigate:function(cal,_69,n){

switch(_69){

case "m":

if($type(cal.months)=="array"){

var i=cal.months.indexOf(cal.month)+n;

if(i<0||i==cal.months.length){

if(this.options.navigation==1){

this.navigate(cal,"y",n);

}

i=(i<0)?cal.months.length-1:0;

}

cal.month=cal.months[i];

}else{

var i=cal.month+n;

if(i<0||i==12){

if(this.options.navigation==1){

this.navigate(cal,"y",n);

}

i=(i<0)?11:0;

}

cal.month=i;

}

break;

case "y":

if($type(cal.years)=="array"){

var i=cal.years.indexOf(cal.year)+n;

cal.year=cal.years[i];

}else{

cal.year+=n;

}

break;

}

$extend(cal,this.values(cal));

if($type(cal.months)=="array"){

var i=cal.months.indexOf(cal.month);

if(i<0){

cal.month=cal.months[0];

}

}

this.display(cal);

},read:function(cal){

var arr=[null,null,null];

cal.els.each(function(el){

var _6f=this.unformat(el.value,el.format);

_6f.each(function(val,i){

if($type(val)=="number"){

arr[i]=val;

}

});

},this);

if($type(arr[0])=="number"){

cal.year=arr[0];

}

if($type(arr[1])=="number"){

cal.month=arr[1];

}

var val=null;

if(arr.every(function(i){

return $type(i)=="number";

})){

var _74=new Date(arr[0],arr[1]+1,0).getDate();

if(arr[2]>_74){

arr[2]=_74;

}

val=new Date(arr[0],arr[1],arr[2]);

}

return (cal.val==val)?null:val;

},rebuild:function(cal){

cal.els.each(function(el){

if(el.getTag()=="select"&&el.format.test("^(d|j)$")){

var d=this.value(cal);

if(!d){

d=el.value.toInt();

}

el.empty();

cal.days.each(function(day){

var _79=new Element("option",{"selected":(d==day),"value":((el.format=="d"&&day<10)?"0"+day:day)}).appendText(day).injectInside(el);

},this);

}

},this);

},sort:function(a,b){

return a-b;

},toggle:function(cal){

document.removeEvent("mousedown",this.fn);

if(cal.visible){

cal.visible=false;

cal.button.removeClass(this.classes.active);

this.fx.start(1,0);

}else{

this.fn=function(e,cal){

var e=new Event(e);

var el=e.target;

var _80=false;

while(el!=document.body&&el.nodeType==1){

if(el==this.calendar){

_80=true;

}

this.calendars.each(function(kal){

if(kal.button==el||kal.els.contains(el)){

_80=true;

}

});

if(_80){

e.stop();

return false;

}else{

el=el.parentNode;

}

}

this.toggle(cal);

}.create({"arguments":cal,"bind":this,"event":true});

document.addEvent("mousedown",this.fn);

this.calendars.each(function(kal){

if(kal==cal){

kal.visible=true;

kal.button.addClass(this.classes.active);

}else{

kal.visible=false;

kal.button.removeClass(this.classes.active);

}

},this);

var _83=window.getSize().scrollSize;

var _84=cal.button.getCoordinates();

var x=_84.right+this.options.tweak.x;

var y=_84.top+this.options.tweak.y;

if(x+this.calendar.coord.width>_83.x){

x-=(x+this.calendar.coord.width-_83.x);

}

if(y+this.calendar.coord.height>_83.y){

y-=(y+this.calendar.coord.height-_83.y);

}

this.calendar.setStyles({left:x+"px",top:y+"px"});

if(window.ie6){

this.iframe.setStyles({left:x+"px",top:y+"px"});

}

this.display(cal);

this.fx.start(0,1);

}

},unformat:function(val,f){

f=f.escapeRegExp();

var re={d:"([0-9]{2})",j:"([0-9]{1,2})",D:"("+this.options.days.map(function(day){

return day.substr(0,3);

}).join("|")+")",l:"("+this.options.days.join("|")+")",S:"(st|nd|rd|th)",F:"("+this.options.months.join("|")+")",m:"([0-9]{2})",M:"("+this.options.months.map(function(_8b){

return _8b.substr(0,3);

}).join("|")+")",n:"([0-9]{1,2})",Y:"([0-9]{4})",y:"([0-9]{2})"};

var arr=[];

var g="";

for(var i=0;i<f.length;i++){

var c=f.charAt(i);

if(re[c]){

arr.push(c);

g+=re[c];

}else{

g+=c;

}

}

var _90=val.match("^"+g+"$");

var _91=new Array(3);

if(_90){

_90=_90.slice(1);

arr.each(function(c,i){

i=_90[i];

switch(c){

case "y":

i="19"+i;

case "Y":

_91[0]=i.toInt();

break;

case "F":

i=i.substr(0,3);

case "M":

i=this.options.months.map(function(_94){

return _94.substr(0,3);

}).indexOf(i)+1;

case "m":

case "n":

_91[1]=i.toInt()-1;

break;

case "d":

case "j":

_91[2]=i.toInt();

break;

}

},this);

}

return _91;

},value:function(cal){

var day=null;

if(cal.val){

if(cal.year==cal.val.getFullYear()&&cal.month==cal.val.getMonth()){

day=cal.val.getDate();

}

}

return day;

},values:function(cal){

var _98,_99,_9a;

cal.els.each(function(el){

if(el.getTag()=="select"){

if(el.format.test("(y|Y)")){

_98=[];

el.getChildren().each(function(_9c){

var _9d=this.unformat(_9c.value,el.format);

if(!_98.contains(_9d[0])){

_98.push(_9d[0]);

}

},this);

_98.sort(this.sort);

}

if(el.format.test("(F|m|M|n)")){

_99=[];

el.getChildren().each(function(_9e){

var _9f=this.unformat(_9e.value,el.format);

if($type(_9f[0])!="number"||_9f[0]==cal.year){

if(!_99.contains(_9f[1])){

_99.push(_9f[1]);

}

}

},this);

_99.sort(this.sort);

}

if(el.format.test("(d|j)")&&!el.format.test("^(d|j)$")){

_9a=[];

el.getChildren().each(function(_a0){

var _a1=this.unformat(_a0.value,el.format);

if(_a1[0]==cal.year&&_a1[1]==cal.month){

if(!_9a.contains(_a1[2])){

_9a.push(_a1[2]);

}

}

},this);

}

}

},this);

var _a2=1;

var _a3=new Date(cal.year,cal.month+1,0).getDate();

if(cal.year==cal.start.getFullYear()){

if(_99==null&&this.options.navigation==2){

_99=[];

for(var i=0;i<12;i++){

if(i>=cal.start.getMonth()){

_99.push(i);

}

}

}

if(cal.month==cal.start.getMonth()){

_a2=cal.start.getDate();

}

}

if(cal.year==cal.end.getFullYear()){

if(_99==null&&this.options.navigation==2){

_99=[];

for(var i=0;i<12;i++){

if(i<=cal.end.getMonth()){

_99.push(i);

}

}

}

if(cal.month==cal.end.getMonth()){

_a3=cal.end.getDate();

}

}

var _a5=this.blocked(cal);

if($type(_9a)=="array"){

_9a=_9a.filter(function(day){

if(day>=_a2&&day<=_a3&&!_a5.contains(day)){

return day;

}

});

}else{

_9a=[];

for(var i=_a2;i<=_a3;i++){

if(!_a5.contains(i)){

_9a.push(i);

}

}

}

_9a.sort(this.sort);

return {"days":_9a,"months":_99,"years":_98};

},write:function(cal){

this.rebuild(cal);

cal.els.each(function(el){

el.value=this.format(cal.val,el.format);

},this);

}});

Calendar.implement(new Events,new Options);



