/** * autoNumeric.js * @author: Bob Knothe * @author: Sokolov Yura aka funny_falcon * @version: 1.7.1 * * Copyright (c) 2011 Robert J. Knothe http://www.decorplanit.com/plugin/ * Copyright (c) 2011 Sokolov Yura aka funny_falcon http://github.com/funny_falcon/auto_numeric_js * * The MIT License (http://www.opensource.org/licenses/mit-license.php) */ (function(c){function l(r){var q={};if(r.selectionStart===undefined){r.focus();var p=document.selection.createRange(); q.length=p.text.length;p.moveStart("character",-r.value.length);q.end=p.text.length; q.start=q.end-q.length}else{q.start=r.selectionStart;q.end=r.selectionEnd;q.length=q.end-q.start }return q}function d(s,t,p){if(s.selectionStart===undefined){s.focus();var q=s.createTextRange(); q.collapse(true);q.moveEnd("character",p);q.moveStart("character",t);q.select()}else{s.selectionStart=t; s.selectionEnd=p}}function b(p,q){c.each(q,function(s,u){if(typeof(u)==="function"){q[s]=u(p,q,s) }else{if(typeof(u)==="string"){var t=u.substr(0,4);if(t==="fun:"){var r=c.autoNumeric[u.substr(4)]; if(typeof(r)==="function"){q[s]=c.autoNumeric[u.substr(4)](p,q,s)}else{q[s]=null}}else{if(t==="css:"){q[s]=c(u.substr(4)).val() }}}}})}function o(q,p){if(typeof(q[p])==="string"){q[p]*=1}}function e(s,r){var v=c.extend({},c.fn.autoNumeric.defaults,r); if(c.metadata){v=c.extend(v,s.metadata())}b(s,v);var u=v.vMax.toString().split("."); var q=(!v.vMin&&v.vMin!==0)?[]:v.vMin.toString().split(".");o(v,"vMax");o(v,"vMin"); o(v,"mDec");v.aNeg=v.vMin<0?"-":"";if(typeof(v.mDec)!=="number"){v.mDec=Math.max((u[1]?u[1]:"").length,(q[1]?q[1]:"").length) }if(v.altDec===null&&v.mDec>0){if(v.aDec==="."&&v.aSep!==","){v.altDec=","}else{if(v.aDec===","&&v.aSep!=="."){v.altDec="." }}}var p=v.aNeg?"([-\\"+v.aNeg+"]?)":"(-?)";v._aNegReg=p;v._skipFirst=new RegExp(p+"[^-"+(v.aNeg?"\\"+v.aNeg:"")+"\\"+v.aDec+"\\d].*?(\\d|\\"+v.aDec+"\\d)"); v._skipLast=new RegExp("(\\d\\"+v.aDec+"?)[^\\"+v.aDec+"\\d]\\D*$");var t=(v.aNeg?v.aNeg:"-")+v.aNum+"\\"+v.aDec; if(v.altDec&&v.altDec!==v.aSep){t+=v.altDec}v._allowed=new RegExp("[^"+t+"]","gi"); v._numReg=new RegExp(p+"(?:\\"+v.aDec+"?(\\d+\\"+v.aDec+"\\d+)|(\\d*(?:\\"+v.aDec+"\\d*)?))"); return v}function k(r,u,t){if(u.aSign){while(r.indexOf(u.aSign)>-1){r=r.replace(u.aSign,"") }}r=r.replace(u._skipFirst,"$1$2");r=r.replace(u._skipLast,"$1");r=r.replace(u._allowed,""); if(u.altDec){r=r.replace(u.altDec,u.aDec)}var p=r.match(u._numReg);r=p?[p[1],p[2],p[3]].join(""):""; if(t){var q="^"+u._aNegReg+"0*(\\d"+(t==="leading"?")":"|$)");q=new RegExp(q);r=r.replace(q,"$1$2") }return r}function m(q,p,t){if(p&&t){var r=q.split(p);if(r[1]&&r[1].length>t){if(t>0){r[1]=r[1].substring(0,t); q=r.join(p)}else{q=r[0]}}}return q}function n(r,q,p){if(q&&q!=="."){r=r.replace(q,".") }if(p&&p!=="-"){r=r.replace(p,"-")}if(!r.match(/\d/)){r+="0"}return r}function h(r,q,p){if(p&&p!=="-"){r=r.replace("-",p) }if(q&&q!=="."){r=r.replace(".",q)}return r}function j(p,r){p=k(p,r);p=m(p,r.aDec,r.mDec); p=n(p,r.aDec,r.aNeg);var q=p*1;return q>=r.vMin&&q<=r.vMax}function f(r,v){r=k(r,v); if(r===""||r===v.aNeg){if(v.wEmpty==="zero"){return r+"0"}else{if(v.wEmpty==="sign"){return r+v.aSign }else{return r}}}var p="";if(v.dGroup===2){p=/(\d)((\d)(\d{2}?)+)$/}else{if(v.dGroup===4){p=/(\d)((\d{4}?)+)$/ }else{p=/(\d)((\d{3}?)+)$/}}var u=r.split(v.aDec);if(v.altDec&&u.length===1){u=r.split(v.altDec) }var t=u[0];if(v.aSep){while(p.test(t)){t=t.replace(p,"$1"+v.aSep+"$2")}}if(v.mDec!==0&&u.length>1){if(u[1].length>v.mDec){u[1]=u[1].substring(0,v.mDec) }r=t+v.aDec+u[1]}else{r=t}if(v.aSign){var q=r.indexOf(v.aNeg)!==-1;r=r.replace(v.aNeg,""); r=v.pSign==="p"?v.aSign+r:r+v.aSign;if(q){r=v.aNeg+r}}return r}function g(t,y,q,A){t=(t==="")?"0":t+=""; var p="";var v=0;var B="";if(t.charAt(0)==="-"){B=(t*1===0)?"":"-";t=t.replace("-","") }if((t*1)>0){while(t.substr(0,1)==="0"&&t.length>1){t=t.substr(1)}}var x=t.lastIndexOf("."); if(x===0){t="0"+t;x=1}if(x===-1||x===t.length-1){if(A&&y>0){p=(x===-1)?t+".":t;for(v=0; v4&&q==="S")||(s>4&&q==="A"&&B==="")||(s>5&&q==="A"&&B==="-")||(s>5&&q==="s")||(s>5&&q==="a"&&B==="")||(s>4&&q==="a"&&B==="-")||(s>5&&q==="B")||(s===5&&q==="B"&&z===1)||(s>0&&q==="C"&&B==="")||(s>0&&q==="F"&&B==="-")||(s>0&&q==="U")){for(v=(u.length-1); v>=0;v--){if(u[v]==="."){continue}u[v]++;if(u[v]<10){break}}}for(v=0;v<=r;v++){if(u[v]==="."||u[v]<10||v===0){p+=u[v] }else{p+="0"}}if(y===0){p=p.replace(".","")}return B+p}function a(q,p){this.options=p; this.that=q;this.$that=c(q);this.formatted=false;this.io=e(this.$that,this.options); this.value=q.value}a.prototype={init:function(p){this.value=this.that.value;this.io=e(this.$that,this.options); this.cmdKey=p.metaKey;this.shiftKey=p.shiftKey;this.selection=l(this.that);if(p.type==="keydown"||p.type==="keyup"){this.kdCode=p.keyCode }this.which=p.which;this.processed=false;this.formatted=false},setSelection:function(r,p,q){r=Math.max(r,0); p=Math.min(p,this.that.value.length);this.selection={start:r,end:p,length:p-r};if(q===undefined||q){d(this.that,r,p) }},setPosition:function(q,p){this.setSelection(q,q,p)},getBeforeAfter:function(){var q=this.value; var r=q.substring(0,this.selection.start);var p=q.substring(this.selection.end,q.length); return[r,p]},getBeforeAfterStriped:function(){var p=this.getBeforeAfter();p[0]=k(p[0],this.io); p[1]=k(p[1],this.io);return p},normalizeParts:function(t,r){var u=this.io;r=k(r,u); var s=r.match(/^\d/)?true:"leading";t=k(t,u,s);if((t===""||t===u.aNeg)){if(r>""){r=r.replace(/^0*(\d)/,"$1") }}var q=t+r;if(u.aDec){var p=q.match(new RegExp("^"+u._aNegReg+"\\"+u.aDec));if(p){t=t.replace(p[1],p[1]+"0"); q=t+r}}if(u.wEmpty==="zero"&&(q===u.aNeg||q==="")){t+="0"}return[t,r]},setValueParts:function(t,r){var u=this.io; var s=this.normalizeParts(t,r);var q=s.join("");var p=s[0].length;if(j(q,u)){q=m(q,u.aDec,u.mDec); if(p>q.length){p=q.length}this.value=q;this.setPosition(p,false);return true}return false },signPosition:function(){var u=this.io,s=u.aSign,r=this.that;if(s){var q=s.length; if(u.pSign==="p"){var t=u.aNeg&&r.value&&r.value.charAt(0)===u.aNeg;return t?[1,q+1]:[0,q] }else{var p=r.value.length;return[p-q,p]}}else{return[1000,-1]}},expandSelectionOnSign:function(q){var p=this.signPosition(); var r=this.selection;if(r.startp[0]){if((r.startp[1])&&this.value.substring(Math.max(r.start,p[0]),Math.min(r.end,p[1])).match(/^\s*$/)){if(r.start=112&&p<=123)||(p>=91&&p<=93)||(p>=9&&p<=31)||(p<8&&(u===0||u===p))||p===144||p===145||p===45){return true }if(q&&p===65){return true}if(q&&(p===67||p===86||p===88)){if(t.type==="keydown"){this.expandSelectionOnSign() }if(p===86){if(t.type==="keydown"||t.type==="keypress"){if(this.valuePartsBeforePaste===undefined){this.valuePartsBeforePaste=this.getBeforeAfter() }}else{this.checkPaste()}}return t.type==="keydown"||t.type==="keypress"||p===67}if(q){return true }if(p===37||p===39){var r=this.io.aSep,v=this.selection.start,s=this.that.value;if(t.type==="keydown"&&r&&!this.shiftKey){if(p===37&&s.charAt(v-2)===r){this.setPosition(v-1) }else{if(p===39&&s.charAt(v)===r){this.setPosition(v+1)}}}return true}if(p>=34&&p<=40){return true }return false},processAllways:function(){var p;if(this.kdCode===8||this.kdCode===46){if(!this.selection.length){p=this.getBeforeAfterStriped(); if(this.kdCode===8){p[0]=p[0].substring(0,p[0].length-1)}else{p[1]=p[1].substring(1,p[1].length) }this.setValueParts(p[0],p[1])}else{this.expandSelectionOnSign(false);p=this.getBeforeAfterStriped(); this.setValueParts(p[0],p[1])}return true}return false},processKeypress:function(){var t=this.io; var p=String.fromCharCode(this.which);var s=this.getBeforeAfterStriped();var r=s[0],q=s[1]; if(p===t.aDec||(t.altDec&&p===t.altDec)||((p==="."||p===",")&&this.kdCode===110)){if(!t.mDec||!t.aDec){return true }if(t.aNeg&&q.indexOf(t.aNeg)>-1){return true}if(r.indexOf(t.aDec)>-1){return true }if(q.indexOf(t.aDec)>0){return true}if(q.indexOf(t.aDec)===0){q=q.substr(1)}this.setValueParts(r+t.aDec,q); return true}if(p==="-"||p==="+"){if(!t.aNeg){return true}if(r===""&&q.indexOf(t.aNeg)>-1){r=t.aNeg; q=q.substring(1,q.length)}if(r.charAt(0)===t.aNeg){r=r.substring(1,r.length)}else{r=(p==="-")?t.aNeg+r:r }this.setValueParts(r,q);return true}if(p>="0"&&p<="9"){if(t.aNeg&&r===""&&q.indexOf(t.aNeg)>-1){r=t.aNeg; q=q.substring(1,q.length)}this.setValueParts(r+p,q);return true}return true},formatQuick:function(){var w=this.io; var u=this.getBeforeAfterStriped();var t=f(this.value,this.io);var p=t.length;if(t){var r=u[0].split(""); var q;for(q in r){if(!r[q].match("\\d")){r[q]="\\"+r[q]}}var v=new RegExp("^.*?"+r.join(".*?")); var s=t.match(v);if(s){p=s[0].length;if(((p===0&&t.charAt(0)!==w.aNeg)||(p===1&&t.charAt(0)===w.aNeg))&&w.aSign&&w.pSign==="p"){p=this.io.aSign.length+(t.charAt(0)==="-"?1:0) }}else{if(w.aSign&&w.pSign==="s"){p-=w.aSign.length}}}this.that.value=t;this.setPosition(p); this.formatted=true}};c.fn.autoNumeric=function(p){return this.each(function(){var q=c(this); var r=new a(this,p);if(r.io.aForm&&(this.value||r.io.wEmpty!=="empty")){q.autoNumericSet(q.autoNumericGet(p),p) }q.keydown(function(s){r.init(s);if(r.skipAllways(s)){r.processed=true;return true }if(r.processAllways()){r.processed=true;r.formatQuick();s.preventDefault();return false }else{r.formatted=false}return true}).keypress(function(s){var t=r.processed;r.init(s); if(r.skipAllways(s)){return true}if(t){s.preventDefault();return false}if(r.processAllways()||r.processKeypress()){r.formatQuick(); s.preventDefault();return false}else{r.formatted=false}}).keyup(function(t){r.init(t); var s=r.skipAllways(t);r.kdCode=0;delete r.valuePartsBeforePaste;if(s){return true }if(this.value===""){return true}if(!r.formatted){r.formatQuick()}}).focusout(function(v){var w=r.io,u=q.val(),s=u; if(u!==""){u=k(u,w);if(j(u,w)){u=n(u,w.aDec,w.aNeg);u=g(u,w.mDec,w.mRound,w.aPad); u=h(u,w.aDec,w.aNeg)}else{u=""}}var t=f(u,w);if(t!==s){q.val(t)}if(t!==r.inVal){q.change(); delete r.inVal}}).focusin(function(s){r.inVal=q.val()})})};function i(p){if(typeof(p)==="string"){p=p.replace(/\[/g,"\\[").replace(/\]/g,"\\]"); p="#"+p.replace(/(:|\.)/g,"\\$1")}return c(p)}c.autoNumeric={};c.autoNumeric.Strip=function(r,q){var s=e(i(r),q); var p=i(r).val();p=k(p,s);p=n(p,s.aDec,s.aNeg);if(p*1===0){p="0"}return p};c.autoNumeric.Format=function(r,q,p){q+=""; var s=e(i(r),p);q=g(q,s.mDec,s.mRound,s.aPad);q=h(q,s.aDec,s.aNeg);if(!j(q,s)){q=g("",s.mDec,s.mRound,s.aPad) }return f(q,s)};c.fn.autoNumericGet=function(p){return c.fn.autoNumeric.Strip(this,p) };c.fn.autoNumericSet=function(q,p){return this.val(c.fn.autoNumeric.Format(this,q,p)) };c.autoNumeric.defaults={aNum:"0123456789",aSep:",",dGroup:"3",aDec:".",altDec:null,aSign:"",pSign:"p",vMax:"999999999.99",vMin:"0.00",mDec:null,mRound:"S",aPad:true,wEmpty:"empty",aForm:false}; c.fn.autoNumeric.defaults=c.autoNumeric.defaults;c.fn.autoNumeric.Strip=c.autoNumeric.Strip; c.fn.autoNumeric.Format=c.autoNumeric.Format})(jQuery);