jQuery.fn.clockpick=function(x,s){var c={starthour:8,endhour:18,showminutes:true,minutedivisions:4,military:false,event:'click',layout:'vertical',valuefield:null,useBgiframe:false,hoursopacity:1,minutesopacity:1};if(x){jQuery.extend(c,x)};var s=s||function(){},g=(c.layout=='vertical');D();jQuery(this)[c.event](function(u){var E=this,k=jQuery(this),o=jQuery("body");if(!c.valuefield){k.unbind("keydown").bind("keydown",p)}else{jQuery("[name="+c.valuefield+"]").unbind("keydown").bind("keydown",p)[0].focus()}jQuery("#CP_hourcont,#CP_minutecont").remove();$hourcont=jQuery("<div id='CP_hourcont' class='CP' />").appendTo(o);!c.useBgiframe?$hourcont.css("opacity",c.hoursopacity):null;q($hourcont);$hourcol1=jQuery("<div class='CP_hourcol' id='hourcol1' />").appendTo(o);$hourcol2=jQuery("<div class='CP_hourcol' id='hourcol2' />").appendTo(o);if(c.showminutes){$mc=jQuery("<div id='CP_minutecont' class='CP' />").appendTo(o);!c.useBgiframe?$mc.css("opacity",c.minutesopacity):null;q($mc)}if(!g){$hourcont.css("width","auto");$mc.css("width","auto")}else{$hourcol1.addClass('floatleft');$hourcol2.addClass('floatleft')}F();G();function F(){var a=1;for(h=c.starthour;h<=c.endhour;h++){if(h==12){a=1}displayhours=((!c.military&&h>12)?h-12:h)+r(h);if(!c.military&&h==0){displayhours='12'+r(h)}$hd=jQuery("<div class='CP_hour' id='hr_"+h+"_"+a+"'>"+displayhours+"</div>");if(c.military){$hd.width(20)}q($hd);if(!g){$hd.css("float","left")}(h<12)?$hourcol1.append($hd):$hourcol2.append($hd);a++}$hourcont.append($hourcol1);!g?$hourcont.append("<div style='clear:left' />"):'';$hourcont.append($hourcol2)}function H(a){realhours=a;displayhours=(!c.military&&a>12)?a-12:a;if(!c.military&&a==0){displayhours='12'}$mc.empty();var b=60/c.minutedivisions,i=r(realhours),f=1;for(m=0;m<60;m=m+b){$md=jQuery("<div class='CP_minute' id='"+realhours+"_"+m+"'>"+displayhours+":"+((m<10)?"0":"")+m+i+"</div>");if(!g){$md.css("float","left");if(c.minutedivisions>6&&f==c.minutedivisions/2+1){$mc.append("<div style='clear:left' />")}}$mc.append($md);q($md);f++}}function r(a){if(!c.military){return(a>=12)?' PM':' AM'}else{return''}}function G(){if(u.type!='focus'){$hourcont.css("left",u.pageX-5+'px').css("top",u.pageY-(Math.floor($hourcont.height()/2))+'px');y($hourcont)}else{k.after($hourcont)}$hourcont.slideDown('fast');if(c.useBgiframe)z($hourcont)}function y(a){var b=document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight;var i=document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth;var f=parseInt(a.css("top"));var d=parseInt(a.css("left"));var e=document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;if(f<=e&&!a.is("#CP_minutecont")){a.css("top",e+10+'px')}else if(f+a.height()-e>b){a.css("top",e+b-a.height()-10+'px')}if(d<=0){a.css("left",'10px')}}function z(a){if(typeof jQuery.fn.bgIframe=='function')a.bgIframe();else alert('bgIframe plugin not loaded.')}function q(b){if(b.attr("id")=='CP_hourcont'){b.mouseout(function(a){I(a)})}else if(b.attr("id")=='CP_minutecont'){b.mouseout(function(a){J(a)})}else if(b.attr("class")=='CP_hour'){b.mouseover(function(a){v(b,a)});b.mouseout(function(){w(b)});b.click(function(){K(b)})}else if(b.attr("class")=='CP_minute'){b.mouseover(function(){A(b)});b.mouseout(function(){B(b)});b.click(function(){L(b)})}};function I(a){try{t=(a.toElement)?a.toElement:a.relatedTarget;if(!(jQuery(t).is("div[class^=CP], iframe"))){j()}}catch(a){j()}}function J(a){try{t=(a.toElement)?a.toElement:a.relatedTarget;if(!(jQuery(t).is("div[class^=CP], iframe"))){j()}}catch(a){j()}}function v(a,b){var i=a.attr("id").split('_')[1],f=a.attr("id").split('_')[2],d,e;a.addClass("CP_over");if(c.showminutes){$mc.hide();H(i);if(g){e=b.type=='mouseover'?b.pageY-15:$hourcont.offset().top+2+(a.height()*f);if(i<12)d=$hourcont.offset().left-$mc.width()-2;else d=$hourcont.offset().left+$hourcont.width()+2}else{d=(b.type=='mouseover')?b.pageX-10:$hourcont.offset().left+(a.width()-5)*f;if(i<12){e=$hourcont.offset().top-$mc.height()-2}else{e=$hourcont.offset().top+$hourcont.height()}}$mc.css("left",d+'px').css("top",e+'px');y($mc);$mc.show();if(c.useBgiframe)z($mc)}return false}function w(a){a.removeClass("CP_over");return false}function K(a){h=a.attr("id").split('_')[1];tt=r(h);str=a.text();if(str.indexOf(' ')!=-1){cleanstr=str.substring(0,str.indexOf(' '))}else{cleanstr=str}a.text(cleanstr+':00'+tt);C(a);j()}function A(a){a.addClass("CP_over");return false}function B(a){a.removeClass("CP_over");return false}function L(a){C(a);j()}function C(a){if(!c.valuefield){E.value=a.text()}else{jQuery("input[name="+c.valuefield+"]").val(a.text())}s.apply(k,[a.text()]);k.unbind("keydown",p)}function j(){if(c.showminutes){$mc.hide()}$hourcont.slideUp('fast');k.unbind("keydown",p)}function p(f){var d=$("div.CP_over").size()?$("div.CP_over"):$("div.CP_hour:first"),e=d.is(".CP_hour")?'hour':'minute',M=(e=='hour')?d[0].id.split('_')[2]:0,l=(e=='minute')?d[0].id.split('_')[0]:d[0].id.split('_')[1];if(e=='minute'){var n=l<12?'m1':'m2'}else{var n=l<12?'h1':'h2'}function divprev(a){if(a.prev().size()){eval(e+'div_out($obj)');eval(e+'div_over($obj.prev(), e)')}else{return false}}function divnext(a){if(a.next().size()){eval(e+'div_out($obj)');eval(e+'div_over($obj.next(), e)')}else{return false}}function hourtohour(a){var b=l>=12?'#hourcol1':'#hourcol2';$newobj=jQuery(".CP_hour[id$=_"+M+"]",b);if($newobj.size()){w(a);v($newobj,f)}else{return false}}function hourtominute(a){w(a);A($(".CP_minute:first"))}function minutetohour(a){B(a);var b=l>=12?'#hourcol2':'#hourcol1';var i=jQuery(".CP_hour[@id^=hr_"+l+"]",b);v(i,f)}switch(f.keyCode){case 37:if(g){switch(n){case'm1':return false;break;case'm2':minutetohour(d);break;case'h1':hourtominute(d);break;case'h2':hourtohour(d);break}}else{divprev(d)}break;case 38:if(g){divprev(d)}else{switch(n){case'm1':return false;break;case'm2':minutetohour(d);break;case'h1':hourtominute(d);break;case'h2':hourtohour(d);break}}break;case 39:if(g){switch(n){case'm1':minutetohour(d);break;case'm2':return false;break;case'h1':hourtohour(d);break;case'h2':hourtominute(d);break}}else{divnext(d)}break;case 40:if(g){divnext(d)}else{switch(n){case'm1':minutetohour(d);break;case'm2':return false;break;case'h1':hourtohour(d);break;case'h2':hourtominute(d);break}}break;case 13:eval(e+'div_click($obj)');break}return false}return false});function D(){if(c.starthour>=c.endhour){alert('Error - start hour must be less than end hour.');return false}else if(60%c.minutedivisions!=0){alert('Error - param minutedivisions must divide evenly into 60.');return false}}return this}
