
var TimePicker=new Class({Implements:Options,options:{visible:false,offset:{x:50,y:0},startTime:{hour:new Date().getHours(),minute:new Date().getMinutes()},selectedTime:null,format24:true,imagesPath:"/assets/nogray_timepicker/images/",faceImage:"clock_face.png",face2Image:"clock_face2.png",hourHandImage:"clock_hours.gif",minuteHandImage:"clock_minutes.gif",centerImage:"clock_center.gif",closeImage:"close_image.gif",clockSize:{width:142,height:142},hourHandSize:{width:67,height:68},minuteHandSize:{width:111,height:112},centerSize:{width:7,height:6},ampmStyles:{'fontSize':'10pt','fontWeight':'normal','color':'#000000','textDecoration':'none'},lang:{'am':'AM','pm':'PM'},closeOpenTimePickers:true,onOpen:function(){return;},onClose:function(){return;},onChange:function(){return;}},initialize:function(holder,field,toggler,options){this.holder=m$(holder);if($defined(field)){this.field=m$(field);this.field.addEvent("focus",function(){this.openTimePicker();}.bind(this));this.field.addEvent("keyup",function(e){var e=new Event(e);var r_val="",val="",c="",add_j=false;var i=0,loop=this.field.value.length,j=1;for(i=0;i<loop;i++){c=this.field.value.charAt(i);add_j=false;if(val.lastIndexOf(" ")<=3){if(c.match(/\d/)){val+=c;add_j=true;}
if((c==":")||(c==" ")){val+=" ";j=1;}}
else{if(c.toLowerCase()==this.options.lang.am.substr(0,1).toLowerCase()){val+=" "+this.options.lang.am.substr(0,1).toLowerCase()+" ";j=1;}
if(c.toLowerCase()==this.options.lang.pm.substr(0,1).toLowerCase()){val+=" "+this.options.lang.pm.substr(0,1).toLowerCase()+" ";j=1;}}
if(j%2==0)val+=" ";if(add_j)j++;}
val=val.replace(/(\s+)/g," ").split(" ");val[0]=(val[0].toInt()%24);if(isNaN(val[0]))val[0]=null;if($defined(val[1])){if(val[0]<10)r_val+="0";r_val+=val[0]+":";val[1]=(val[1].toInt()%60);if(isNaN(val[1]))val[1]=null;}
else{if($defined(val[0]))
r_val+=val[0];}
if($defined(val[2])){if(val[1]<10)r_val+="0";r_val+=val[1]+" ";if(val[2]==this.options.lang.am.substr(0,1).toLowerCase())
r_val+=this.options.lang.am;else if(val[2]==this.options.lang.pm.substr(0,1).toLowerCase())
r_val+=this.options.lang.pm;}
else{if($defined(val[1]))
r_val+=val[1];}
this.field.value=r_val.trim();e.stop();return false;}.bind(this));this.field.addEvent("blur",function(){this.time.hour=this.field.value.substr(0,2).toInt()||0;this.time.minute=this.field.value.substr(3,2).toInt()||0;if(this.field.value.substr(6)==this.options.lang.pm)this.time.hour+=12;this.updateAmPm();this.updateField();this.moveHands();this.fireEvent("onChange");}.bind(this));}
else{this.field=null;}
if($defined(toggler))
this.toggler=m$(toggler);else
this.toggler=null;this.setOptions(options);this.moveEl={};this.moveEl['move']=false;if($defined(this.options.selectedTime))this.time=this.options.selectedTime;else this.time=this.options.startTime;this.holder.setStyles({'width':this.options.clockSize.width,'height':this.options.clockSize.height});var img=new Element("img",{'src':this.options.imagesPath+"/"+this.options.faceImage,'styles':{'position':'absolute','z-index':21000}});var img2=new Element("img",{'src':this.options.imagesPath+"/"+this.options.face2Image,'styles':{'position':'absolute','z-index':21000}});if(this.time.hour<12)
{this.holder.adopt(img);}
else
{this.holder.adopt(img2);}
if(!this.options.visible){if((window.ie)&&(!window.ie7)){var iframe=new Element("iframe",{'src':'about:Blank','styles':{'width':this.options.clockSize.width,'position':'absolute','z-index':20000,'height':this.options.clockSize.height},'frameborder':0});this.holder.adopt(iframe);}
this.holder.setStyles({'position':'absolute','z-index':25000,'opacity':0,'display':'none',});if($defined(this.toggler)){this.toggler.addEvent("click",function(e){var e=new Event(e);if(this.holder.getStyle('opacity')==0)this.openTimePicker();else this.closeTimePicker();e.stop();}.bind(this));}
var cls=new Element("img",{'src':this.options.imagesPath+"/"+this.options.closeImage,'styles':{'position':'absolute','z-index':26000,'right':0,'cursor':'pointer'}});this.holder.adopt(cls);cls.addEvent("click",function(){this.closeTimePicker();}.bind(this));}
this.minuteHand=new Element("div",{styles:{'marginTop':((this.options.clockSize.height-this.options.minuteHandSize.height)/2).toInt(),'marginLeft':((this.options.clockSize.width-this.options.minuteHandSize.width)/2).toInt(),'width':this.options.minuteHandSize.width,'height':this.options.minuteHandSize.height,'position':'absolute','z-index':22000,'background':'url('+this.options.imagesPath+"/"+this.options.minuteHandImage+') no-repeat top left'}});this.holder.adopt(this.minuteHand);this.hourHand=new Element("div",{styles:{'marginTop':((this.options.clockSize.height-this.options.hourHandSize.height)/2).toInt(),'marginLeft':((this.options.clockSize.width-this.options.hourHandSize.width)/2).toInt(),'width':this.options.hourHandSize.width,'height':this.options.hourHandSize.height,'position':'absolute','z-index':23000,'background':'url('+this.options.imagesPath+"/"+this.options.hourHandImage+') no-repeat top left'}});this.holder.adopt(this.hourHand);var c_img=new Element("img",{'src':this.options.imagesPath+"/"+this.options.centerImage,'styles':{'position':'absolute','z-index':24000,'marginTop':((this.options.clockSize.height-this.options.centerSize.height)/2).toInt(),'marginLeft':((this.options.clockSize.width-this.options.centerSize.width)/2).toInt()}});this.holder.adopt(c_img);this.ampm=new Element("a",{'styles':this.options.ampmStyles,'href':'#'});this.updateAmPm();this.ampm.setStyles({'position':'absolute','z-index':25000,'display':'block','marginTop':((this.options.clockSize.height+(this.options.clockSize.height/4))/2).toInt(),'marginLeft':((this.options.clockSize.width-20)/2).toInt()});this.holder.adopt(this.ampm);this.ampm.addEvent("click",function(e){if(this.time.hour<12)
{this.holder.adopt(img2);}
else
{this.holder.adopt(img);}
var e=new Event(e);e.stop();this.time.hour=((this.time.hour+12)%24);this.updateAmPm();this.updateField();this.fireEvent("onChange");}.bind(this));this.moveHands();this.holder.addEvent("mousedown",function(e){var e=new Event(e);var coord=this.holder.getCoordinates();var ang=this.clickAngle({x:e.client.x,y:e.client.y},coord);var h_ang=(this.time.hour%12)*30;var m_ang=this.time.minute*6;this.moveEl['move']=true;this.moveEl['coord']=coord;if(Math.abs(ang-m_ang)<Math.abs(ang-h_ang))
this.moveEl['el']="minute";else if(Math.abs(ang-m_ang)>Math.abs(ang-h_ang))
this.moveEl['el']="hour";else{if(e.target.getStyle("backgroundImage").indexOf(this.options.hourHandImage)!=-1)
this.moveEl['el']="hour";else
this.moveEl['el']="minute";}}.bind(this));this.holder.addEvent("mouseup",function(){this.moveEl={};this.moveEl['move']=false;}.bind(this));this.holder.addEvent("mousemove",function(e){if(this.moveEl['move']){var e=new Event(e);var add;var ang=this.clickAngle({x:e.client.x,y:e.client.y},this.moveEl.coord);if(this.moveEl.el=="hour")var ang_by=30;else var ang_by=6;if(this.moveEl.el=="hour"){var h=(ang/ang_by).toInt();if(!isNaN(h))
this.time.hour=h;if(this.ampm.innerHTML==this.options.lang.pm)
this.time.hour=(this.time.hour+12)%24;}
else{var m=(ang/ang_by).toInt();if(!isNaN(m))
this.time.minute=m;}
this.moveHands();this.updateField();this.fireEvent("onChange");}}.bind(this));_all_page_timepickers.push(this);},updateAmPm:function(){if(this.time.hour<12)this.ampm.set('html',this.options.lang.am);else this.ampm.set('html',this.options.lang.pm);},moveHands:function(){try{this.hourHand.setStyle("backgroundPosition",(((this.time.hour%12)*this.options.hourHandSize.width)*-1));this.minuteHand.setStyle("backgroundPosition",((this.time.minute*this.options.minuteHandSize.width)*-1));}
catch(e){}},clickAngle:function(pnt,coord){var c_x=coord.width/2;var c_y=coord.height/2;var x=pnt.x+window.getScrollLeft()-coord.left;var y=pnt.y+window.getScrollTop()-coord.top;var t_x=c_x;var t_y=y;var CA=t_x-x;var CO=t_y-c_y;var AO=Math.sqrt(Math.pow(CA,2)+Math.pow(CO,2));var ang=Math.round((Math.acos((Math.pow(Math.abs(CA),2)-Math.pow(Math.abs(AO),2)-Math.pow(CO,2))/(2*CO*AO)))*180/Math.PI);if(x<c_x)ang=360-ang;return ang;},updateField:function(){if(!$defined(this.field))return;var val="";if(this.options.format24)
var h_val=this.time.hour;else
var h_val=(this.time.hour%12);if(h_val<10)val+="0";val+=h_val+":";if(this.time.minute<10)val+="0";val+=this.time.minute;if(!this.options.format24){if(this.time.hour<12)val+=" "+this.options.lang.am;else val+=" "+this.options.lang.pm;}
this.field.value=val;},openTimePicker:function(){if(this.options.closeOpenTimePickers)$closeAllTimePickers();if($defined(this.field)){var coord=this.field.getCoordinates();var top=coord.top+coord.height+this.options.offset.y;var left=coord.left+this.options.offset.x;}
else{var coord=this.holder.getCoordinates();var top=coord.top;var left=coord.left;}
this.holder.setStyles({'top':top,'left':left,'opacity':1,'display':'block'});this.fireEvent("onOpen");},closeTimePicker:function(){if(this.options.visible)return false;this.holder.setStyle('opacity',0);this.holder.setStyle('display','none');this.fireEvent("onClose");}});TimePicker.implement(new Events,new Options);var _all_page_timepickers=[];var $closeAllTimePickers=function(){_all_page_timepickers.each(function(obj){obj.closeTimePicker();});};
