var DatePicker=new Class({Implements:[Options,Events],d:"",today:"",choice:{},bodysize:{},limit:{},picker:null,slider:null,oldContents:null,newContents:null,input:null,visual:null,options:{pickerClass:"datepicker",dayShort:2,monthShort:3,startDay:1,timePicker:false,timePickerOnly:false,yearPicker:true,yearsPerPage:20,allowEmpty:true,animationDuration:400,useFadeInOut:!Browser.Engine.trident,startView:"month",positionOffset:{x:0,y:0},minDate:null,maxDate:null,toggleElements:null,toggle:null,draggable:true},initialize:function(b,a){this.setOptions({days:MooTools.lang.get("Date","days"),months:MooTools.lang.get("Date","months"),format:MooTools.lang.get("Date","shortDate")});var c=this.options.format;this.setOptions(a);if(this.options.timePicker&&this.options.format==c){var d=MooTools.lang.get("Date","shortTime");this.options.format=this.options.timePickerOnly?d:this.options.format+" "+d}if(this.options.toggleElements){this.toggle=document.getElements(this.toggleElements)}this.attach(b,this.options.toggle);if(this.options.timePickerOnly){this.options.timePicker=true;this.options.startView="time"}if(this.options.minDate){if(!(this.options.minDate instanceof Date)){this.options.minDate=Date.parse(this.options.minDate)}}if(this.options.maxDate){if(!(this.options.maxnDate instanceof Date)){this.options.maxDate=Date.parse(this.options.maxDate)}this.options.maxDate.setHours(23);this.options.maxDate.setMinutes(59);this.options.maxDate.setSeconds(59)}document.addEvent("mousedown",this.close.bindWithEvent(this))},attach:function(c,a){if(!c){return}if(a){var d=$type(a)=="array"?a:[document.id(a)];document.addEvents({keydown:function(g){var f=document.id(g.target);if(g.key=="tab"&&!f.hasClass("hour")&&!f.hasClass("minutes")&&!f.hasClass("ok")){this.close(null,true)}}.bind(this)})}var b=$type(c)=="array"?c:[document.id(c)];b.each(function(h,f){if(h.retrieve("datepicker")){return}h.store("datepicker",true);if(a&&d){var e=this;var g={click:function(j){if(j){j.stop()}e.show(h,d[f])}};var i=d[f].setStyle("cursor","pointer").addEvents(g);h.store("datepicker:toggler",i).store("datepicker:events",g)}else{var g={keydown:function(j){if(this.options.allowEmpty&&(j.key=="delete"||j.key=="backspace")){h.set("value","");this.close(null,true)}else{if(j.key=="tab"){this.close(null,true)}else{j.stop()}}}.bind(this),focus:this.show.bind(this,[h])};h.addEvents(g).store("datepicker:events",g)}}.bind(this));return this},detach:function(b){var a=$type(b)=="array"?b:[document.id(b)];a.each(function(d){if(!d.retrieve("datepicker")){return}var e=d.retrieve("datepicker:toggler");var c=d.retrieve("datepicker:events");(e?e:d).removeEvents(c)});return this},show:function(b,e,c){b=document.id(b);if(!b.retrieve("datepicker")){return}if(c){this.d=new Date(c)}else{this.d=b.retrieve("datepicker:value")||b.get("value");if(!this.d){this.d=new Date()}else{if(!(this.d instanceof Date)){this.d=Date.parse(this.d)}}}if(!this.d.isValid()){this.d=new Date()}if(this.options.maxDate&&this.options.maxDate.isValid()&&this.d>this.options.maxDate){this.d=this.options.maxDate}if(this.options.minDate&&this.options.minDate.isValid()&&this.d<this.options.minDate){this.d=this.options.minDate}this.input=b;var f=(e?document.id(e):b).getCoordinates();var a={left:f.left+this.options.positionOffset.x,top:f.top+f.height+this.options.positionOffset.y};this.fireEvent("show");this.today=new Date();this.choice=this.d.toObject();this.mode=(this.options.startView=="time"&&!this.options.timePicker)?"month":this.options.startView;this.render();this.position({x:a.left,y:a.top});if(this.options.draggable&&$type(this.picker.makeDraggable)=="function"){this.dragger=this.picker.makeDraggable();this.picker.setStyle("cursor","move")}if(Browser.Engine.trident){this.shim()}return this},close:function(c,b){if(!document.id(this.picker)){return}if($type(c)!="event"){b=true}var a=c&&c.target!=this.picker&&!this.picker.hasChild(c.target)&&c.target!=this.visual;if(b||a){if(this.options.useFadeInOut){this.picker.set("tween",{duration:this.options.animationDuration/2,onComplete:this.destroy.bind(this)}).tween("opacity",1,0)}else{this.destroy()}}return this},shim:function(){var a=this.picker.setStyle("zIndex",1000).getCoordinates();var b=this.frame=new Element("iframe",{src:'javascript:false;document.write("");',styles:{position:"absolute",zIndex:999,height:a.height,width:a.width,left:a.left,top:a.top}}).inject(document.body);this.frame.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";this.addEvent("close",function(){b.destroy()});if(this.dragger){this.dragger.addEvent("drag",function(){var c=this.picker.getCoordinates();b.setStyles({left:c.left,top:c.top})}.bind(this))}},position:function(g){var a=window.getSize(),c=window.getScroll(),h=this.picker.getSize(),e=(a.y+c.y)-h.y,f=(a.x+c.x)-h.x,b=this.input.getCoordinates();if(g.x>f){g.x=b.right-this.options.positionOffset.x-h.x}if(g.y>e){g.y=b.top-this.options.positionOffset.y-h.y}this.picker.setStyles({left:g.x,top:g.y})},render:function(b){if(!this.picker){this.constructPicker()}else{var c=this.oldContents;this.oldContents=this.newContents;this.newContents=c;this.newContents.empty()}var a=new Date(this.d.getTime());this.limit={right:false,left:false};if(this.mode=="decades"){this.renderDecades()}else{if(this.mode=="year"){this.renderYear()}else{if(this.mode=="time"){this.renderTime();this.limit={right:true,left:true}}else{this.renderMonth()}}}this.picker.getElement(".previous").setStyle("visibility",this.limit.left?"hidden":"visible");this.picker.getElement(".next").setStyle("visibility",this.limit.right?"hidden":"visible");this.picker.getElement(".titleText").setStyle("cursor",this.allowZoomOut()?"pointer":"default");this.d=a;if(this.picker.getStyle("opacity")==0){this.picker.tween("opacity",0,1)}if(b){this.fx(b)}},fx:function(a){if(a=="right"){this.oldContents.setStyles({left:0,opacity:1});this.newContents.setStyles({left:this.bodysize.x,opacity:1});this.slider.setStyle("left",0).tween("left",0,-this.bodysize.x)}else{if(a=="left"){this.oldContents.setStyles({left:this.bodysize.x,opacity:1});this.newContents.setStyles({left:0,opacity:1});this.slider.setStyle("left",-this.bodysize.x).tween("left",-this.bodysize.x,0)}else{if(a=="fade"){this.slider.setStyle("left",0);this.oldContents.setStyle("left",0).set("tween",{duration:this.options.animationDuration/2}).tween("opacity",1,0);this.newContents.setStyles({opacity:0,left:0}).set("tween",{duration:this.options.animationDuration}).tween("opacity",0,1)}}}},constructPicker:function(){this.picker=new Element("div",{"class":this.options.pickerClass}).inject(document.body);if(this.options.useFadeInOut){this.picker.setStyle("opacity",0).set("tween",{duration:this.options.animationDuration})}var d=new Element("div",{"class":"header"}).inject(this.picker);var c=new Element("div",{"class":"title"}).inject(d);new Element("div",{"class":"previous"}).addEvent("click",this.previous.bind(this)).set("text","«").inject(d);new Element("div",{"class":"next"}).addEvent("click",this.next.bind(this)).set("text","»").inject(d);new Element("div",{"class":"closeButton"}).addEvent("click",this.close.bindWithEvent(this,true)).set("text","x").inject(d);new Element("span",{"class":"titleText"}).addEvent("click",this.zoomOut.bind(this)).inject(c);var a=new Element("div",{"class":"body"}).inject(this.picker);this.bodysize=a.getSize();this.slider=new Element("div",{styles:{position:"absolute",top:0,left:0,width:2*this.bodysize.x,height:this.bodysize.y}}).set("tween",{duration:this.options.animationDuration,transition:Fx.Transitions.Quad.easeInOut}).inject(a);this.oldContents=new Element("div",{styles:{position:"absolute",top:0,left:this.bodysize.x,width:this.bodysize.x,height:this.bodysize.y}}).inject(this.slider);this.newContents=new Element("div",{styles:{position:"absolute",top:0,left:0,width:this.bodysize.x,height:this.bodysize.y}}).inject(this.slider)},renderTime:function(){var a=new Element("div",{"class":"time"}).inject(this.newContents);if(this.options.timePickerOnly){this.picker.getElement(".titleText").set("text","Select a time")}else{this.picker.getElement(".titleText").set("text",this.d.format("j M, Y"))}new Element("input",{type:"text","class":"hour"}).set("value",this.leadZero(this.d.getHours())).addEvents({click:function(b){b.target.focus();b.stop()}.bind(this),mousewheel:function(d){var c=d.target,b=c.get("value").toInt();c.focus();if(d.wheel>0){b=(b<23)?b+1:0}else{b=(b>0)?b-1:23}c.set("value",this.leadZero(b));d.stop()}.bind(this)}).set("maxlength",2).inject(a);new Element("input",{type:"text","class":"minutes"}).set("value",this.leadZero(this.d.getMinutes())).addEvents({click:function(b){b.target.focus();b.stop()}.bind(this),mousewheel:function(d){var c=d.target,b=c.get("value").toInt();c.focus();if(d.wheel>0){b=(b<59)?b+1:0}else{b=(b>0)?b-1:59}c.set("value",this.leadZero(b));d.stop()}.bind(this)}).set("maxlength",2).inject(a);new Element("div",{"class":"separator"}).set("text",":").inject(a);new Element("input",{type:"submit",value:"OK","class":"ok"}).addEvents({click:function(b){b.stop();this.select($merge(this.d.toObject(),{hours:this.picker.getElement(".hour").get("value").toInt(),minutes:this.picker.getElement(".minutes").get("value").toInt()}))}.bind(this)}).set("maxlength",2).inject(a)},renderMonth:function(){var h=this.d.getMonth();this.picker.getElement(".titleText").set("text",this.options.months[h]+" "+this.d.getFullYear());this.d.setDate(1);while(this.d.getDay()!=this.options.startDay){this.d.setDate(this.d.getDate()-1)}var a=new Element("div",{"class":"days"}).inject(this.newContents);var g=new Element("div",{"class":"titles"}).inject(a);var k,f,c,j,m;for(k=this.options.startDay;k<(this.options.startDay+7);k++){new Element("div",{"class":"title day day"+(k%7)}).set("text",this.options.days[(k%7)].substring(0,this.options.dayShort)).inject(g)}var b=false;var n=this.today.toDateString();var l=Date.fromObject(this.choice).toDateString();for(f=0;f<42;f++){c=[];c.push("day");c.push("day"+this.d.getDay());if(this.d.toDateString()==n){c.push("today")}if(this.d.toDateString()==l){c.push("selected")}if(this.d.getMonth()!=h){c.push("otherMonth")}if(f%7==0){m=new Element("div",{"class":"week week"+(Math.floor(f/7))}).inject(a)}j=new Element("div",{"class":c.join(" ")}).set("text",this.d.getDate()).inject(m);if(this.limited("date")){j.addClass("unavailable");if(b){if(h==this.d.getMonth()||this.d.getDate()==1){this.limit.right=true}}else{this.limit.left=true}}else{b=true;j.addEvent("click",function(i,o){if(this.options.timePicker){this.d.setDate(o.day);this.d.setMonth(o.month);this.mode="time";this.render("fade")}else{this.select(o)}}.bindWithEvent(this,{day:this.d.getDate(),month:this.d.getMonth(),year:this.d.getFullYear()}))}this.d.setDate(this.d.getDate()+1)}if(!b){this.limit.right=true}},renderYear:function(){var g=this.today.getMonth();var c=this.d.getFullYear()==this.today.getFullYear();var h=this.d.getFullYear()==this.choice.year;this.picker.getElement(".titleText").set("text",this.d.getFullYear());this.d.setMonth(0);if(this.options.minDate){this.d.decrement("month",1);this.d.set("date",this.d.get("lastdayofmonth"));if(this.limited("month")){this.limit.left=true}this.d.increment("month",1)}this.d.set("date",this.d.get("lastdayofmonth"));var b,f;var d=false;var a=new Element("div",{"class":"months"}).inject(this.newContents);for(b=0;b<=11;b++){f=new Element("div",{"class":"month month"+(b+1)+(b==g&&c?" today":"")+(b==this.choice.month&&h?" selected":"")}).set("text",this.options.monthShort?this.options.months[b].substring(0,this.options.monthShort):this.options.months[b]).inject(a);if(this.limited("month")){f.addClass("unavailable");if(d){this.limit.right=true}else{this.limit.left=true}}else{d=true;f.addEvent("click",function(i,j){this.d.setDate(1);this.d.setMonth(j);this.mode="month";this.render("fade")}.bindWithEvent(this,b))}this.d.increment("month",1);this.d.set("date",this.d.get("lastdayofmonth"))}if(!d){this.limit.right=true}},renderDecades:function(){while(this.d.getFullYear()%this.options.yearsPerPage>0){this.d.setFullYear(this.d.getFullYear()-1)}this.picker.getElement(".titleText").set("text",this.d.getFullYear()+"-"+(this.d.getFullYear()+this.options.yearsPerPage-1));var b,f,d;var c=false;var a=new Element("div",{"class":"years"}).inject(this.newContents);if(this.options.minDate&&this.d.getFullYear()<=this.options.minDate.getFullYear()){this.limit.left=true}for(b=0;b<this.options.yearsPerPage;b++){f=this.d.getFullYear();d=new Element("div",{"class":"year year"+b+(f==this.today.getFullYear()?" today":"")+(f==this.choice.year?" selected":"")}).set("text",f).inject(a);if(this.limited("year")){d.addClass("unavailable");if(c){this.limit.right=true}else{this.limit.left=true}}else{c=true;d.addEvent("click",function(g,h){this.d.setFullYear(h);this.mode="year";this.render("fade")}.bindWithEvent(this,f))}this.d.setFullYear(this.d.getFullYear()+1)}if(!c){this.limit.right=true}if(this.options.maxDate&&this.d.getFullYear()>=this.options.maxDate.getFullYear()){this.limit.right=true}},limited:function(c){var b=this.options.minDate;var d=this.options.maxDate;if(!b&&!d){return false}switch(c){case"year":return(b&&this.d.getFullYear()<this.options.minDate.getFullYear())||(d&&this.d.getFullYear()>this.options.maxDate.getFullYear());case"month":var a=(""+this.d.getFullYear()+this.leadZero(this.d.getMonth())).toInt();return b&&a<(""+this.options.minDate.getFullYear()+this.leadZero(this.options.minDate.getMonth())).toInt()||d&&a>(""+this.options.maxDate.getFullYear()+this.leadZero(this.options.maxDate.getMonth())).toInt();case"date":return(b&&this.d<this.options.minDate)||(d&&this.d>this.options.maxDate)}},allowZoomOut:function(){if(this.mode=="time"&&this.options.timePickerOnly){return false}if(this.mode=="decades"){return false}if(this.mode=="year"&&!this.options.yearPicker){return false}return true},zoomOut:function(){if(!this.allowZoomOut()){return}if(this.mode=="year"){this.mode="decades"}else{if(this.mode=="time"){this.mode="month"}else{this.mode="year"}}this.render("fade")},previous:function(){if(this.mode=="decades"){this.d.setFullYear(this.d.getFullYear()-this.options.yearsPerPage)}else{if(this.mode=="year"){this.d.setFullYear(this.d.getFullYear()-1)}else{if(this.mode=="month"){this.d.setDate(1);this.d.setMonth(this.d.getMonth()-1)}}}this.render("left");this.fireEvent("previous")},next:function(){if(this.mode=="decades"){this.d.setFullYear(this.d.getFullYear()+this.options.yearsPerPage)}else{if(this.mode=="year"){this.d.setFullYear(this.d.getFullYear()+1)}else{if(this.mode=="month"){this.d.setDate(1);this.d.setMonth(this.d.getMonth()+1)}}}this.render("right");this.fireEvent("next")},destroy:function(){this.picker.destroy();this.picker=null;this.fireEvent("close")},select:function(a){this.choice=$merge(this.choice,a);var b=Date.fromObject(this.choice);this.input.set("value",b.format(this.options.format)).store("datepicker:value",b);this.fireEvent("select",b);this.close(null,true)},leadZero:function(a){return a<10?"0"+a:a}});Date.implement({toObject:function(){return{year:this.getFullYear(),month:this.getMonth(),day:this.getDate(),hours:this.getHours(),minutes:this.getMinutes(),seconds:this.getSeconds()}},isValid:function(){return !isNaN(this)}});Date.extend({fromObject:function(a){a=a||{};var b=new Date();b.setDate(1);["year","month","day","hours","minutes","seconds"].each(function(d){var c=a[d];if(!c&&c!==0){return}switch(d){case"day":b.setDate(c);break;case"month":b.setMonth(c);break;case"year":b.setFullYear(c);break;case"hours":b.setHours(c);break;case"minutes":b.setMinutes(c);break;case"seconds":b.setSeconds(c);break}});return b}});window.addEvent('domready', function() {var inputFields = $$('input');inputFields.each(function(el) {var focuslabel = el.getParent().getParent().getElement('dt label');el.addEvents({'focus': function() {focuslabel.addClass('focuslabel');},'blur' : function() {focuslabel.removeClass('focuslabel');}});});var textFields = $$('textarea');textFields.each(function(el) {var focuslabel = el.getParent().getParent().getElement('dd span');if ( focuslabel == null ) focuslabel = el.getParent().getParent().getElement('dt label');if ( focuslabel != null ) {el.addEvents({'focus': function() {focuslabel.addClass('focuslabel');},'blur' : function() {focuslabel.removeClass('focuslabel');}});}});});
