(function(f){var n={step:900,min:"0:00",max:"23:45",onlyForBrowsersWithoutSupport:false},h,l,i=false,j=false,k=false;f.fn.timeInput=function(a){return this.each(function(){f(this).attr("autocomplete","OFF").bind("focus click",function(){d.listIsVisible()||d.showTimePicker(this,a)}).bind("blur",function(){d.listIsVisible()&&!j&&d.hideTimePicker()}).bind("change",function(){var c=f(this),b=c.val(),e=b;if(e&&e.indexOf(":")<0)e=d.insertTimeSeparator(e);if(e&&e.length<5)e=d.addZeroes(e);if(d.isValidTimeString(e)){if(e)e=d.correctTimeAccordingToSettings(e,c.data("timeInputSettings"))}else e="";e!=b&&c.val(e)}).bind("keydown",function c(b,e){if(!f.browser.opera)if(!(b.keyCode!=38&&b.keyCode!=40)){if(!d.listIsVisible())return d.showTimePicker(this,a);e||(e=0);if(!(k&&e===0)){k=true;b.keyCode==38?d.prevOption():d.nextOption();l=setTimeout(function(){c(b,++e)},e>=2?100:200)}}}).bind("keyup",function(c){k=false;clearInterval(l);if(f.browser.opera&&(c.keyCode==38||c.keyCode==40))f(this).trigger("input")}).bind("keypress",function(c){switch(c.keyCode){case 13:d.chooseSelectedOption();c.preventDefault();break;case 27:case 9:d.hideTimePicker();break}}).bind("input",function(){var c=f(this).val();if(c){d.listIsVisible()||d.showTimePicker(this,a);c=d.insertTimeSeparator(c);d.selectOption("ul.time-input-list:visible li:contains('"+c+"'):first")}})})};var d={showTimePicker:function(a,c){h=f(a);var b=f.extend({},n,d.getSettings(h),c);b.step=parseInt(b.step,10);d.validateSettings(b);h.data("timeInputSettings",b);b=d.getDataList(b);d.positionList(b,h);b.show();if(h.val()){b=h.val();d.selectOption("ul.time-input-list:visible li:contains('"+b+"')")}else d.selectOption("ul.time-input-list:visible li:first")},hideTimePicker:function(){f("ul.time-input-list li.selected").removeClass("selected");f("ul.time-input-list").hide()},prevOption:function(){var a=f("ul.time-input-list:visible li.selected");a.is(":first-child")||d.selectOption(a.prev())},nextOption:function(){var a=f("ul.time-input-list:visible li.selected");if(a.size()==0)d.selectOption("ul.time-input-list:visible li:first-child");else a.is(":last-child")||d.selectOption(a.next())},selectOption:function(a){var c=f(a).addClass("selected");if(c.size()!=0){c.siblings().removeClass("selected");a=c.parent();var b=c.get(0).offsetTop,e=a.scrollTop();c=a.height()-c.height();if(b<e)a.scrollTop(b);else b>e+c&&a.scrollTop(b-c);i=true;setTimeout(function(){i=false},0)}},chooseSelectedOption:function(){var a=f("ul.time-input-list:visible li.selected");a.size()==1&&h.val(a.text());d.hideTimePicker()},getSettings:function(a){a=f(a);for(var c={},b=0,e=["step","min","max"],g;g=e[b];b++){var m=a.attr(g);if(m)c[g]=m}return c},validateSettings:function(a){if(typeof a.min!="string"||!d.isValidTimeString(a.min))throw Error("min has to be a valid time string (13:45)");else if(typeof a.max!="string"||!d.isValidTimeString(a.max))throw Error("max has to be a valid time string (13:45)");else if(a.step<0||a.step>43200)throw Error("step has to be a number between 0 and 60 * 60 * 12");},listIsVisible:function(){return f("ul.time-input-list").is(":visible")},getDataList:function(a){var c=d.getUniqueKeyFor(a),b=f("#"+c);if(b.size()!=1){b=f("<ul/>",{id:c}).addClass("time-input-list");a=d.generateTimeList(a);c=0;for(var e=a.length;c<e;c++){var g=a[c];b.append(f("<li/>").text(g))}b.delegate("li","click",d.chooseSelectedOption).delegate("li","mouseover",function(){if(i)return false;f(this).siblings().removeClass("selected");f(this).addClass("selected")});b.bind("mouseenter",function(){j=true}).bind("mouseleave",function(){j=false}).appendTo("body");d.adjustHeight(b)}return b},adjustHeight:function(a){var c=a.height();a.css("height","auto");c<a.height()&&a.css("height",null)},getUniqueKeyFor:function(a){var c="",b=[];for(var e in a)b.push(e);b.sort();e=0;for(var g=b.length;e<g;e++)c+=a[b[e]];return c.replace(/[\W]/g,"")},generateTimeList:function(a){for(var c=[],b=d.dateToTime(d.timeToDate(a.min)),e=d.timeToDate(a.max);d.timeToDate(b)<=e;){c.push(b);try{b=d.addSecondsToTime(b,a.step)}catch(g){break}}return c},positionList:function(a,c){var b=f.extend({},c.offset(),{position:"absolute"});b.top+=c.height();b.top+=parseInt(c.css("border-top-width"))||0;b.top+=parseInt(c.css("padding-top"))||0;b.top+=parseInt(c.css("padding-bottom"))||0;a.css(b)},correctTimeAccordingToSettings:function(a,c){var b=d.timeToDate(a),e=d.timeToDate(c.min),g=d.timeToDate(c.max);if(b<e)return d.dateToTime(e);if(b>g)return d.dateToTime(g);g=c.step/60;e=(b.getTime()-e.getTime())/1E3/60%g;if(e>=g/2)b=d.addSecondsToDate(b,(g-e)*60);else if(e>0)b=d.addSecondsToDate(b,e*-60);return d.dateToTime(b)},isValidTimeString:function(a){if(a===null||a=="")return true;return/^([0,1]?\d|2[0-3]):[0-5]\d:?\d{0,2}$/.test(a)},insertTimeSeparator:function(a){return a.replace(/^(2[0-3]|[0-1]?\d):?(\d{0,2}):?\d{0,2}$/,"$1:$2")},addZeroes:function(a){return a.replace(/(\d{0,2}):(\d{0,2})/,function(c,b,e){for(;b.length<2;)b="0"+b;for(;e.length<2;)e+="0";return b+":"+e})},dateToTime:function(a){if(a.getDate()!==1)throw Error("Date has to be Jan 1st 1970 when converting to time");return a.toTimeString().substring(0,5)},timeToDate:function(a){return new Date("Jan 1 1970 "+a)},addSecondsToTime:function(a,c){var b=d.addSecondsToDate(d.timeToDate(a),c);return d.dateToTime(b)},addSecondsToDate:function(a,c){var b=a.getTime();return new Date(b+c*1E3)}};f.timeInput=d})(jQuery);
