var ec_Calendar=new Class({Implements:[Events,Options],options:{classes:[],data:[],calendarID:"eventCalendar",direction:0,navigation:1,months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],onSelect:Class.empty,fieldName:"event_dates"},initialize:function(e,b){if(!e){return false}this.setOptions(b);if(data=e.getElement("input[type=hidden]")){if(data.get("value")!=""){$extend(this.options.data,data.get("value").clean().split(" "))}}this.activeDates=[];if(this.options.data.length>0){this.options.data.each(function(g){var d=this.unformat(g,"j/n/Y");d[1]++;this.activeDates.push(d[0]+(d[1]<10?"0":"")+d[1]+(d[2]<10?"0":"")+d[2])},this)}var c=["calendar","calendarinner","datelist","prev","next","month","year","today","invalid","valid","inactive","active","hover","hilite"];var a=c.map(function(g,d){if(this.options.classes[d]){if(this.options.classes[d].length){g=this.options.classes[d]}}return g},this);if(a[0]!="ec_calendar"){a[0]+=" ec_calendar"}this.classes=a.associate(c);this.calendar=e;var f=new Date();f.setDate(f.getDate()+this.options.direction.toInt());this.calendar.addClass(this.classes.calendar);this.cal={month:f.getMonth(),year:f.getFullYear(),els:[],active:this.activeDates};$extend(this.cal,this.bounds());$extend(this.cal,this.values());this.display()},display:function(){var m=this.cal;this.calendar.empty();this.calendar.set("class",this.classes.calendar+" "+this.options.months[m.month].toLowerCase());var n=new Element("div").addClass(this.classes.datelist).injectInside(this.calendar);this.dateList=new Element("textarea",{name:this.options.fieldName}).addEvent("focus",function(){this.blur()}).injectInside(n);var n=new Element("div").addClass(this.classes.calendarinner).injectInside(this.calendar);var u=new Element("table").injectInside(n).adopt(this.caption());var t=new Element("thead").injectInside(u);var b=new Element("tr").injectInside(t);for(var s=0;s<=6;s++){var g=this.options.days[(s)%7];b.adopt(new Element("th",{title:g}).appendText(g.substr(0,1)))}var a=new Element("tbody").injectInside(u);var b=new Element("tr").injectInside(a);var w=new Date(m.year,m.month,1);var f=((w.getDay()+7))%7;var l=new Date(m.year,m.month+1,0).getDate();var o=new Date(m.year,m.month,0).getDate();var w=new Date();var v=new Date(w.getFullYear(),w.getMonth(),w.getDate()).getTime();var h=m.active;var q=m.days;var p=[];var j=[];for(var s=1;s<43;s++){if((s-1)%7==0){b=new Element("tr").injectInside(a)}var k=new Element("td").injectInside(b);var r=s-f;var x=new Date(m.year,m.month,r);var e=this.format(x,"Ymd");var c="";if(h.contains(e)){if(q.contains(r)){c=this.classes.active}}else{if(p.contains(r)){c=this.classes.inactive}else{if(q.contains(r)){c=this.classes.valid}else{if(r>=1&&r<=l){c=this.classes.invalid}}}}if(x.getTime()==v){c+=" "+this.classes.today}if(j.contains(r)){c+=" "+this.classes.hilite}k.addClass(c);if(q.contains(r)){k.setProperty("title",this.format(x,"D M jS Y"));k.addEvents({click:function(i,d){this.clicked(i,d)}.pass([k,r],this),mouseover:function(i,d){i.addClass(d)}.pass([k,this.classes.hover]),mouseout:function(i,d){i.removeClass(d)}.pass([k,this.classes.hover])})}if(r<1){r=o+r}else{if(r>l){r=r-l}}k.appendText(r)}this.write()},caption:function(){var g=this.cal;var a={prev:{month:true,year:true},next:{month:true,year:true}};if(g.year==g.start.getFullYear()){a.prev.year=false;if(g.month==g.start.getMonth()&&this.options.navigation==1){a.prev.month=false}}if(g.year==g.end.getFullYear()){a.next.year=false;if(g.month==g.end.getMonth()&&this.options.navigation==1){a.next.month=false}}var b=new Element("caption");var e=new Element("a").addClass(this.classes.prev).appendText("\x3c");var d=new Element("a").addClass(this.classes.next).appendText("\x3e");if(this.options.navigation==2){var f=new Element("span").addClass(this.classes.month).injectInside(b);if(a.prev.month){e.clone().addEvent("click",function(){this.navigate("m",-1)}.bind(this)).injectInside(f)}f.adopt(new Element("span").appendText(this.options.months[g.month]));if(a.next.month){d.clone().addEvent("click",function(){this.navigate("m",1)}.bind(this)).injectInside(f)}var c=new Element("span").addClass(this.classes.year).injectInside(b);if(a.prev.year){e.clone().addEvent("click",function(){this.navigate("y",-1)}.bind(this)).injectInside(c)}c.adopt(new Element("span").appendText(g.year));if(a.next.year){d.clone().addEvent("click",function(){this.navigate("y",1)}.bind(this)).injectInside(c)}}else{if(a.prev.month&&this.options.navigation){e.clone().addEvent("click",function(){this.navigate("m",-1)}.bind(this)).injectInside(b)}b.adopt(new Element("span").addClass(this.classes.month).appendText(this.options.months[g.month]));b.adopt(new Element("span").addClass(this.classes.year).appendText(g.year));if(a.next.month&&this.options.navigation){d.clone().addEvent("click",function(){this.navigate("m",1)}.bind(this)).injectInside(b)}}return b},bounds:function(){var c=this.cal;var d=new Date(1000,0,0);var a=new Date(2999,11,31);var b=new Date().getDate()+this.options.direction.toInt();if(this.options.direction>0){d=new Date();d.setDate(b)}if(this.options.direction<0){a=new Date();a.setDate(b)}return{start:d,end:a}},values:function(){var f=this.cal;var d,a,h;var g=1;var e=new Date(f.year,f.month+1,0).getDate();if(f.year==f.start.getFullYear()){if(a==null&&this.options.navigation==2){a=[];for(var c=0;c<12;c++){a.push(c)}}if(f.month==f.start.getMonth()){g=f.start.getDate()}}if(f.year==f.end.getFullYear()){if(a==null&&this.options.navigation==2){a=[];for(var c=0;c<12;c++){if(c<=f.end.getMonth()){a.push(c)}}}if(f.month==f.end.getMonth()){e=f.end.getDate()}}var b=[];if($type(h)=="array"){h=h.filter(function(i){if(i>=g&&i<=e&&!b.contains(i)){return i}})}else{h=[];for(var c=g;c<=e;c++){if(!b.contains(c)){h.push(c)}}}h.sort(this.sort);return{days:h,months:a,years:d}},clicked:function(d,a){var c=this.cal;var b=this.format(new Date(c.year,c.month,a),"Ymd");if(c.active.contains(b)){c.active.erase(b);d.removeClass(this.classes.active);d.addClass(this.classes.valid)}else{c.active.push(b);d.removeClass(this.classes.valid);d.addClass(this.classes.active)}this.write();this.fireEvent("onSelect",c.el)},write:function(){var a=[];this.cal.active.sort();this.cal.active.each(function(c){var b=new Date(c.substr(0,4),c.substr(4,2)-1,c.substr(6,2));a.push(this.format(b,"j/n/Y"))},this);this.dateList.set("value",a.join("\n"))},navigate:function(b,d){var c=this.cal;switch(b){case"m":if($type(c.months)=="array"){var a=c.months.indexOf(c.month)+d;if(a<0||a==c.months.length){if(this.options.navigation==1){this.navigate("y",d)}a=(a<0)?c.months.length-1:0}c.month=c.months[a]}else{var a=c.month+d;if(a<0||a==12){if(this.options.navigation==1){this.navigate("y",d)}a=(a<0)?11:0}c.month=a}break;case"y":if($type(c.years)=="array"){var a=c.years.indexOf(c.year)+d;c.year=c.years[a]}else{c.year+=d}break}$extend(c,this.values(c));if($type(c.months)=="array"){var a=c.months.indexOf(c.month);if(a<0){c.month=c.months[0]}}this.display()},sort:function(d,c){return d-c},format:function(c,p){var m="";if(c){for(var g=0,k=p.length;g<k;g++){var e=c.getDate();var q=c.getDay();var d=this.options.days[q];var b=c.getMonth()+1;var h=this.options.months[b-1];var o=c.getFullYear()+"";var a=p.charAt(g);switch(a){case"y":o=o.substr(2);case"Y":m+=o;break;case"m":if(b<10){b="0"+b}case"n":m+=b;break;case"M":h=h.substr(0,3);case"F":m+=h;break;case"d":if(e<10){e="0"+e}case"j":m+=e;break;case"D":d=d.substr(0,3);case"l":m+=d;break;case"N":q+=1;case"w":m+=q;break;case"S":if(e%10==1&&e!="11"){m+="st"}else{if(e%10==3&&e!="12"){m+="nd"}else{if(e%10==3&&e!="13"){m+="rd"}else{m+="th"}}}break;default:m+=a}}}return m},unformat:function(k,j){j=j.escapeRegExp();var l={d:"([0-9]{2})",j:"([0-9]{1,2})",D:"("+this.options.days.map(function(c){return c.substr(0,3)}).join("|")+")",l:"("+this.options.days.join("|")+")",S:"(st|nd|rd|th)",F:"("+this.options.months.join("|")+")",m:"([0-9]{1,2})",M:"("+this.options.months.map(function(c){return c.substr(0,3)}).join("|")+")",n:"([0-9]{1,2})",Y:"([0-9]{4})",y:"([0-9]{2})"};var e=[];var f="";for(var b=0;b<j.length;b++){var h=j.charAt(b);if(l[h]){e.push(h);f+=l[h]}else{f+=h}}var d=k.match("^"+f+"$");var a=new Array(3);if(d){d=d.slice(1);e.each(function(m,g){g=d[g];switch(m){case"y":g="19"+g;case"Y":a[0]=g.toInt();break;case"F":g=g.substr(0,3);case"M":g=this.options.months.map(function(c){return c.substr(0,3)}).indexOf(g)+1;case"m":case"n":a[1]=g.toInt()-1;break;case"d":case"j":a[2]=g.toInt();break}},this)}return a}});
