var datePicker=new Class({Implements:[Options,Events],options:{format:'%d/%m/%Y',position:{x:'left',y:'bottom'},offset:{x:0,y:5},from:false,to:false,initial:false,setInitial:false,updateElement:true,draggable:false,firstday:0,klass:'datePicker',days:['Domenica','Lunedì','Martedì','Miercoledì','Giovedì','Venerdì','Sabato'],months:['Gennaio','Febbraio','Marzo','Aprile','Maggioo','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],onShow:function(a){a.setStyle('display','block')},onHide:function(a){a.setStyle('display','none')}},initialize:function(a,b){this.el=a;this.setOptions(b);this.current=this.options.initial?new Date(this.options.initial[0],this.options.initial[1],this.options.initial[2]):(this.options.from?new Date(this.options.from[0],this.options.from[1],this.options.from[2]):new Date());this.limit={from:false,to:false};this.open=false;var c;this.dom={days:[]};this.dom.container=new Element('div',{'class':this.options.klass}).setStyle('visibility','hidden').inject(document.body);var d=new Element('div',{'class':'handle'}).inject(this.dom.container);var e=new Element('div',{'class':'body'}).inject(this.dom.container);var f=new Element('table').inject(e);var g=new Element('thead').inject(f);c=new Element('tr').inject(g);this.dom.month=new Element('b').inject(new Element('td',{colspan:3}).inject(c));this.dom.monthDown=new Element('span',{'class':'down'}).addEvent('click',this.walk.bind(this,['Month',-1,'monthDown']));this.dom.monthUp=new Element('span',{'class':'up'}).addEvent('click',this.walk.bind(this,['Month',1,'monthUp']));new Element('div',{'class':'incdec'}).adopt(this.dom.monthDown,this.dom.monthUp).injectAfter(this.dom.month);this.dom.year=new Element('b').inject(new Element('td',{colspan:3}).inject(c));this.dom.yearDown=new Element('span',{'class':'down'}).addEvent('click',this.walk.bind(this,['FullYear',-1,'yearDown']));this.dom.yearUp=new Element('span',{'class':'up'}).addEvent('click',this.walk.bind(this,['FullYear',1,'yearUp']));new Element('div',{'class':'incdec'}).adopt(this.dom.yearDown,this.dom.yearUp).injectAfter(this.dom.year);new Element('td',{'class':'close'}).set('html','X').addEvent('click',this.hide.bind(this)).inject(c);c=new Element('tr').inject(g);var h=this.options.firstday;for(var i=0;i<7;i++){new Element('th').set('html',this.options.days[h].substr(0,1)).inject(c);h+=h>5?-6:1}var j=new Element('tbody').inject(f);var i=0;for(var y=0;y<6;y++){c=new Element('tr').inject(j);for(var x=0;x<7;x++){this.dom.days[i]=new Element('td').addEvent('click',this.select.bind(this,[i])).inject(c);i+=1}}if(this.options.draggable){this.dom.container.makeDraggable({handle:d.setStyle('cursor','move')})}this.deselect();if(this.options.initial&&this.options.setInitial){this.setFullDate(this.options.initial[0],this.options.initial[1],this.options.initial[2]).update()}},walk:function(e,f,g){if(!e||!this.dom[g].hasClass('disabled')){if(e){this.current['set'+e](this.current['get'+e]()+f)}this.limit={from:false,to:false};var h=this.parse();[['from','Down',true],['to','Up',false]].each(function(a){var b=this.dom['year'+a[1]].removeClass('disabled');var c=this.dom['month'+a[1]].removeClass('disabled');if(this.options[a[0]]){var d=this.options[a[0]].associate(['y','m','d']);if((a[2]&&h.y<=d.y)||(!a[2]&&h.y>=d.y)){b.addClass('disabled');if((a[2]&&h.y<d.y)||(!a[2]&&h.y>d.y)){this.current.setFullYear(d.y,d.m,d.d);this.limit[a[0]]=true}else if((a[2]&&h.m<=d.m)||(!a[2]&&h.m>=d.m)){c.addClass('disabled');this.current.setMonth(d.m);this.limit[a[0]]=true}}}},this);this.build()}},build:function(){var a=this.parse();this.dom.month.innerHTML=this.options.months[a.m].substr(0,3).toUpperCase();this.dom.year.innerHTML=a.y;var b=new Date(a.y,a.m,1).getDay();var c=new Date(a.y,a.m+1,0).getDate();b+=b-this.options.firstday<0?7-this.options.firstday:-this.options.firstday;var d,atr;for(i=0;i<42;i++){d=i-b+1;atr=['',''];if(d>0&&d<=c){if((this.limit.from&&d<this.options.from[2])||(this.limit.to&&d>this.options.to[2])){atr=[d,'']}else if(a.y==this.selected.date.y&&a.m==this.selected.date.m&&d==this.selected.date.d){atr=[d,'selected'];this.selected.index=i}else{atr=[d,'selectable']}}this.dom.days[i].set('html',atr[0]).className=atr[1]}},select:function(i){if(this.dom.days[i].hasClass('selectable')){this.dom.days[i].className='selected';this.current.setDate(this.dom.days[i].innerHTML.toInt());if(this.selected.index&&this.selected.date.y==this.current.getFullYear()&&this.selected.date.m==this.current.getMonth()){this.dom.days[this.selected.index].className='selectable'}this.selected={date:this.parse(),index:i};this.update();this.hide()}else if(this.dom.days[i].hasClass('selected')){this.hide()}},deselect:function(){this.selected={date:{y:0,m:0,d:0},index:false};this.walk();return this},update:function(){if(this.options.updateElement){this.el[$defined(this.el.value)?'value':'innerHTML']=this.selected.index===false?'':this.format()}this.fireEvent('update',[this.selected.date]);return this},show:function(){if(!this.open){this.open=true;var s=this.el.getCoordinates();this.dom.container.setStyles({left:s[this.options.position.x]+this.options.offset.x,top:s[this.options.position.y]+this.options.offset.y,visibility:'visible'});this.fireEvent('show',[this.dom.container,this.el,this.options.position,this.options.offset])}return this},hide:function(){if(this.open){this.open=false;this.fireEvent('hide',[this.dom.container,this.el])}return this},parse:function(){return[this.current.getFullYear(),this.current.getMonth(),this.current.getDate()].associate(['y','m','d'])},setFullDate:function(y,m,d){this.current.setFullYear(y,m,d);this.selected.date=this.parse();this.walk();return this},format:function(a,b){a=a?($type(a)=='array'?a.associate(['y','m','d']):a):this.selected.date;var c=new Date(a.y,a.m,a.d);return(b||this.options.format).replace(/%d/g,(c.getDate()<10?'0'+c.getDate():c.getDate())).replace(/%DD/g,this.options.days[c.getDay()]).replace(/%D/g,this.options.days[c.getDay()].substr(0,3)).replace(/%m/g,(c.getMonth()+1<10?'0'+(c.getMonth()+1):c.getMonth()+1)).replace(/%MM/g,this.options.months[c.getMonth()]).replace(/%M/g,this.options.months[c.getMonth()].substr(0,3)).replace(/%y/g,(c.getFullYear()+'').substr(2)).replace(/%Y/g,c.getFullYear())}});Element.implement({datePicker:function(a,b){var c=new datePicker(this,a);this.addEvent((b||'focus'),c.show.bind(c));this.store('dp',c);return c}});