(function(a){a.widget("ui.spinner",{_init:function(){if(a.data(this.element[0],"spinner")){return}if(this.options.init){this.options.init(this.ui(null))}this._decimals=0;if(this.options.stepping.toString().indexOf(".")!=-1){var c=this.options.stepping.toString();this._decimals=c.slice(c.indexOf(".")+1,c.length).length}var b=this;this.element.addClass("ui-spinner-box").attr("autocomplete","off");this._setValue(isNaN(this._getValue())?this.options.start:this._getValue());this.element.wrap("<div>").parent().addClass("ui-spinner").append('<button class="ui-spinner-up" type="button">&#9650;</button>').find(".ui-spinner-up").bind("mousedown",function(d){a(this).addClass("ui-spinner-pressed");if(!b.counter){b.counter=1}b._mousedown(b.options.repeatDelay,"_up",d)}).bind("mouseup",function(d){a(this).removeClass("ui-spinner-pressed");if(b.counter==1){b._up(d)}b._mouseup(d)}).bind("mouseout",function(d){a(this).removeClass("ui-spinner-pressed");b._mouseup(d)}).bind("keydown.spinner",function(f){var d=a.keyCode;if(f.keyCode==d.SPACE||f.keyCode==d.ENTER){a(this).addClass("ui-spinner-pressed");if(!b.counter){b.counter=1}b._up.call(b,f)}else{if(f.keyCode==d.DOWN||f.keyCode==d.RIGHT){b.element.siblings(".ui-spinner-down").focus()}else{if(f.keyCode==d.LEFT){b.element.focus()}}}}).bind("keyup.spinner",function(d){a(this).removeClass("ui-spinner-pressed");b.counter=0;b._propagate("change",d)}).end().append('<button class="ui-spinner-down" type="button">&#9660;</button>').find(".ui-spinner-down").bind("mousedown",function(d){a(this).addClass("ui-spinner-pressed");if(!b.counter){b.counter=1}b._mousedown(b.options.repeatDelay,"_down",d)}).bind("mouseup",function(d){a(this).removeClass("ui-spinner-pressed");if(b.counter==1){b._down()}b._mouseup(d)}).bind("mouseout",function(d){a(this).removeClass("ui-spinner-pressed");b._mouseup(d)}).bind("keydown.spinner",function(f){var d=a.keyCode;if(f.keyCode==d.SPACE||f.keyCode==d.ENTER){a(this).addClass("ui-spinner-pressed");if(!b.counter){b.counter=1}b._down.call(b,f)}else{if(f.keyCode==d.UP||f.keyCode==d.LEFT){b.element.siblings(".ui-spinner-up").focus()}}}).bind("keyup.spinner",function(d){a(this).removeClass("ui-spinner-pressed");b.counter=0;b._propagate("change",d)}).end();this._items=this.element.children().length;if(this._items>1){this.element.addClass("ui-spinner-list").css("height",this.element.outerHeight()/this._items).children().addClass("ui-spinner-listitem").end().parent().css("height",this.element.outerHeight()).end();this.options.stepping=1;this.options.min=0;this.options.max=this._items-1}this.element.bind("keydown.spinner",function(d){if(!b.counter){b.counter=1}return b._keydown.call(b,d)}).bind("keyup.spinner",function(d){b.counter=0;b._propagate("change",d)}).bind("blur.spinner",function(d){b._cleanUp()});if(a.fn.mousewheel){this.element.mousewheel(function(d,f){b._mousewheel(d,f)})}},_constrain:function(){if(this.options.min!=undefined&&this._getValue()<this.options.min){this._setValue(this.options.min)}if(this.options.max!=undefined&&this._getValue()>this.options.max){this._setValue(this.options.max)}},_cleanUp:function(){this._setValue(this._getValue());this._constrain()},_spin:function(c,b){if(this.disabled){return}if(isNaN(this._getValue())){this._setValue(this.options.start)}this._setValue(this._getValue()+(c=="up"?1:-1)*(this.options.incremental&&this.counter>100?(this.counter>200?100:10):1)*this.options.stepping);this._animate(c);this._constrain();if(this.counter){this.counter++}this._propagate("spin",b);if(this.options.spin){this.options.spin(b,this.ui())}},_down:function(b){this._spin("down",b);this._propagate("down",b)},_up:function(b){this._spin("up",b);this._propagate("up",b)},_mousedown:function(c,g,f){var b=this;c=c||100;if(this.timer){window.clearInterval(this.timer)}this.timer=window.setInterval(function(){b[g](f);if(b.counter>20){b._mousedown(20,g,f)}},c)},_mouseup:function(b){this.counter=0;if(this.timer){window.clearInterval(this.timer)}this.element[0].focus();this._propagate("change",b)},_keydown:function(b){},_mousewheel:function(b,c){c=(a.browser.opera?-c/Math.abs(c):c);c>0?this._up(b):this._down(b);b.preventDefault()},_getValue:function(){return parseFloat(this.element.val().replace(/[^0-9\-\.]/g,""))},_setValue:function(b){if(isNaN(b)){b=this.options.start}this.element.val(this.options.currency?a.ui.spinner.format.currency(b,this.options.currency):a.ui.spinner.format.number(b,this._decimals))},_animate:function(b){if(this.element.hasClass("ui-spinner-list")&&((b=="up"&&this._getValue()<=this.options.max)||(b=="down"&&this._getValue()>=this.options.min))){this.element.animate({marginTop:"-"+this._getValue()*this.element.outerHeight()},{duration:"fast",queue:false})}},_addItem:function(b){if(!this.element.is("input")){var c="div";if(this.element.is("ol")||this.element.is("ul")){c="li"}this.element.append("<"+c+' class="ui-spinner-dyn">'+b+"</"+c+">")}},plugins:{},ui:function(b){return{options:this.options,element:this.element,value:this._getValue(),add:this._addItem}},_propagate:function(c,b){a.ui.plugin.call(this,c,[b,this.ui()]);return this.element.triggerHandler(c=="spin"?c:"spin"+c,[b,this.ui()],this.options[c])},destroy:function(){if(!a.data(this.element[0],"spinner")){return}if(a.fn.mousewheel){this.element.unmousewheel()}this.element.removeClass("ui-spinner-box ui-spinner-list").removeAttr("disabled").removeAttr("autocomplete").removeData("spinner").unbind(".spinner").siblings().remove().end().children().removeClass("ui-spinner-listitem").remove(".ui-spinner-dyn").end().parent().removeClass("ui-spinner ui-spinner-disabled").before(this.element.clone()).remove().end()},enable:function(){this.element.removeAttr("disabled").siblings().removeAttr("disabled").parent().removeClass("ui-spinner-disabled");this.disabled=false},disable:function(){this.element.attr("disabled",true).siblings().attr("disabled",true).parent().addClass("ui-spinner-disabled");this.disabled=true}});a.extend(a.ui.spinner,{defaults:{stepping:1,start:0,incremental:true,currency:false,repeatDelay:260},format:{number:function(b,c){return this.round(b,c)},currency:function(c,b){return(c!==Math.abs(c)?"-":"")+b+this.round(Math.abs(c),2)},round:function(b,d){var c=Math.round(parseFloat(b)*Math.pow(10,d))/Math.pow(10,d);if(d>0){c=c+((c.toString().indexOf(".")==-1)?".":"")+"0000000001";c=c.substr(0,c.indexOf(".")+1+d)}else{c=Math.round(c)}return c}}})})(jQuery);
