/*!
jQuery UI Spinner 1.23

Copyright (c) 2009-2010 Brant Burnett
Copyright (c) 2010 Johannes Geppert http://www.jgeppert.com
Dual licensed under the MIT or GPL Version 2 licenses.

 Depends:
 jquery.ui.core.js
 jquery.ui.widget.js
 jquery.ui.mouse.js
 jquery.ui.position.js
*/(function(jQuery,undefined){var
active="ui-state-active",hover="ui-state-hover",disabled="ui-state-disabled",keyCode=jQuery.ui.keyCode,up=keyCode.UP,down=keyCode.DOWN,right=keyCode.RIGHT,left=keyCode.LEFT,pageUp=keyCode.PAGE_UP,pageDown=keyCode.PAGE_DOWN,home=keyCode.HOME,end=keyCode.END,msie=jQuery.browser.msie,mouseWheelEventName=jQuery.browser.mozilla?"DOMMouseScroll":"mousewheel",eventNamespace=".uispinner",validKeys=[up,down,right,left,pageUp,pageDown,home,end,keyCode.BACKSPACE,keyCode.DELETE,keyCode.TAB],focusCtrl;jQuery.widget("ui.spinner",{options:{min:null,max:null,allowNull:false,group:"",point:".",prefix:"",suffix:"",places:null,defaultStep:1,largeStep:10,mouseWheel:true,increment:"slow",className:null,showOn:"always",width:16,upIconClass:"ui-icon-triangle-1-n",downIconClass:"ui-icon-triangle-1-s",format:function(num,places){var options=this,regex=/(\d+)(\d{3})/,result=((isNaN(num)?0:Math.abs(num)).toFixed(places))+"";for(result=result.replace(".",options.point);regex.test(result)&&options.group;result=result.replace(regex,"$1"+options.group+"$2")){}return(num<0?"-":"")+options.prefix+result+options.suffix;},parse:function(val){var options=this;if(options.group=="."){val=val.replace(".","");}if(options.point!="."){val=val.replace(options.point,".");}return parseFloat(val.replace(/[^0-9\-\.]/g,""));}},_create:function(){var self=this,input=self.element,type=input.attr("type");if(!input.is("input")||((type!="text")&&(type!="number"))){console.error("Invalid target for ui.spinner");return;}self._procOptions(true);self._createButtons(input);if(!input.is(":enabled")){self.disable();}},_createButtons:function(input){function getMargin(margin){return margin=="auto"?0:parseInt(margin,10);}var self=this,options=self.options,className=options.className,buttonWidth=options.width,showOn=options.showOn,box=jQuery.support.boxModel,height=input.outerHeight(),rightMargin=self.oMargin=getMargin(input.css("margin-right")),wrapper=self.wrapper=input.after("<span class='ui-spinner ui-widget'></span>").next(),btnContainer=self.btnContainer=jQuery("<div class='ui-spinner-buttons'>"+"<div class='ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr'><span class='ui-icon "+options.upIconClass+"'>&nbsp;</span></div>"+"<div class='ui-spinner-down ui-spinner-button ui-state-default ui-corner-br'><span class='ui-icon "+options.downIconClass+"'>&nbsp;</span></div>"+"</div>"),upButton,downButton,buttons,icons,hoverDelay,hoverDelayCallback,hovered,inKeyDown,inSpecialKey,inMouseDown,rtl=input[0].dir=="rtl";if(className){wrapper.addClass(className);}wrapper.append(btnContainer);buttons=self.buttons=btnContainer.find(".ui-spinner-button");buttons.css({width:buttonWidth-(box?buttons.outerWidth()-buttons.width():0),height:height/2-(box?buttons.outerHeight()-buttons.height():0)});upButton=buttons[0];downButton=buttons[1];icons=buttons.find(".ui-icon");icons.css({marginLeft:(buttons.innerWidth()-icons.width())/2,marginTop:(buttons.innerHeight()-icons.height())/2});btnContainer.width(buttons.outerWidth());if(showOn!="always"){btnContainer.css("opacity",0);}input.addClass("ui-spinner-input").attr({role:"textbox"});if(showOn=="hover"||showOn=="both"){buttons.add(input).bind("mouseenter"+eventNamespace,function(){setHoverDelay(function(){hovered=true;if(!self.focused||(showOn=="hover")){self.showButtons();}});}).bind("mouseleave"+eventNamespace,function hoverOut(){setHoverDelay(function(){hovered=false;if(!self.focused||(showOn=="hover")){self.hideButtons();}});});}function mouseDown(){if(!options.disabled){var input=self.element[0],dir=(this===upButton?1:-1);input.focus();input.select();jQuery(this).addClass(active);inMouseDown=true;self._startSpin(dir);}return false;}function mouseUp(){if(inMouseDown){jQuery(this).removeClass(active);self._stopSpin();inMouseDown=false;}return false;}buttons.hover(function(){self.buttons.removeClass(hover);if(!options.disabled){jQuery(this).addClass(hover);}},function(){jQuery(this).removeClass(hover);}).mousedown(mouseDown).mouseup(mouseUp).mouseout(mouseUp);if(msie){buttons.dblclick(function(){if(!options.disabled){self._change();self._doSpin((this===upButton?1:-1)*options.step);}return false;}).bind("selectstart",function(){return false;});}input.bind("keydown"+eventNamespace,function(e){var dir,large,limit,keyCode=e.keyCode;if(e.ctrl||e.alt){return true;}if(isSpecialKey(keyCode)){inSpecialKey=true;}if(inKeyDown){return false;}switch(keyCode){case up:case pageUp:dir=1;large=keyCode==pageUp;break;case down:case pageDown:dir=-1;large=keyCode==pageDown;break;case right:case left:dir=(keyCode==right)^rtl?1:-1;break;case home:limit=self.options.min;if(limit!==null){self._setValue(limit);}return false;case end:limit=self.options.max;limit=self.options.max;if(limit!==null){self._setValue(limit);}return false;}if(dir){if(!inKeyDown&&!options.disabled){keyDir=dir;jQuery(dir>0?upButton:downButton).addClass(active);inKeyDown=true;self._startSpin(dir,large);}return false;}}).bind("keyup"+eventNamespace,function(e){if(e.ctrl||e.alt){return true;}if(isSpecialKey(keyCode)){inSpecialKey=false;}switch(e.keyCode){case up:case right:case pageUp:case down:case left:case pageDown:buttons.removeClass(active);self._stopSpin();inKeyDown=false;return false;}}).bind("keypress"+eventNamespace,function(e){if(invalidKey(e.keyCode,e.charCode)){return false;}}).bind("change"+eventNamespace,function(){self._change();}).bind("focus"+eventNamespace,function(){function selectAll(){self.element.select();}if(msie){selectAll();}else{setTimeout(selectAll,0);}self.focused=true;focusCtrl=self;if(!hovered&&(showOn=="focus"||showOn=="both")){self.showButtons();}}).bind("blur"+eventNamespace,function(){self.focused=false;if(!hovered&&(showOn=="focus"||showOn=="both")){self.hideButtons();}});function isSpecialKey(keyCode){for(var i=0;i<validKeys.length;i++){if(validKeys[i]==keyCode){return true;}}return false;}function invalidKey(keyCode,charCode){if(inSpecialKey){return false;}var ch=String.fromCharCode(charCode||keyCode),options=self.options;if((ch>='0')&&(ch<='9')||(ch=='-')){return false;}if(((self.places>0)&&(ch==options.point))||(ch==options.group)){return false;}return true;}function setHoverDelay(callback){if(hoverDelay){if(callback===hoverDelayCallback){return;}clearTimeout(hoverDelay);}function execute(){hoverDelay=0;callback();}hoverDelayCallback=callback;hoverDelay=setTimeout(execute,100);}},_procOptions:function(init){var self=this,input=self.element,options=self.options,min=options.min,max=options.max,step=options.step,places=options.places,maxlength=-1,temp;if(options.increment=="slow"){options.increment=[{count:1,mult:1,delay:250},{count:3,mult:1,delay:100},{count:0,mult:1,delay:50}];}else if(options.increment=="fast"){options.increment=[{count:1,mult:1,delay:250},{count:19,mult:1,delay:100},{count:80,mult:1,delay:20},{count:100,mult:10,delay:20},{count:0,mult:100,delay:20}];}if((min===null)&&((temp=input.attr("min"))!==null)){min=parseFloat(temp);}if((max===null)&&((temp=input.attr("max"))!==null)){max=parseFloat(temp);}if(!step&&((temp=input.attr("step"))!==null)){if(temp!="any"){step=parseFloat(temp);options.largeStep*=step;}}options.step=step=step||options.defaultStep;if((places===null)&&((temp=step+"").indexOf(".")!=-1)){places=temp.length-temp.indexOf(".")-1;}self.places=places;if((max!==null)&&(min!==null)){if(min>max){min=max;}maxlength=Math.max(Math.max(maxlength,options.format(max,places,input).length),options.format(min,places,input).length);}if(init){self.inputMaxLength=input[0].maxLength;}temp=self.inputMaxLength;if(temp>0){maxlength=maxlength>0?Math.min(temp,maxlength):temp;temp=Math.pow(10,maxlength)-1;if((max===null)||(max>temp)){max=temp;}temp=-(temp+1)/10+1;if((min===null)||(min<temp)){min=temp;}}if(maxlength>0){input.attr("maxlength",maxlength);}options.min=min;options.max=max;self._change();input.unbind(mouseWheelEventName+eventNamespace);if(options.mouseWheel){input.bind(mouseWheelEventName+eventNamespace,self._mouseWheel);}},_mouseWheel:function(e){var self=jQuery.data(this,"spinner");if(!self.options.disabled&&self.focused&&(focusCtrl===self)){self._change();self._doSpin(((e.wheelDelta||-e.detail)>0?1:-1)*self.options.step);return false;}},_setTimer:function(delay,dir,large){function fire(){self._spin(dir,large);}var self=this;self._stopSpin();self.timer=setInterval(fire,delay);},_stopSpin:function(){if(this.timer){clearInterval(this.timer);this.timer=0;}},_startSpin:function(dir,large){var self=this,options=self.options,increment=options.increment;self._change();self._doSpin(dir*(large?self.options.largeStep:self.options.step));if(increment&&increment.length>0){self.counter=0;self.incCounter=0;self._setTimer(increment[0].delay,dir,large);}},_spin:function(dir,large){var self=this,increment=self.options.increment,curIncrement=increment[self.incCounter];self._doSpin(dir*curIncrement.mult*(large?self.options.largeStep:self.options.step));self.counter++;if((self.counter>curIncrement.count)&&(self.incCounter<increment.length-1)){self.counter=0;curIncrement=increment[++self.incCounter];self._setTimer(curIncrement.delay,dir,large);}},_doSpin:function(step){var self=this,value=self.curvalue;if(value===null){value=(step>0?self.options.min:self.options.max)||0;}self._setValue(value+step);},_parseValue:function(){var value=this.element.val();return value?this.options.parse(value,this.element):null;},_validate:function(value){var options=this.options,min=options.min,max=options.max;if((value===null)&&!options.allowNull){value=this.curvalue!==null?this.curvalue:min||max||0;}if((max!==null)&&(value>max)){return max;}else if((min!==null)&&(value<min)){return min;}else{return value;}},_change:function(){var self=this,value=self._parseValue(),min=self.options.min,max=self.options.max;if(!self.selfChange){if(isNaN(value)){value=self.curvalue;}self._setValue(value,true);}},_setOption:function(key,value){jQuery.Widget.prototype._setOption.call(this,key,value);this._procOptions();},increment:function(){this._doSpin(this.options.step);},decrement:function(){this._doSpin(-this.options.step);},showButtons:function(immediate){var btnContainer=this.btnContainer.stop();if(immediate){btnContainer.css("opacity",1);}else{btnContainer.fadeTo("fast",1);}},hideButtons:function(immediate){var btnContainer=this.btnContainer.stop();if(immediate){btnContainer.css("opacity",0);}else{btnContainer.fadeTo("fast",0);}this.buttons.removeClass(hover);},_setValue:function(value,suppressFireEvent){var self=this;self.curvalue=value=self._validate(value);self.element.val(value!==null?self.options.format(value,self.places,self.element):"");if(!suppressFireEvent){self.selfChange=true;self.element.change();self.selfChange=false;}},value:function(newValue){if(arguments.length){this._setValue(newValue);return this.element;}return this.curvalue;},enable:function(){this.buttons.removeClass(disabled);this.element[0].disabled=false;jQuery.Widget.prototype.enable.call(this);},disable:function(){this.buttons.addClass(disabled).removeClass(hover);this.element[0].disabled=true;jQuery.Widget.prototype.disable.call(this);},destroy:function(target){this.wrapper.remove();this.element.unbind(eventNamespace).css({width:this.oWidth,marginRight:this.oMargin});jQuery.Widget.prototype.destroy.call(this);}});})(jQuery);
