/*
 * Copyright (c) 2006 Sam Collett (http://www.texotela.co.uk)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * Commpressed by Luke Howell using http://javascriptcompressor.com/
 */
 
/*
 * A time picker for jQuery
 * Based on original timePicker by Sam Collet (http://www.texotela.co.uk)
 * @name     timePicker
 * @version  0.1 
 * @author   Anders Fajerson (http://perifer.se)
 * @example  $("#mytime").timePicker();
 * @example  $("#mytime").timePicker({step:30, startTime:"15:00", endTime:"18:00"}); 
 */
(function($){$.fn.timePicker=function(options){var settings=$.extend({},$.fn.timePicker.defaults,options);return this.each(function(){$.timePicker(this,settings)})};$.timePicker=function(elm,settings){var elm=$(elm)[0];return elm.timePicker||(elm.timePicker=new jQuery._timePicker(elm,settings))};$._timePicker=function(elm,settings){var tpOver=false;var startTime=normaliseTime(settings.startTime);var endTime=normaliseTime(settings.endTime);$(elm).attr('autocomplete','OFF');var times=[];var time=new Date(startTime);while(time<=endTime){times[times.length]=formatTime(time,settings);time=new Date(time.setMinutes(time.getMinutes()+settings.step))}var $tpDiv=$('<div class="time-picker'+(settings.show24Hours?'':' time-picker-12hours')+'"></div>');var $tpList=$('<ul></ul>');for(var i=0;i<times.length;i++){$tpList.append("<li>"+times[i]+"</li>")}$tpDiv.append($tpList);var elmOffset=$(elm).offset();$tpDiv.appendTo('body').css({'top':elmOffset.top+10,'left':elmOffset.left}).hide();$("li",$tpList).unbind().mouseover(function(){$("li.selected",$tpDiv).removeClass("selected");$(this).addClass("selected")}).mousedown(function(){tpOver=true}).click(function(){setTimeVal(elm,this,$tpDiv,settings);tpOver=false});var showPicker=function(){$tpDiv.show();$tpDiv.mouseover(function(){tpOver=true}).mouseout(function(){tpOver=false});$("li",$tpDiv).removeClass("selected");var time=this.value?timeStringToDate(this.value,settings):startTime;var startMin=startTime.getHours()*60+startTime.getMinutes();var min=(time.getHours()*60+time.getMinutes())-startMin;var steps=Math.round(min/settings.step);var roundTime=normaliseTime(new Date(2001,0,0,0,(steps*settings.step+(startMin)),0));roundTime=(startTime<roundTime&&roundTime<endTime)?roundTime:startTime;var $matchedTime=$("li:contains("+formatTime(roundTime,settings)+")",$tpDiv);if($matchedTime.length){$matchedTime.addClass("selected");$tpDiv[0].scrollTop=$matchedTime[0].offsetTop}};$(elm).unbind().focus(showPicker).click(showPicker).blur(function(){if(!tpOver&&$tpDiv[0].parentNode){$tpDiv.hide()}}).keypress(function(e){switch(e.keyCode){case 38:case 63232:var $selected=$("li.selected",$tpList);var prev=$selected.prev().addClass("selected")[0];if(prev){$selected.removeClass("selected");$tpDiv[0].scrollTop=prev.offsetTop}return false;break;case 40:case 63233:var $selected=$("li.selected",$tpList);var next=$selected.length?$selected.next().addClass("selected")[0]:$("li:first").addClass("selected")[0];if(next){$selected.removeClass("selected");$tpDiv[0].scrollTop=next.offsetTop}return false;break;case 13:if(!$tpDiv.is(":hidden")){var sel=$("li.selected",$tpList)[0];setTimeVal(elm,sel,$tpDiv,settings);return false}break}});this.getTime=function(){return timeStringToDate(elm.value,settings)};this.setTime=function(time){elm.value=formatTime(normaliseTime(time),settings);$(elm).change()}};$.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),separator:':',show24Hours:true};function setTimeVal(elm,sel,$tpDiv,settings){elm.value=$(sel).text();$(elm).change();if(!$.browser.msie){elm.focus()}$tpDiv.hide()}function formatTime(time,settings){var h=time.getHours();var hours=settings.show24Hours?h:(((h+11)%12)+1);var minutes=time.getMinutes();return formatNumber(hours)+settings.separator+formatNumber(minutes)+(settings.show24Hours?'':((h<12)?' AM':' PM'))}function formatNumber(value){return(value<10?'0':'')+value}function timeStringToDate(input,settings){if(input){var array=input.split(settings.separator);var hours=parseFloat(array[0]);var minutes=parseFloat(array[1]);var time=new Date(0,0,0,hours,minutes,0);return normaliseTime(time)}return null}function normaliseTime(time){time.setFullYear(2001);time.setMonth(0);time.setDate(0);return time}})(jQuery);