/* http://keith-wood.name/timeEntry.html
   Time entry for jQuery v1.3.1.
   Written by Keith Wood (kbwood@virginbroadband.com.au) June 2007.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($){function TimeEntry(){this._nextId=0;this._inst=[];this._disabledInputs=[];this.regional=[];this.regional[""]={show24Hours:false,separator:":",ampmPrefix:"",ampmNames:["AM","PM"],spinnerTexts:["Now","Previous field","Next field","Increment","Decrement"]};this._defaults={appendText:"",showSeconds:false,timeSteps:[1,1,1],initialField:0,useMouseWheel:true,defaultTime:null,minTime:null,maxTime:null,spinnerImage:"timeEntry.png",spinnerSize:[20,20,8],spinnerIncDecOnly:false,spinnerRepeat:[500,250],beforeShow:null};$.extend(this._defaults,this.regional[""])}$.extend(TimeEntry.prototype,{markerClassName:"hasTimeEntry",_register:function(inst){var id=this._nextId++;this._inst[id]=inst;return id},_getInst:function(id){return this._inst[id]||id},setDefaults:function(settings){extendRemove(this._defaults,settings||{})},_doFocus:function(target){var input=(target.nodeName&&target.nodeName.toLowerCase()=="input"?target:this);if($.timeEntry._lastInput==input){return}if($.timeEntry._isDisabledTimeEntry(input)){return}var inst=$.timeEntry._getInst(input._timeId);inst._input=$(input);$.timeEntry._focussed=true;$.timeEntry._lastInput=input;$.timeEntry._blurredInput=null;var beforeShow=inst._get("beforeShow");extendRemove(inst._settings,(beforeShow?beforeShow(input):{}));inst._parseTime()},_doBlur:function(event){$.timeEntry._blurredInput=$.timeEntry._lastInput;$.timeEntry._lastInput=null},_doClick:function(event){var input=event.target;var inst=$.timeEntry._getInst(input._timeId);if(!$.timeEntry._focussed){var fieldSize=inst._get("separator").length+2;inst._field=0;if($.browser.msie){var value=input.value;var offsetX=event.clientX+$.timeEntry._findScroll(event.srcElement)[0]-$.timeEntry._findPos(event.srcElement)[0];for(var field=0;field<=Math.max(1,inst._secondField,inst._ampmField);field++){var end=(field!=inst._ampmField?(field*fieldSize)+2:(inst._ampmField*fieldSize)+inst._get("ampmPrefix").length+inst._get("ampmNames")[0].length);input.value=value.substring(0,end);var range=input.createTextRange();if(offsetX<range.boundingWidth){inst._field=field;break}}input.value=value}else{for(var field=0;field<=Math.max(1,inst._secondField,inst._ampmField);field++){var start=(field!=inst._ampmField?(field*fieldSize)+2:(inst._ampmField*fieldSize)+inst._get("ampmPrefix").length+inst._get("ampmNames")[0].length);if(input.selectionStart<start){inst._field=field;break}}}}inst._showField();$.timeEntry._focussed=false},_doKeyDown:function(event){if(event.keyCode>=48){return true}var inst=$.timeEntry._getInst(this._timeId);switch(event.keyCode){case 9:return(event.shiftKey?inst._previousField(true):inst._nextField(true));case 35:if(event.ctrlKey){inst._setValue("")}else{inst._field=Math.max(1,inst._secondField,inst._ampmField);inst._adjustField(0)}break;case 36:if(event.ctrlKey){inst._setTime()}else{inst._field=0;inst._adjustField(0)}break;case 37:inst._previousField(false);break;case 38:inst._adjustField(+1);break;case 39:inst._nextField(false);break;case 40:inst._adjustField(-1);break;case 46:inst._setValue("");break}return false},_doKeyPress:function(event){var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);if(chr<" "){return true}var inst=$.timeEntry._getInst(this._timeId);inst._handleKeyPress(chr);return false},_doMouseWheel:function(event,delta){delta=($.browser.opera?-delta/Math.abs(delta):delta);var inst=$.timeEntry._getInst(this._timeId);inst._adjustField(delta);event.preventDefault()},_connectTimeEntry:function(target,inst){var input=$(target);if(input.is("."+this.markerClassName)){return}var spinnerImage=inst._get("spinnerImage");var spinnerText=inst._get("spinnerText");var spinnerSize=inst._get("spinnerSize");var appendText=inst._get("appendText");var spinner=(!spinnerImage?null:$('<span class="timeEntry_control" _timeid="'+inst._id+'" style="display: inline-block; background: url(\''+spinnerImage+"') 0 0 no-repeat; width: "+spinnerSize[0]+"px; height: "+spinnerSize[1]+"px;"+($.browser.mozilla&&$.browser.version.substr(0,3)!="1.9"?" padding-left: "+spinnerSize[0]+"px; padding-bottom: "+(spinnerSize[1]-18)+"px;":"")+'"></span>'));input.wrap('<span class="timeEntry_wrap"></span>').after(appendText?'<span class="timeEntry_append">'+appendText+"</span>":"").after(spinner||"");input.addClass(this.markerClassName).bind("focus.timeEntry",this._doFocus).bind("blur.timeEntry",this._doBlur).bind("click.timeEntry",this._doClick).bind("keydown.timeEntry",this._doKeyDown).bind("keypress.timeEntry",this._doKeyPress);if($.browser.mozilla){input.bind("input.timeEntry",function(event){inst._parseTime()})}if($.browser.msie){input.bind("paste.timeEntry",function(event){setTimeout(function(){inst._parseTime()},1)})}if(inst._get("useMouseWheel")&&$.fn.mousewheel){input.mousewheel(this._doMouseWheel)}input[0]._timeId=inst._id;if(spinner){spinner.mousedown(this._handleSpinner).mouseup(this._endSpinner).mouseout(this._endSpinner).mousemove(this._describeSpinner);spinner[0]._timeId=inst._id}},_enableTimeEntry:function(input){this._enableDisable(input,false)},_disableTimeEntry:function(input){this._enableDisable(input,true)},_enableDisable:function(input,disable){var inst=$.timeEntry._getInst(input._timeId);if(!inst){return}input.disabled=disable;if(input.nextSibling&&input.nextSibling.nodeName.toLowerCase()=="span"){$.timeEntry._changeSpinner(inst,input.nextSibling,(disable?5:-1))}$.timeEntry._disabledInputs=$.map($.timeEntry._disabledInputs,function(value){return(value==input?null:value)});if(disable){$.timeEntry._disabledInputs[$.timeEntry._disabledInputs.length]=input}},_isDisabledTimeEntry:function(input){for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==input){return true}}return false},_changeTimeEntry:function(input,settings){var inst=this._getInst(input._timeId);if(inst){var currentTime=inst._extractTime();extendRemove(inst._settings,settings||{});if(currentTime){inst._setTime(new Date(0,0,0,currentTime[0],currentTime[1],currentTime[2]))}}},_destroyTimeEntry:function(input){$input=$(input);if(!$input.is("."+this.markerClassName)){return}$input.removeClass(this.markerClassName).unbind("focus.timeEntry").unbind("blur.timeEntry").unbind("click.timeEntry").unbind("keydown.timeEntry").unbind("keypress.timeEntry");if($.browser.mozilla){$input.unbind("input.timeEntry")}if($.browser.msie){$input.unbind("paste.timeEntry")}if($.fn.mousewheel){$input.unmousewheel()}this._inst[input._timeId]=null;input._timeId=undefined;this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==input?null:value)});input.parentNode.parentNode.replaceChild(input,input.parentNode)},_setTimeTimeEntry:function(input,time){var inst=this._getInst(input._timeId);if(inst){inst._input=$(input);inst._setTime(time?(typeof time=="object"?new Date(time.getTime()):time):null)}},_getTimeTimeEntry:function(input){var inst=this._getInst(input._timeId);var currentTime=(inst?inst._extractTime():null);return(!currentTime?null:new Date(0,0,0,currentTime[0],currentTime[1],currentTime[2]))},_describeSpinner:function(event){var spinner=$.timeEntry._getSpinnerTarget(event);var inst=$.timeEntry._getInst(spinner._timeId);spinner.title=inst._get("spinnerTexts")[$.timeEntry._getSpinnerRegion(inst,event)]},_handleSpinner:function(event){var spinner=$.timeEntry._getSpinnerTarget(event);var input=spinner.previousSibling;if($.timeEntry._isDisabledTimeEntry(input)){return}if(input==$.timeEntry._blurredInput){$.timeEntry._lastInput=input;$.timeEntry._blurredInput=null}var inst=$.timeEntry._getInst(input._timeId);$.timeEntry._doFocus(input);var region=$.timeEntry._getSpinnerRegion(inst,event);$.timeEntry._changeSpinner(inst,spinner,region);$.timeEntry._actionSpinner(inst,region);var spinnerRepeat=inst._get("spinnerRepeat");if(region>=3&&spinnerRepeat[0]){$.timeEntry._timer=setTimeout(function(){$.timeEntry._repeatSpinner(inst,region)},spinnerRepeat[0]);$(spinner).one("mouseout",$.timeEntry._releaseSpinner).one("mouseup",$.timeEntry._releaseSpinner)}},_actionSpinner:function(inst,region){switch(region){case 0:inst._setTime();break;case 1:inst._previousField(false);break;case 2:inst._nextField(false);break;case 3:inst._adjustField(+1);break;case 4:inst._adjustField(-1);break}},_repeatSpinner:function(inst,region){$.timeEntry._lastInput=$.timeEntry._blurredInput;this._actionSpinner(inst,region);this._timer=setTimeout(function(){$.timeEntry._repeatSpinner(inst,region)},inst._get("spinnerRepeat")[1])},_releaseSpinner:function(event){clearTimeout($.timeEntry._timer)},_endSpinner:function(event){var spinner=$.timeEntry._getSpinnerTarget(event);var inst=$.timeEntry._getInst(spinner._timeId);if(!$.timeEntry._isDisabledTimeEntry(spinner.previousSibling)){$.timeEntry._changeSpinner(inst,spinner,-1)}if(!$.browser.opera){$.timeEntry._lastInput=$.timeEntry._blurredInput}if($.timeEntry._lastInput){inst._showField()}},_getSpinnerTarget:function(event){return(event.target?event.target:event.srcElement)},_getSpinnerRegion:function(inst,event){var spinner=this._getSpinnerTarget(event);var pos=this._findPos(spinner);var scrolled=this._findScroll(spinner);var spinnerIncDecOnly=inst._get("spinnerIncDecOnly");var left=(spinnerIncDecOnly?99:event.clientX+scrolled[0]-pos[0]-($.browser.msie?1:0));var top=event.clientY+scrolled[1]-pos[1]-($.browser.msie?1:0);var spinnerSize=inst._get("spinnerSize");var right=(spinnerIncDecOnly?99:spinnerSize[0]-left);var bottom=spinnerSize[1]-top;if(spinnerSize[2]>0&&Math.abs(left-right)<=spinnerSize[2]&&Math.abs(top-bottom)<=spinnerSize[2]){return 0}var min=Math.min(left,top,right,bottom);return(min==left?1:(min==right?2:(min==top?3:4)))},_changeSpinner:function(inst,spinner,region){$(spinner).css("background-position","-"+((region+1)*inst._get("spinnerSize")[0])+"px 0px")},_findPos:function(obj){var curLeft=curTop=0;if(obj.offsetParent){curLeft=obj.offsetLeft;curTop=obj.offsetTop;while(obj=obj.offsetParent){var origCurLeft=curLeft;curLeft+=obj.offsetLeft;if(curLeft<0){curLeft=origCurLeft}curTop+=obj.offsetTop}}return[curLeft,curTop]},_findScroll:function(obj){var isFixed=false;$(obj).parents().each(function(){isFixed|=$(this).css("position")=="fixed"});if(isFixed&&!$.browser.opera){return[0,0]}var scrollLeft=($.browser.opera?document.body.scrollLeft:obj.scrollLeft);var scrollTop=($.browser.opera?document.body.scrollTop:obj.scrollTop);if(!$.browser.opera){while(obj=obj.parentNode){scrollLeft+=obj.scrollLeft||0;scrollTop+=obj.scrollTop||0}}return[scrollLeft,scrollTop]}});function TimeEntryInstance(settings){this._id=$.timeEntry._register(this);this._selectedHour=0;this._selectedMinute=0;this._selectedSecond=0;this._field=0;this._input=null;this._settings=extendRemove({},settings||{})}$.extend(TimeEntryInstance.prototype,{_get:function(name){return(this._settings[name]!=null?this._settings[name]:$.timeEntry._defaults[name])},_parseTime:function(){var currentTime=this._extractTime();var showSeconds=this._get("showSeconds");if(currentTime){this._selectedHour=currentTime[0];this._selectedMinute=currentTime[1];this._selectedSecond=currentTime[2]}else{var now=this._constrainTime();this._selectedHour=now[0];this._selectedMinute=now[1];this._selectedSecond=(showSeconds?now[2]:0)}this._secondField=(showSeconds?2:-1);this._ampmField=(this._get("show24Hours")?-1:(showSeconds?3:2));this._lastChr="";this._field=Math.max(0,Math.min(Math.max(1,this._secondField,this._ampmField),this._get("initialField")));if(this._input.val()!=""){this._showTime()}},_extractTime:function(){var value=(this._input?this._input.val():"");var separator=this._get("separator");var currentTime=value.split(separator);if(separator==""&&value!=""){currentTime[0]=value.substring(0,2);currentTime[1]=value.substring(2,4);currentTime[2]=value.substring(4,6)}var ampmNames=this._get("ampmNames");var show24Hours=this._get("show24Hours");if(currentTime.length>=2){var isAM=!show24Hours&&(value.indexOf(ampmNames[0])>-1);var isPM=!show24Hours&&(value.indexOf(ampmNames[1])>-1);var hour=parseInt(currentTime[0],10);hour=(isNaN(hour)?0:hour);hour=((isAM||isPM)&&hour==12?0:hour)+(isPM?12:0);var minute=parseInt(currentTime[1],10);minute=(isNaN(minute)?0:minute);var second=(currentTime.length>=3?parseInt(currentTime[2],10):0);second=(isNaN(second)||!this._get("showSeconds")?0:second);return this._constrainTime([hour,minute,second])}return null},_constrainTime:function(fields){var specified=(fields!=null);if(!specified){var now=this._determineTime(this._get("defaultTime"))||new Date();fields=[now.getHours(),now.getMinutes(),now.getSeconds()]}var reset=false;var timeSteps=this._get("timeSteps");for(var i=0;i<timeSteps.length;i++){if(reset){fields[i]=0}else{if(timeSteps[i]>1){fields[i]=Math.round(fields[i]/timeSteps[i])*timeSteps[i];reset=true}}}return fields},_showTime:function(){var show24Hours=this._get("show24Hours");var separator=this._get("separator");var currentTime=(this._formatNumber(show24Hours?this._selectedHour:((this._selectedHour+11)%12)+1)+separator+this._formatNumber(this._selectedMinute)+(this._get("showSeconds")?separator+this._formatNumber(this._selectedSecond):"")+(show24Hours?"":this._get("ampmPrefix")+this._get("ampmNames")[(this._selectedHour<12?0:1)]));this._setValue(currentTime);this._showField()},_showField:function(){if(!this._input){return}var input=this._input[0];var separator=this._get("separator");var fieldSize=separator.length+2;var start=(this._field!=this._ampmField?(this._field*fieldSize):(this._ampmField*fieldSize)-separator.length+this._get("ampmPrefix").length);var end=start+(this._field!=this._ampmField?2:this._get("ampmNames")[0].length);if(input.setSelectionRange){input.setSelectionRange(start,end)}else{if(input.createTextRange){var range=input.createTextRange();range.moveStart("character",start);range.moveEnd("character",end-this._input.val().length);range.select()}}if(!input.disabled){input.focus()}},_formatNumber:function(value){return(value<10?"0":"")+value},_setValue:function(value){this._input.val(value);this._input.trigger("change")},_previousField:function(moveOut){var atFirst=(this._input.val()==""||this._field==0);if(!atFirst){this._field--}this._showField();this._lastChr="";return(atFirst&&moveOut)},_nextField:function(moveOut){var atLast=(this._input.val()==""||this._field==Math.max(1,this._secondField,this._ampmField));if(!atLast){this._field++}this._showField();this._lastChr="";return(atLast&&moveOut)},_adjustField:function(offset){if(this._input&&this._input.val()==""){offset=0}var timeSteps=this._get("timeSteps");this._setTime(new Date(0,0,0,this._selectedHour+(this._field==0?offset*timeSteps[0]:0)+(this._field==this._ampmField?offset*12:0),this._selectedMinute+(this._field==1?offset*timeSteps[1]:0),this._selectedSecond+(this._field==this._secondField?offset*timeSteps[2]:0)))},_setTime:function(time){time=this._determineTime(time);var fields=this._constrainTime(time?[time.getHours(),time.getMinutes(),time.getSeconds()]:null);time=new Date(0,0,0,fields[0],fields[1],fields[2]);var time=this._normaliseTime(time);var minTime=this._normaliseTime(this._determineTime(this._get("minTime")));var maxTime=this._normaliseTime(this._determineTime(this._get("maxTime")));time=(minTime&&time<minTime?minTime:(maxTime&&time>maxTime?maxTime:time));this._selectedHour=time.getHours();this._selectedMinute=time.getMinutes();this._selectedSecond=time.getSeconds();this._showTime()},_determineTime:function(setting){var offsetNumeric=function(offset){var time=new Date();time.setTime(time.getTime()+offset*1000);return time};var offsetString=function(offset){var time=new Date();var hour=time.getHours();var minute=time.getMinutes();var second=time.getSeconds();var pattern=/([+-]?[0-9]+)\s*(s|S|m|M|h|H)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"s"){case"s":case"S":second+=parseInt(matches[1]);break;case"m":case"M":minute+=parseInt(matches[1]);break;case"h":case"H":hour+=parseInt(matches[1]);break}matches=pattern.exec(offset)}time=new Date(0,0,10,hour,minute,second,0);if(/^!/.test(offset)){if(time.getDate()>10){time=new Date(0,0,10,23,59,59)}else{if(time.getDate()<10){time=new Date(0,0,10,0,0,0)}}}return time};return(setting?(typeof setting=="string"?offsetString(setting):(typeof setting=="number"?offsetNumeric(setting):setting)):null)},_normaliseTime:function(time){if(!time){return null}time.setFullYear(2001);time.setMonth(1-1);time.setDate(26);return time},_handleKeyPress:function(chr){if(chr==this._get("separator")){this._nextField(false)}else{if(chr>="0"&&chr<="9"){var value=(this._lastChr+chr)*1;var show24Hours=this._get("show24Hours");var hour=(this._field==0&&((show24Hours&&value<24)||(value>=1&&value<=12))?value+(!show24Hours&&this._selectedHour>=12?12:0):this._selectedHour);var minute=(this._field==1&&value<60?value:this._selectedMinute);var second=(this._field==this._secondField&&value<60?value:this._selectedSecond);var fields=this._constrainTime([hour,minute,second]);this._setTime(new Date(0,0,0,fields[0],fields[1],fields[2]));this._lastChr=chr}else{if(!this._get("show24Hours")){var ampmNames=this._get("ampmNames");if((chr==ampmNames[0].substring(0,1).toLowerCase()&&this._selectedHour>=12)||(chr==ampmNames[1].substring(0,1).toLowerCase()&&this._selectedHour<12)){var saveField=this._field;this._field=this._ampmField;this._adjustField(+1);this._field=saveField;this._showField()}}}}}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null){target[name]=null}}return target}$.fn.timeEntry=function(options){var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getTime")){return $.timeEntry["_"+options+"TimeEntry"].apply($.timeEntry,[this[0]].concat(otherArgs))}return this.each(function(){var nodeName=this.nodeName.toLowerCase();if(nodeName=="input"){if(typeof options=="string"){$.timeEntry["_"+options+"TimeEntry"].apply($.timeEntry,[this].concat(otherArgs))}else{var inlineSettings=null;for(attrName in $.timeEntry._defaults){var attrValue=this.getAttribute("time:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var inst=(inst&&!inlineSettings?inst:new TimeEntryInstance(!inlineSettings?options:$.extend(inlineSettings,options)));$.timeEntry._connectTimeEntry(this,inst)}}})};$(document).ready(function(){$.timeEntry=new TimeEntry()})})(jQuery);
﻿;$(document).ready(function(){$.timeEntry.regional.sv={show24Hours:true,separator:":",ampmPrefix:"",ampmNames:["AM","PM"],spinnerTexts:["Nu","Förra fältet","Nästa fält","öka","minska"]};$.timeEntry.setDefaults($.timeEntry.regional.sv)});

bstrap.loaded("jquery.timeentry");

