!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(window.jQuery)}(function(e){e.fn.numeric=function(t,n){"boolean"==typeof t&&(t={decimal:t,negative:!0,decimalPlaces:-1}),void 0===(t=t||{}).negative&&(t.negative=!0);var i=!1===t.decimal?"":t.decimal||".",r=!0===t.negative,a=void 0===t.decimalPlaces?-1:t.decimalPlaces;return n="function"==typeof n?n:function(){},this.data("numeric.decimal",i).data("numeric.negative",r).data("numeric.callback",n).data("numeric.decimalPlaces",a).keypress(e.fn.numeric.keypress).keyup(e.fn.numeric.keyup).blur(e.fn.numeric.blur)},e.fn.numeric.keypress=function(t){var n=e.data(this,"numeric.decimal"),i=e.data(this,"numeric.negative"),r=e.data(this,"numeric.decimalPlaces"),a=t.charCode?t.charCode:t.keyCode?t.keyCode:0;if(13==a&&"input"==this.nodeName.toLowerCase())return!0;if(13==a)return!1;if(35==t.charCode||36==t.charCode||37==t.charCode)return!1;var c=!1;if(t.ctrlKey&&97==a||t.ctrlKey&&65==a)return!0;if(t.ctrlKey&&120==a||t.ctrlKey&&88==a)return!0;if(t.ctrlKey&&99==a||t.ctrlKey&&67==a)return!0;if(t.ctrlKey&&122==a||t.ctrlKey&&90==a)return!0;if(t.ctrlKey&&118==a||t.ctrlKey&&86==a||t.shiftKey&&45==a)return!0;if(a<48||a>57){var l=e(this).val();if(0!==e.inArray("-",l.split(""))&&i&&45==a&&(0===l.length||0===parseInt(e.fn.getSelectionStart(this),10)))return!0;n&&a==n.charCodeAt(0)&&-1!=e.inArray(n,l.split(""))&&(c=!1),8!=a&&9!=a&&13!=a&&35!=a&&36!=a&&37!=a&&39!=a&&46!=a?c=!1:void 0!==t.charCode&&(t.keyCode==t.which&&0!==t.which?(c=!0,46==t.which&&(c=!1)):0!==t.keyCode&&0===t.charCode&&0===t.which&&(c=!0)),n&&a==n.charCodeAt(0)&&(c=-1==e.inArray(n,l.split("")))}else if(c=!0,n&&r>0){var u=e.fn.getSelectionStart(this),s=e.fn.getSelectionEnd(this),d=e.inArray(n,e(this).val().split(""));u===s&&d>=0&&u>d&&e(this).val().length>d+r&&(c=!1)}return c},e.fn.numeric.keyup=function(t){var n=e(this).val();if(n&&n.length>0){var i=e.fn.getSelectionStart(this),r=e.fn.getSelectionEnd(this),a=e.data(this,"numeric.decimal"),c=e.data(this,"numeric.negative"),l=e.data(this,"numeric.decimalPlaces");""!==a&&null!==a&&(0===(g=e.inArray(a,n.split("")))&&(this.value="0"+n,i++,r++),1==g&&"-"==n.charAt(0)&&(this.value="-0"+n.substring(1),i++,r++),n=this.value);for(var u=[0,1,2,3,4,5,6,7,8,9,"-",a],s=n.length,d=s-1;d>=0;d--){var o=n.charAt(d);0!==d&&"-"==o?n=n.substring(0,d)+n.substring(d+1):0!==d||c||"-"!=o||(n=n.substring(1));for(var f=!1,h=0;h<u.length;h++)if(o==u[h]){f=!0;break}f&&" "!=o||(n=n.substring(0,d)+n.substring(d+1))}var m=e.inArray(a,n.split(""));if(m>0)for(var v=s-1;v>m;v--)n.charAt(v)==a&&(n=n.substring(0,v)+n.substring(v+1));if(a&&l>0){var g=e.inArray(a,n.split(""));g>=0&&(n=n.substring(0,g+l+1),r=Math.min(n.length,r))}this.value=n,e.fn.setSelection(this,[i,r])}},e.fn.numeric.blur=function(){var t=e.data(this,"numeric.decimal"),n=e.data(this,"numeric.callback"),i=e.data(this,"numeric.negative"),r=this.value;""!==r&&(new RegExp("^"+(i?"-?":"")+"\\d+$|^"+(i?"-?":"")+"\\d*"+t+"\\d+$").exec(r)||n.apply(this))},e.fn.removeNumeric=function(){return this.data("numeric.decimal",null).data("numeric.negative",null).data("numeric.callback",null).data("numeric.decimalPlaces",null).unbind("keypress",e.fn.numeric.keypress).unbind("keyup",e.fn.numeric.keyup).unbind("blur",e.fn.numeric.blur)},e.fn.getSelectionStart=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveEnd("character",e.value.length),""==t.text?e.value.length:Math.max(0,e.value.lastIndexOf(t.text))}try{return e.selectionStart}catch(e){return 0}}},e.fn.getSelectionEnd=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveStart("character",-e.value.length),t.text.length}return e.selectionEnd}},e.fn.setSelection=function(e,t){if("number"==typeof t&&(t=[t,t]),t&&t.constructor==Array&&2==t.length)if("number"===e.type)e.focus();else if(e.createTextRange){var n=e.createTextRange();n.collapse(!0),n.moveStart("character",t[0]),n.moveEnd("character",t[1]-t[0]),n.select()}else{e.focus();try{e.setSelectionRange&&e.setSelectionRange(t[0],t[1])}catch(e){}}}});