(function(a){a.fn.spinbox=function(e){if(e&&typeof e==="String"&&e==="destroy")return this.unbind(".spinbox").removeClass(e.spinboxClass).removeClass(e.upClass).removeClass(e.downClass).removeClass(e.upHoverClass).removeClass(e.downHoverClass).removeData("spinboxMin").removeData("spinboxMax").removeData("spinboxReset").removeData("spinboxStep").removeData("spinboxBigStep");var f;e=a.extend({},a.fn.spinbox.defaults,e);this.each(function(){var g=a(this),k=c("spinboxMin",this),j=c("spinboxMax",this),i=c("spinboxStep",this),l=c("spinboxBigStep",this),m=c("spinboxReset",this),h=c("spinboxScale",this);if(k===f)k=b(g.attr("min"),e.min);if(j===f)j=b(g.attr("max"),e.max);if(!i)i=b(g.attr("step"),e.step);if(!l)l=b(g.attr("bigStep"),e.bigStep);if(m===f)m=b(e.reset,g.val(),k,j);if(h===f)h=g.data("spinboxScale");h=h||d(h)?h:e.scale;if(h===true)h=(i.toString().split(".")[1]||"").length;g.data("spinboxMin",k);g.data("spinboxMax",j);g.data("spinboxStep",i);g.data("spinboxBigStep",l);g.data("spinboxReset",m);g.data("spinboxScale",h)});return this.each(function(){var g,f,j,i,l=a(this);l.bind("mousemove.spinbox",function(d){var b=a(this),c=b.offset(),h=b.height()/2,i=d.pageX>c.left+b.width()-e.buttonWidth;g=i&&d.pageY<=c.top+h;f=i&&d.pageY>c.top+h;b.toggleClass(e.upHoverClass,g).toggleClass(e.downHoverClass,f)}).bind("mouseout.spinbox",function(){h();a(this).removeClass([e.upClass,e.downClass,e.upHoverClass,e.downHoverClass].join(" "));g=f=null}).bind("mousedown.spinbox",function(b){if(g||f){a(this).toggleClass(e.upClass,g).toggleClass(e.downClass,f);c.apply(this,[b]);k(this,b)}}).bind("mouseup.spinbox",function(){h();a(this).removeClass(e.upClass).removeClass(e.downClass)}).bind("keydown.spinbox",function(b){if(!e.keys||a.grep(e.keys,function(a){return a===b.keyCode||a instanceof RegExp&&a.test(String.fromCharCode(b.keyCode))}).length){var g=a(this),d={up:38,down:40,pageUp:33,pageDown:34},f=g.data("spinboxBigStep"),h=b.shiftKey?f:g.data("spinboxStep");switch(b.keyCode){case d.up:c.apply(this,[b,h,1]);break;case d.down:c.apply(this,[b,h,-1]);break;case d.pageUp:c.apply(this,[b,f,1]);break;case d.pageDown:c.apply(this,[b,f,-1])}}else return!e.keys}).bind("change.spinbox",function(a){c.apply(this,[a,0])}).addClass(e.spinboxClass);e.mousewheel&&a(this).bind("mousewheel.spinbox DOMMouseScroll.spinbox",function(b){var d=b.shiftKey?a(this).data("spinboxBigStep"):a(this).data("spinboxStep");if(b.detail<0||b.wheelDelta>=120)c.apply(this,[b,d,1]);else(b.detail>0||b.wheelDelta<=-120)&&c.apply(this,[b,d,-1]);return false});c.apply(this,[a.Event(),0]);function c(n,k,h){var c=a(this);if(e.ignore&&c.is(e.ignore))return;k=b(k,c.data("spinboxStep"),1);h=h||(f?-1:1);var j=c.val(),g=b(j,c.data("spinboxReset"),0),m=b(c.data("spinboxMin")),l=b(c.data("spinboxMax")),i=[g,k,m,l,h,j,e];if(h>0)g=e.increment.apply(this,i);else if(h<0)g=e.decrement.apply(this,i);if(d(c.data("spinboxScale"))&&e.round)g=e.round(g,c.data("spinboxScale"));if(d(m))g=Math.max(g,m);if(d(l))g=Math.min(g,l);var i=[g,k,m,l,h,j,e];if(g!=j&&c.triggerHandler("beforeSpin",i)!==false){c.val(g);e.change&&c.trigger("change",i);c.triggerHandler("spin",i)}}function k(a,b){h();j=window.setTimeout(function(){c.apply(a,[b]);i=window.setInterval(function(){c.apply(a,[b])},e.repeat)},e.delay)}function h(){window.clearTimeout(j);window.clearInterval(i)}})};function d(a){return!isNaN(parseFloat(a))}function b(){for(var a=0;a<arguments.length;a++)if(d(arguments[a]))return Number(parseFloat(arguments[a]));return}function c(e,f){var d=a(f||this).attr("class"),b=(new RegExp("(\\b"+e+")(\\S*)")).exec(d),c={"true":true,True:true,"false":false,False:false};if(b&&b.length>=3&&c[b[3]]!==undefined)b[3]=c[b[3]];return!b?undefined:b.length>=3?b[2]:null}a.fn.spinbox.defaults={min:0,max:null,step:1,bigStep:10,keys:[/[0-9]/,9,13,8,46,33,34,37,38,39,40,109,188,190],ignore:"[readonly],[disabled]",spinboxClass:"spinbox-active",upClass:"spinbox-up",downClass:"spinbox-down",upHoverClass:"spinbox-up-hover",downHoverClass:"spinbox-down-hover",mousewheel:true,change:true,increment:function(b,a){return b+a},decrement:function(b,a){return b-a},reset:null,delay:500,repeat:100,buttonWidth:20,scale:true,round:function(b,a){return Math.round(b*Math.pow(10,a))/Math.pow(10,a)}}})(jQuery);
