﻿(function(jQuery){jQuery.fn.jStepper=function(options){var opts=jQuery.extend({},jQuery.fn.jStepper.defaults,options);return this.each(function(){$this=jQuery(this);var o=jQuery.meta?jQuery.extend({},opts,$this.data()):opts;if(o.disableAutocomplete){$this.attr("autocomplete","off");}
if(jQuery.isFunction($this.mousewheel)){$this.mousewheel(function(objEvent,intDelta){if(intDelta>0){jQuery.fn.jStepper.makestep(o,1,null,this);return false;}
else if(intDelta<0){jQuery.fn.jStepper.makestep(o,0,null,this);return false;}});}
$this.keydown(function(e){var key=e.keyCode;if(o.disableOtherKeys){if(((key>=65&&key<=90)&&(!e.ctrlKey))||(key==107||key==219||key==107||key==111||key==192||key==221||key==222||key==191||key==59)){return false;}}
if(e.keyCode==38){jQuery.fn.jStepper.makestep(o,1,e,this);}
if(e.keyCode==40){jQuery.fn.jStepper.makestep(o,0,e,this);}});});};jQuery.fn.jStepper.makestep=function(o,bDirection,keydown,objElm){var $objElm=jQuery(objElm);var stepToUse;if(keydown){if(keydown.ctrlKey){stepToUse=o.ctrlStep;}else if(keydown.shiftKey){stepToUse=o.shiftStep;}else{stepToUse=o.normalStep;}}else{stepToUse=o.normalStep;}
var numValue=$objElm.val();var intSelectionStart=numValue.length-objElm.selectionStart;var intSelectionEnd=numValue.length-objElm.selectionEnd;numValue=numValue.replace(/,/g,".");numValue=numValue.replace(o.decimalSeparator,".");numValue=numValue+'';if(numValue.indexOf(".")!=-1){numValue=numValue.match(new RegExp("-{0,1}[0-9]+[\\.][0-9]*"));}
numValue=numValue+'';if(numValue.indexOf("-")!=-1){numValue=numValue.match(new RegExp("-{0,1}[0-9]+[\\.]*[0-9]*"));}
numValue=numValue+'';numValue=numValue.match(new RegExp("-{0,1}[0-9]+[\\.]*[0-9]*"));if(numValue===""||numValue=="-"||numValue===null){numValue=o.defaultValue;}
if(bDirection==1){numValue=parseFloat(numValue)+parseFloat(stepToUse);}else{numValue=parseFloat(numValue)-parseFloat(stepToUse);}
var bLimitReached=false;if(o.maxValue!==null){if(numValue>=o.maxValue){numValue=o.maxValue;bLimitReached=true;}}
if(o.minValue!==null){if(numValue<=o.minValue){numValue=o.minValue;bLimitReached=true;}}
numValue=numValue+'';if(o.minLength!==null){var intLengthNow=numValue.length;if(numValue.indexOf(".")!=-1){intLengthNow=numValue.indexOf(".");}
var bIsNegative=false;if(numValue.indexOf("-")!=-1){bIsNegative=true;numValue=numValue.replace(/-/,"");}
if(intLengthNow<o.minLength){for(var i=1;i<=(o.minLength-intLengthNow);i++){numValue='0'+numValue;}}
if(bIsNegative){numValue='-'+numValue;}}
numValue=numValue+'';var intDecimalsNow;if(o.minDecimals>0){var intDecimalsMissing;if(numValue.indexOf(".")!=-1){intDecimalsNow=numValue.length-(numValue.indexOf(".")+1);if(intDecimalsNow<o.minDecimals){intDecimalsMissing=o.minDecimals-intDecimalsNow;}}else{intDecimalsMissing=o.minDecimals;numValue=numValue+'.';}
for(i=1;i<=intDecimalsMissing;i++){numValue=numValue+'0';}}
if(o.maxDecimals>0){intDecimalsNow=0;if(numValue.indexOf(".")!=-1){intDecimalsNow=numValue.length-(numValue.indexOf(".")+1);if(o.maxDecimals<intDecimalsNow){numValue=numValue.substring(0,numValue.indexOf("."))+"."+numValue.substring(numValue.indexOf(".")+1,numValue.indexOf(".")+1+o.maxDecimals);}}}
if(!o.allowDecimals){numValue=numValue+'';numValue=numValue.replace(new RegExp("[\\.].+"),"");}
numValue=numValue.replace(/\./,o.decimalSeparator);$objElm.val(numValue);objElm.selectionStart=numValue.length-intSelectionStart;objElm.selectionEnd=numValue.length-intSelectionEnd;if(o.onStep){o.onStep($objElm,bDirection,bLimitReached);}
return false;};jQuery.fn.jStepper.defaults={maxValue:null,minValue:null,normalStep:1,shiftStep:5,ctrlStep:10,minLength:null,disableAutocomplete:true,defaultValue:1,decimalSeparator:",",allowDecimals:true,minDecimals:0,maxDecimals:null,disableOtherKeys:true,onStep:null};})(jQuery);
