var EventCalendar=new Class({Implements:[Options,Events],options:{requestUrl:null,yearSelector:"tbody td",monthSelector:"tbody td",daySelector:"tbody td",typeSelector:".ecType li",classes:{yearCurrent:"ec_yearCur",yearHovered:"ec_yearHovered",leaveYear:"ec_yearOut",monthCurrent:"ec_monthCur",monthHovered:"ec_monthHovered",leaveMonth:"ec_monthOut",dayCurrent:"ec_dayCur",dayHovered:"ec_dayHovered",dayMarked:"ec_dayMarked",leaveDay:"ec_dayOut",typeHovered:"ec_typeHovered",typeCurrent:"ec_typeCurrent"},onDaySelect:$empty(),onBuildComplete:$empty(),useType:null},initialize:function(d,f,e,a,b){this.setOptions(b);this.calendar=d;this.containerYear=f;this.containerMonth=e;this.containerDay=a;this.debugMode=true;this.mode="index";this.elmCurrentYear=null;this.elmCurrentMonth=null;this.elmCurrentDay=null;this.currentDate=null;this.elmYear=[];this.elmMonth=[];this.elmDay=[];this.currentTypeElm=null;this.currentType="";this.useTypeMenu=false;this.onDaySelect=this.options.onDaySelect;if(!this.checkInit()){return}var c=this;this.requestIsRunning=false;this.calendarRequest=new Request({url:c.options.requestUrl,onRequest:function(){c.requestIsRunning=true},onFailure:function(){c.requestIsRunning=false},onComplete:function(h,i){c.requestIsRunning=false;var g=i.getElementsByTagName("results")[0];c.updateCalendar(g)}});this.addTypeList()},checkInit:function(){var a=1;var b="";if(!$chk(this.calendar)){b+=a+": Required element 'Calendar' not found.\n";a++}if(!$chk(this.containerYear)){b+=a+": Required element 'containerYear' not found.\n";a++}if(!$chk(this.containerMonth)){b+=a+": Required element 'containerMonth' not found.\n";a++}if(!$chk(this.containerDay)){b+=a+": Required element 'containerDay' not found.\n";a++}if(this.options.yearSelector.clean()==""){b+=a+": Please check required option 'yearSelector'.\n";a++}if(this.options.monthSelector.clean()==""){b+=a+": Please check required option 'monthSelector'.\n";a++}if(this.options.daySelector.clean()==""){b+=a+": Please check required option 'daySelector'.\n";a++}if(this.debugNode==true&&b!=""){alert(b);return false}return true},getRequest:function(){var a=new Hash();a.set("type",this.currentType);if(this.currentDate!=""){a.set("date",this.currentDate)}this.calendarRequest.send({data:a.toQueryString()})},addTypeList:function(){var d=this;var f=false;if(this.options.useType&&$defined(this.options.useType.container)&&$defined(this.options.useType.types)&&this.options.useType.types.getLength()>0){var c="";var a="";if($defined(this.options.useType.classes)){if($defined(this.options.useType.classes.hovered)){c=this.options.useType.classes.hovered}if($defined(this.options.useType.classes.current)){a=this.options.useType.classes.current}}var b=new Element("ul");var e=null;this.options.useType.types.each(function(j,i){if(i!=""){f=true}var g=new Element("li",{events:{doActivate:function(){this.addClass(a);d.toggleType(this)},doDeactivate:function(){this.removeClass(a)},mouseenter:function(k){this.addClass(c)},mouseleave:function(k){this.removeClass(c)},click:function(k){if(!d.requestIsRunning){this.fireEvent("doActivate")}}}});var h=new Element("span",{html:j.text}).inject(g);g.store("type",i);if(j.isActive&&!d.currentTypeElm){e=g}g.inject(b)});this.options.useType.container.set("html","");b.inject(this.options.useType.container);if(e){e.fireEvent("doActivate")}}if(!f){this.options.useType=null}else{this.getRequest()}this.fireEvent("onBuildComplete")},toggleType:function(b){var a=b.retrieve("type");if(a!=this.currentType){if(this.currentTypeElm){this.currentTypeElm.fireEvent("doDeactivate")}this.currentTypeElm=b;this.currentType=a;this.onDaySelect=this.options.useType.types.get(this.currentType).onDaySelect;this.getRequest()}},updateCalendar:function(a){this.garbageElements();switch(this.mode){case"year":if(a.getElementsByTagName("month")[0]){this.containerMonth.set("html",a.getElementsByTagName("month")[0].childNodes[0].nodeValue);this.parseMonth()}if(a.getElementsByTagName("day")[0]){this.containerDay.set("html",a.getElementsByTagName("day")[0].childNodes[0].nodeValue);this.parseDay()}break;case"month":if(a.getElementsByTagName("day")[0]){this.containerDay.set("html",a.getElementsByTagName("day")[0].childNodes[0].nodeValue);this.parseDay()}break;default:if(a.getElementsByTagName("year")[0]){this.containerYear.set("html",a.getElementsByTagName("year")[0].childNodes[0].nodeValue);this.parseYear()}if(a.getElementsByTagName("month")[0]){this.containerMonth.set("html",a.getElementsByTagName("month")[0].childNodes[0].nodeValue);this.parseMonth()}if(a.getElementsByTagName("day")[0]){this.containerDay.set("html",a.getElementsByTagName("day")[0].childNodes[0].nodeValue);this.parseDay()}break}},parseYear:function(){var c=this;var a=this.options.classes.leaveYear;var b=this.containerYear.getElements(this.options.yearSelector).filter(function(d){return(d.hasClass(a))?false:true});if(b.length>0){b.each(function(d){d.addEvents({mouseenter:function(e){this.addClass(c.options.classes.yearHovered)},mouseleave:function(e){this.removeClass(c.options.classes.yearHovered)},click:function(e){if(!c.requestIsRunning){c.currentDate=(this.getProperty("rel"))?this.getProperty("rel"):"";if($chk(c.elmCurrentYear)){c.elmCurrentYear.removeClass(c.options.classes.yearCurrent)}this.addClass(c.options.classes.yearCurrent);c.elmCurrentYear=this;c.mode="year";c.getRequest()}}});if(d.hasClass(c.options.classes.yearCurrent)){c.elmCurrentYear=d}})}},parseMonth:function(){var c=this;var b=this.options.classes.leaveMonth;var a=this.containerMonth.getElements(this.options.monthSelector).filter(function(d){return(d.hasClass(b))?false:true});if(a.length>0){a.each(function(d){d.addEvents({mouseenter:function(e){this.addClass(c.options.classes.monthHovered)},mouseleave:function(e){this.removeClass(c.options.classes.monthHovered)},click:function(e){if(!c.requestIsRunning){c.currentDate=(this.getProperty("rel"))?this.getProperty("rel"):"";if($chk(c.elmCurrentMonth)){c.elmCurrentMonth.removeClass(c.options.classes.monthCurrent)}this.addClass(c.options.classes.monthCurrent);c.elmCurrentMonth=this;c.mode="month";c.getRequest()}}});if(d.hasClass(c.options.classes.monthCurrent)){c.elmCurrentMonth=d}})}},parseDay:function(){var b=this;var c=this.options.classes.dayMarked;var a=this.containerDay.getElements(this.options.daySelector).filter(function(d){return(d.hasClass(c))?true:false});if(a.length>0){a.each(function(d){d.addEvents({mouseenter:function(e){this.addClass(b.options.classes.dayHovered)},mouseleave:function(e){this.removeClass(b.options.classes.dayHovered)},click:function(f){var e=(this.getProperty("rel"))?this.getProperty("rel"):"";b.onDaySelect(e)}});if(d.hasClass(b.options.classes.dayCurrent)){b.elmCurrentDay=d}})}},garbageElements:function(){switch(this.mode){case"year":this.elmMonth.each(function(a){a.removeEvents()});break;case"month":this.elmDay.each(function(a){a.removeEvents()});break;default:this.elmYear.each(function(a){a.removeEvents()});this.elmMonth.each(function(a){a.removeEvents()});this.elmDay.each(function(a){a.removeEvents()});break}},getData:function(b){var a=new Hash({date:$chk(b)?b.clean():""});this.calendarRequest.send({date:a.toQueryString()})}});
