﻿function AddOrSubtractTwoFloats(fltValue1,fltValue2,bAddSubtract){var strNumber1=fltValue1.toString();var strNumber2=fltValue2.toString();var strResult="";if(strNumber1.indexOf(".")>-1||strNumber2.indexOf(".")>-1){if(strNumber1.indexOf(".")==-1){strNumber1=strNumber1+".0";}
if(strNumber2.indexOf(".")==-1){strNumber2=strNumber2+".0";}
var strDecimals1=strNumber1.substr(strNumber1.indexOf(".")+1);var strDecimals2=strNumber2.substr(strNumber2.indexOf(".")+1);var strInteger1=strNumber1.substr(0,strNumber1.indexOf("."));var strInteger2=strNumber2.substr(0,strNumber2.indexOf("."));var bNotSameLength=true;while(bNotSameLength){if(strDecimals1.length!=strDecimals2.length){if(strDecimals1.length<strDecimals2.length){strDecimals1+="0";}else{strDecimals2+="0";}}else{bNotSameLength=false;}}
var intOriginalDecimalLength=strDecimals1.length;for(var intCharIndex=0;intCharIndex<=strDecimals1.length-1;intCharIndex++){strInteger1=strInteger1+strDecimals1.substr(intCharIndex,1);strInteger2=strInteger2+strDecimals2.substr(intCharIndex,1);}
var intInteger1=Number(strInteger1);var intInteger2=Number(strInteger2);var intResult;if(bAddSubtract){intResult=intInteger1+intInteger2;}else{intResult=intInteger1-intInteger2;}
strResult=intResult.toString();for(var intZerosAdded=0;intZerosAdded<((intOriginalDecimalLength-strResult.length)+1);intZerosAdded++){strResult="0"+strResult;}
if(strResult.length>=intOriginalDecimalLength){strResult=strResult.substring(0,strResult.length-intOriginalDecimalLength)+"."+strResult.substring(strResult.length-intOriginalDecimalLength);}}else{if(bAddSubtract){strResult=Number(fltValue1)+Number(fltValue2);}else{strResult=Number(fltValue1)-Number(fltValue2);}}
return Number(strResult);}
(function(jQuery){jQuery.fn.jStepper=function(options){var opts=jQuery.extend({},jQuery.fn.jStepper.defaults,options);return this.each(function(){var $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){MakeStep(o,1,null,this);return false;}
else if(intDelta<0){MakeStep(o,0,null,this);return false;}});}
$this.keydown(function(e){var key=e.keyCode;if(key==38){MakeStep(o,1,e,this);}
if(key==40){MakeStep(o,0,e,this);}});$this.keyup(function(e){CheckValue(o,this);});});};function CheckValue(o,objElm){var $objElm=jQuery(objElm);var strValue=$objElm.val();if(o.disableNonNumeric){strValue=strValue.replace(/[^\d\.,\-]/gi,"");}
if(o.maxValue!==null){if(strValue>=o.maxValue){strValue=o.maxValue;}}
if(o.minValue!==null){if(strValue<=o.minValue&&strValue!=""){strValue=o.minValue;}}
$objElm.val(strValue);}
function MakeStep(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=AddOrSubtractTwoFloats(numValue,stepToUse,true);}else{numValue=AddOrSubtractTwoFloats(numValue,stepToUse,false);}
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(var intDecimalIndex=1;intDecimalIndex<=intDecimalsMissing;intDecimalIndex++){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;CheckValue(o,this);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,disableNonNumeric:true,onStep:null};})(jQuery);
