function MoneyInputRegister() { var inputs=$$('input.MoneyInput'); for(i=0; i 0) { this.ZeroValue = "0."; for(var i = this.decimalAccuracy; i > 0; i--) { this.ZeroValue = this.ZeroValue + "0"; } } else { this.ZeroValue = "0"; } //ShowSign this.showSign = $(input).readAttribute('show-sign'); if(!this.showSign) { this.showSign = this.defaultShowSign; } this.displaySign = (this.showSign == 'yes'); //ShowBrackets this.showBrackets = $(input).readAttribute('show-brackets'); if(!this.showBrackets) { this.showBrackets = this.defaultShowBrackets; } this.displayBrackets = (this.showBrackets == 'yes'); //default value is 0 var val = $(input).readAttribute('value'); if(!val) { val = 0;}; this.input.value= ""; //read min, max Value this.minValue=$(input).readAttribute('min'); this.maxValue=$(input).readAttribute('max'); if (this.minValue!=null){ this.minValue=Number(this.minValue); } else { this.minValue=Math.pow(-10, 31); } if (this.maxValue!=null) { this.maxValue=Number(this.maxValue); } else { this.maxValue=Math.pow(10, 31); } //create RegExps with delimiters this.PointRegexp = new RegExp("[" + this.decimalPoint + "]"); this.NotValidInputRegexp = new RegExp("[^0-9-" + this.decimalPoint + ' ' + "\t)(+]"); this.IgnoredRegexp = new RegExp("[^0-9" + this.decimalPoint + "(+-]", "g"); this.DigitRegexp.compile(this.DigitRegexp); this.NotDigitRegexp.compile(this.NotDigitRegexp); this.PosDigitRegexp.compile(this.PosDigitRegexp); this.NotCanonicalRegexp.compile(this.NotCanonicalRegexp); this.PointRegexp.compile(this.PointRegexp); this.NotValidInputRegexp.compile(this.NotValidInputRegexp); this.sign = '+'; this.ReadInputValue(); this.DisplayInput(); this.visibility=this.input.readAttribute('visibility'); if(this.visibility=='ro') { this.updateSpan(); this.span.addClassName('MoneyInput_ro'); // this.input.writeAttribute('disabled', 'disabled'); } else if(this.visibility=='vo') { this.updateSpan(); } else if(this.visibility=='link') { this.span.writeAttribute('visibility', 'link'); this.updateSpan(); if(this.OnClick) { $(this.span).observe('click', this.OnClick.bind(this)); } } else { this.visibility='yes'; $(input).observe('focus', this.OnFocus.bind(this)); $(input).observe('blur', this.OnBlur.bind(this)); if(Prototype.Browser.IE) { $(input).observe('propertychange', this.OnInput.bind(this)); $(input).observe('keyup', this.OnInput.bind(this)); $(input).observe('keydown', this.OnKeyDown.bind(this)); $(input).observe('keypress', this.OnKeyPress.bind(this)); } else if (Prototype.Browser.WebKit) { input.observe('input', this.OnInput.bind(this)); input.observe('keydown', this.OnKeyDown.bind(this)); input.observe('keypress', this.OnKeyPress.bind(this)); } else { $(input).observe('input', this.OnInput.bind(this)); //$(input).observe('keypress', this.OnKey.bind(this)); input.observe('keydown', this.OnKeyDown.bind(this)); input.observe('keypress', this.OnKeyPress.bind(this)); }; // input.observe('mouseover', this.OnInput.bind(this)); } this.lastReported=this.input.value; }, updateSpan: function() { if(this.exponentForm=="yes") { var num=new Number(this.input.value); this.span.update(num.toExponential(this.decimalAccuracy)); } else { this.span.update(this.input.value); } this.parent.replaceChild(this.span, this.input); }, //get string without invalid chars. if start, sign returned, else res could contain leading zeroes GetValidNum: function(inStr, start) { var res = inStr.replace(this.IgnoredRegexp, ''); res = res.replace(this.PointRegexp, '.'); var sign; if(start && (inStr.length > 0)) { if((inStr.charAt(0)=='-') || (inStr.charAt(0)=='(')) { sign = '-'; } else if (inStr.charAt(0)=='+') { sign='+'; } else { sign ='n'; //sign was not set } } else { sign ='n'; } res = res.replace(this.NotCanonicalRegexp, ''); if(start) { var firstPos = res.search(this.PosDigitRegexp); var firstDelim = res.indexOf('.'); if(firstDelim != -1) { if((firstPos > firstDelim) || (firstPos == -1)) { //correcting begin position of result firstPos = firstDelim; } } else if (firstPos == -1) { //no significant simbols are found return sign; }; return sign + res.substring(firstPos); } else { return res; //nothing to do for second part } }, ReadInputValue: function() { if(this.hasFocus) { this.Position = getSelectionEnd(this.input); } else { this.Position = this.input.value.length; } this.value = this.input.value; }, // Canonical form of Value(ddddddd.ddd) is stored in this.canonicalValue. Sign of canonical // value is stored in this.canonicalSign. Caret position inside canonical value is stored in // this.Position. Function OutCanonical is used for display canonical value of control // .000000 value is NaN value ConstructCanonical: function() { if(this.value == '0') { this.value = '0.0'; } var start = this.GetValidNum(this.value.substring(0, this.Position), true); switch (start.charAt(0)) { case '-' : this.canonicalSign = '-'; break; case '+' : this.canonicalSign = '+'; break; default: this.canonicalSign = this.sign; } var end = this.GetValidNum(this.value.substring(this.Position), false) var res = start.substring(1) + end; this.canonicalPos = start.length - 1; // 1 is sign length if((res.length == 0) || (res.charAt(0) == '.')) { var ind = this.value.indexOf('.'); if((ind <= 0) || (this.value.charAt(ind - 1) != '0')) { var digPos=res.search(this.PosDigitRegexp); if(digPos == -1) { this.isNaNValue = 'yes'; this.canonicalSign = '+'; this.sign = '+'; return; } } res = '0' + res; this.canonicalPos++; } this.isNaNValue = 'no'; var firstDelim = res.indexOf('.'); if(firstDelim > 0) { var secondDelim = res.indexOf('.', firstDelim + 1); if(secondDelim > 0) { res = res.substring(0, secondDelim); } } else { res += '.'; firstDelim = res.length - 1; } //Fill tail for(var i = this.decimalAccuracy - (res.length - firstDelim - 1); i > 0; i--) { res += '0'; } res = res.substring(0, firstDelim + 1 + this.decimalAccuracy); if(this.canonicalPos > res.length) { this.canonicalPos = res.length; } this.canonicalValue = res; if(this.canonicalValue == this.ZeroValue) { this.canonicalSign = '+'; } }, //================ Out Canonical value OutCanonical: function() { if(this.isNaNValue == 'yes') { this.input.value = ""; this.span.update(""); this.input.removeClassName('MoneyInput_Negative'); this.span.removeClassName('MoneyInput_Negative'); return; } var pos = this.canonicalPos; var delimShift = 1; this.oldValue=this.input.value; var delimiterPos = this.canonicalValue.indexOf("."); if(delimiterPos == -1) { delimiterPos = this.canonicalValue.length; delimShift = 0; } var intPart = this.canonicalValue.substring(0, delimiterPos); if(intPart == "") { intPart = "0"; } var res = ""; while(intPart.length > 3) { res = this.thousandDelimiter + intPart.substring(intPart.length - 3, intPart.length) + res; intPart = intPart.substring(0, intPart.length - 3); if(intPart.length < this.canonicalPos) { pos++; } } res = intPart + res; if(this.decimalAccuracy > 0) { res += this.decimalPoint + this.canonicalValue.substring(delimiterPos + 1, delimiterPos + 1 + this.decimalAccuracy); for(var i = this.decimalAccuracy - (this.canonicalValue.length - delimiterPos - delimShift); i > 0; i--) { res += '0'; } } this.sign = this.canonicalSign; if(this.sign == '-') { this.input.addClassName('MoneyInput_Negative'); this.span.addClassName('MoneyInput_Negative'); if(this.displaySign) { res = '-' + res; pos++; } if(this.displayBrackets) { res = '(' + res + ')'; pos++; } } else { this.input.removeClassName('MoneyInput_Negative'); this.span.removeClassName('MoneyInput_Negative'); } this.oldValue=res; this.input.value=res; if(this.hasFocus) { setCaretPosition(this.input, pos); } if(this.exponentForm=="yes") { var num=new Number(this.canonicalValue); var str=num.toExponential(this.decimalAccuracy); this.span.update(str); this.input.value=str; } else this.span.update(this.input.value); }, DisplayInput: function() { this.ConstructCanonical(); this.OutCanonical(); HideTip(); }, //============= Event handlers ================================ OnKey : function(evt) { if(evt.keyCode==27) { //key Esc evt.stop(); return false; } var res = this.OnKeyDown(evt); if(res) { return this.OnKeyPress(evt); } return false; }, // process special characters: del, backspace, arrows OnKeyDown: function(evt) { var PositionTemp = getSelectionStart(this.input); if (evt.altKey || evt.ctrlKey){ return; } var key= evt.keyCode; var oldValueTemp=this.oldValue; if(key==37) { // 'left arrow' HideTip(); } if(key==39) { HideTip(); } var startPos = getSelectionStart(this.input); var endPos = getSelectionEnd(this.input); if (key == 8) { // 'backspace' if (startPos == 0 || startPos != endPos) { this.value = this.input.value.substring(0, startPos) + this.input.value.substring(endPos); this.Position = startPos; } else if(startPos == 1 || this.DigitRegexp.test(this.input.value.charAt(startPos - 1))) { this.value = this.input.value.substring(0, startPos - 1) + this.input.value.substring(startPos); this.Position = startPos - 1; } else { this.value = this.input.value.substring(0, startPos - 2) + this.input.value.substring(startPos - 1); this.Position = startPos - 2; }; this.DisplayInput(); this.oldValue = this.input.value; evt.stop(); return false; } else if (key == 46) { // delete if (startPos != endPos || endPos == this.input.value.length) { this.value = this.input.value.substring(0, startPos) + this.input.value.substring(endPos); this.Position = startPos; } else if(this.DigitRegexp.test(this.input.value.charAt(endPos))) { this.value = this.input.value.substring(0, startPos) + this.input.value.substring(endPos + 1); this.Position = startPos; } else { this.value = this.input.value.substring(0, startPos +1) + this.input.value.substring(endPos + 2); this.Position = startPos + 1; }; this.DisplayInput(); this.oldValue = this.input.value; evt.stop(); return false; } if(key!=38 && key!=40) { // key up && down return true; } var curPos=this.input.value.length-getSelectionEnd(this.input); if(key==38) { if(this.input.value.search(this.PosDigitRegexp) == -1) { this.sign = '+'; } if(this.sign != '-') { this.abcIncrement(endPos); } else { this.abcDecrement(endPos); } } else if(key==40) { if(this.input.value.search(this.PosDigitRegexp) == -1) { this.sign = '-'; } if(this.sign == '-') { this.abcIncrement(endPos); } else { this.abcDecrement(endPos); } } HideTip(); this.value = this.sign + this.value; var digPos=this.value.search(this.PosDigitRegexp); if(digPos == -1) { this.Position = this.value.length; } else if (digPos > this.value.length-curPos){ this.Position = digPos; } else { this.Position = this.value.length - curPos; } this.DisplayInput(); //check min max if ( (this.input.value!="") &&(( this.canonicalSign=="-" && (-Number(this.canonicalValue))this.maxValue) ))){ this.input.value = oldValueTemp; this.value = oldValueTemp; this.NotInRange(); this.ReadInputValue(); this.ConstructCanonical(); this.OutCanonical(); evt.stop; setCaretPosition(this.input, PositionTemp); return false; } this.oldValue = this.input.value; evt.stop(); return false; }, //process not special characters: + - delimiters 0-9 OnKeyPress: function(evt) { if(evt.charCode==0) return; var PositionTemp = getSelectionStart(this.input); if (evt.altKey || evt.ctrlKey) { return; } if(evt.which == 0) { return false; } var charKey; if(evt.which != undefined && evt.which != 0) { charKey=String.fromCharCode(evt.which); } else { charKey=String.fromCharCode(evt.keyCode); } var startPos = getSelectionStart(this.input); var endPos = getSelectionEnd(this.input); //check min max var InputValueCandidate = this.input.value.substring(0, startPos) + charKey + this.input.value.substring(endPos); while (InputValueCandidate.search(this.thousandDelimiter) != -1) { InputValueCandidate = InputValueCandidate.replace(this.thousandDelimiter, ""); } InputValueCandidate = InputValueCandidate.replace(this.decimalPoint, "."); while (InputValueCandidate.search("-") != -1) { InputValueCandidate = InputValueCandidate.replace("-", ""); } if (charKey=='+') { InputValueCandidate = InputValueCandidate.replace("+", ""); } if (this.canonicalSign == "-") { InputValueCandidate = "-"+InputValueCandidate; } if((charKey=='-') && ( ((-Number(InputValueCandidate))this.maxValue) )){ this.NotInRange(); evt.stop(); setCaretPosition(this.input, PositionTemp); return false; } if((charKey=='+') && ((-Number(InputValueCandidate))>this.maxValue)){ this.NotInRange(); evt.stop(); setCaretPosition(this.input, PositionTemp); return false; } if((charKey=='-') || (charKey=='+')) { //check min max if ( charKey=='-' && startPos==0 && endPos==this.input.value.length && this.minValue<0) { this.input.value = "-"; this.sign="-"; evt.stop(); return false; } if (this.input.value == "") { if (this.minValue >= 0) { this.NotInRange(); evt.stop(); return false; } this.input.value = "-"; this.sign="-"; evt.stop(); return false; } else { if (this.input.value == "-") { this.input.value = ""; this.sign="+"; evt.stop(); return false; } } this.ReadInputValue(); this.ConstructCanonical(); if(this.canonicalSign == '-' || charKey=='+' || (this.canonicalValue == this.ZeroValue)) { this.canonicalSign = '+'; } else { if (this.minValue<0){ this.canonicalSign = '-'; } else{ this.OutCanonical(); this.NotInRange(); evt.stop(); setCaretPosition(this.input, PositionTemp); return false; } } this.OutCanonical(); HideTip(); evt.stop(); return false; } if(charKey == "0" || charKey == this.decimalPoint){ if (this.input.value=="-"){ this.sign="-"; this.input.value="-0"+this.decimalPoint; for(var i=0; i < this.decimalAccuracy; i++) { this.input.value += '0'; } evt.stop(); if (charKey == "0") { setCaretPosition(this.input, 2); } else{ setCaretPosition(this.input, 3); } return false; } var t="-0"+this.decimalPoint; for(var i=0; i < this.decimalAccuracy; i++) { t += '0'; } if (this.input.value==t && charKey == this.decimalPoint){ evt.stop(); setCaretPosition(this.input, 3); return false; } } if(charKey == "0" && this.input.value==t && startPos == 2){ evt.stop(); return false; } //work when we want input -0.00001, -0.0001, -0.001 and so on, we change Caret Position if(charKey == "0" && this.input.value==t && startPos == 3){ evt.stop(); setCaretPosition(this.input, 4); return false; } if(charKey == "0" && this.input.value==t && startPos == 4){ evt.stop(); setCaretPosition(this.input, 5); return false; } if(charKey == "0" && this.input.value==t && startPos == 5){ evt.stop(); setCaretPosition(this.input, 6); return false; } if(charKey == this.decimalPoint) { // 'this.decimalPoint' if (this.input.value == ""){ this.input.value="0"+this.decimalPoint; for(var i=0; i < this.decimalAccuracy; i++) { this.input.value += '0'; } evt.stop(); setCaretPosition(this.input, 2); return false; } var startVal = this.input.value.substring(0, startPos); var endVal = this.input.value.substring(endPos); var clearStart = startVal.replace(this.NotDigitRegexp, ''); var clearEnd = endVal.replace(this.NotDigitRegexp, ''); //check min max InputValueCandidate = clearStart + '.' + clearEnd; if ( ((this.sign=="-") && (Number(InputValueCandidate)>this.minValue)) || (((this.sign=="+") && (Number(InputValueCandidate)>this.maxValue))) ) { this.NotInRange(); setCaretPosition(this.input, PositionTemp); evt.stop(); return false; } this.canonicalValue = clearStart + '.' + clearEnd; this.canonicalPos = clearStart.length + 1; this.OutCanonical(); HideTip(); evt.stop(); return false; } if(charKey == ' ') { this.value = this.input.value; this.value = this.value.substring(0, startPos) + "000" + this.value.substring(endPos); this.Position = endPos + 3; this.DisplayInput(); HideTip(); evt.stop(); return false; } //check min max if ( Number(InputValueCandidate) < this.minValue) { this.NotInRange(); evt.stop(); setCaretPosition(this.input, PositionTemp); return false; } if (Number(InputValueCandidate) > this.maxValue) { this.NotInRange(); evt.stop(); setCaretPosition(this.input, PositionTemp); return false; } if (!this.ValidateChar(charKey)) { evt.stop(); return false; } else { this.value= this.input.value.substring(0, startPos) + charKey + this.input.value.substring(endPos); this.Position = startPos + 1; } this.DisplayInput(); evt.stop(); new AEvent("INPUT", {}, this); return false; }, ValidateChar : function(charVal) { if(!this.NotValidInputRegexp.test(charVal) ) { return true; } this.raiseError(); return false; }, ToCanonical: function(numStr) { var res = numStr.replace(this.PointRegexp, '.'); res = res.replace(this.NotCanonicalRegexp, ''); var delimiterPos = res.indexOf('.'); if(delimiterPos == -1) { res = this.AlignCanonical(res); return res; }; res = res.substring(0, delimiterPos + 1) + res.substring(delimiterPos + 1).replace(this.PointRegexp, ''); res = this.AlignCanonical(res); return res; }, OnFocus: function(evt) { this.hasFocus=true; HideTip(); return true; }, OnBlur: function(evt) { this.hasFocus=false; this.ReadInputValue(); this.DisplayInput(); HideTip(); if(this.lastReported!=this.input.value) { new AEvent("CHANGE", {}, this); this.lastReported=this.input.value; } }, OnInput: function(evt) { var oldValueTemp=this.oldValue;//Igor var t="-0"+this.decimalPoint; for(var i=0; i < this.decimalAccuracy; i++) { t += '0'; } if (this.input.value == t) { evt.stop(); return false; } if (this.input.value == this.oldValue){ return; } var oldStartPos; var oldEndPos; if(Prototype.Browser.WebKit) { oldStartPos = getSelectionStart(this.input); oldEndPos = getSelectionEnd(this.input); } if (this.input.value.search(this.NotValidInputRegexp) != -1) { this.raiseError(); this.input.value = this.oldValue; } this.ReadInputValue(); this.DisplayInput(); HideTip(); //check min max if (( this.canonicalSign=="-" && (-Number(this.canonicalValue))this.maxValue) )){ if (this.input.value!="") { this.input.value = oldValueTemp; } else{ this.input.value = ""; } //Show tip error this.aTip=this.input.readAttribute('title'); ShowTip(this.input, this.aTip); this.NotInRange(); this.oldValue = oldValueTemp; this.value = oldValueTemp; evt.stop; return false; } if(Prototype.Browser.WebKit) { var newValue = this.input.value; this.newSelectionStart=0; this.newSelectionEnd=newValue.length; // check that new value has same begining and tail if( ( (oldStartPos + this.oldValue.length - oldEndPos) <= newValue.length) && (this.oldValue.substring(0,oldStartPos) == newValue.substring(0,oldStartPos) ) && (this.oldValue.substring(oldEndPos) == newValue.substring(oldEndPos + newValue.length - this.oldValue.length))) { this.newSelectionStart=oldStartPos; this.newSelectionEnd=oldEndPos + newValue.length - this.oldValue.length; } else { //calculate selection in hard cases var i; var j; for(i = 0; i < newValue.length && i < this.oldValue.length; i++) { if (newValue.charAt(i) != this.oldValue.charAt(i)) { break; } } this.newSelectionStart = i; for(i=newValue.length,j=this.oldValue.length; i > this.newSelectionStart && j > this.newSelectionStart; i--,j--) { } this.newSelectionEnd = i; } this.oldValue = this.input.value; setSelectionRange(this.input, this.newSelectionStart, this.newSelectionEnd); } else { this.oldValue = this.input.value; } new AEvent("INPUT", {}, this); return true; }, SetValue: function(value) { if (typeof value === "undefined" || null === value || value.IsNull()) { this.isNaNValue = 'yes'; this.canonicalSign = '+'; this.sign = '+'; this.OutCanonical(); return; } else { this.isNaNValue = 'no'; dVal=value.Value(); } if(dVal < 0) { this.canonicalSign = '-'; dVal = -dVal; } else { this.canonicalSign = '+'; } Number(dVal).toFixed(this.decimalAccuracy); var sVal = dVal.toString(); var ind = sVal.indexOf('e'); if(ind != -1) { var exponent = sVal.substring(ind + 1); this.canonicalValue=sVal.substring(0,1) + sVal.substring(2, ind); if(exponent > 0 ) { for(var i = exponent - this.canonicalValue.length; i >= 0; i--) { this.canonicalValue += "0"; } this.canonicalValue = this.canonicalValue.substring(0, exponent) + '.' + this.canonicalValue.substring(exponent); } else { for(var i = exponent; i < -1; i++) { this.canonicalValue = "0" + this.canonicalValue; } this.canonicalValue = "0" + '.' + this.canonicalValue; } } else { this.canonicalValue = sVal; } this.OutCanonical(); this.lastReported=this.input.value; }, SetAttribute: function(sName, sValue) { if(sName=='visibility' && sValue!=this.visibility) { if((this.visibility=='yes') && (sValue=='vo' || sValue=='link' || sValue=='ro')) { this.updateSpan(); } else if((sValue=='yes') && (this.visibility=='vo' || this.visibility=='link' || this.visibility=='ro')) { this.parent.replaceChild(this.input, this.span); } if(sValue=='ro') { this.span.addClassName('MoneyInput_ro'); } else if(this.visibility='ro') { this.span.removeClassName('MoneyInput_ro'); } if(sValue=='link') { $(this.span).observe('click', this.OnClick.bind(this)); } this.visibility=sValue; } else if(sName=='show-brackets') { this.showBrackets=sValue; } else if(sName=='show-sign') { this.showSign=sValue; } this.input.writeAttribute(sName, sValue); this.span.writeAttribute(sName, sValue); }, SetTabOrder: function(nTabBase) { this.input.writeAttribute('tabindex', nTabBase); return ++nTabBase; }, Value: function() { this.ReadInputValue(); this.ConstructCanonical(); if(this.isNaNValue=='yes') { return double.NaN; } else if(this.canonicalSign == '-') { return decimal('-' + this.canonicalValue); } else { return decimal(this.canonicalValue); } }, ID: function() { return this.ID_; }, abcDecrement: function(pos) { var delimPos = this.input.value.search(this.PointRegexp); if(pos == delimPos + 1) {pos++;}; var digPos=this.input.value.search(this.PosDigitRegexp); if(digPos == -1) { this.value = "0" this.Position = 0; this.ConstructCanonical(); return; } if(digPos >= pos) { return; } var res=this.input.value.substring(pos); for(; pos>0; --pos) { if(!this.DigitRegexp.test(this.input.value.charAt(pos - 1))) { res = this.input.value.charAt(pos - 1) + res; continue; } if(this.input.value.charAt(pos - 1) == 0) { res = '9' + res; continue; }; res = this.input.value.substring(0, pos - 1) + (Number(this.input.value.charAt(pos - 1)) - 1) + res; break; } if(pos == 0) { res = '1' + res; } this.value = res; }, abcIncrement: function(pos) { var delimPos = this.input.value.search(this.PointRegexp); if(pos == delimPos + 1) {pos++;}; var res=this.input.value.substring(pos); for(; pos>0; --pos) { if(!this.DigitRegexp.test(this.input.value.charAt(pos - 1))) { res = this.input.value.charAt(pos - 1) + res; continue; } if(this.input.value.charAt(pos - 1) == 9) { res = '0' + res; continue; }; res = this.input.value.substring(0, pos - 1) + (Number(this.input.value.charAt(pos - 1)) + 1) + res; break; } if(pos == 0) { res = '1' + res; } else { } this.value = res; }, raiseError: function() { var tip=this.input.readAttribute('tip'); if(tip) ShowTip(this.input, tip); if(this.blinkAnimation) { this.blinkAnimation.stop(); this.blinkAnimation=undefined; } var origBG=this.input.getStyle('backgroundColor'); this.input.addClassName('MoneyInput_error'); var errBG=this.input.getStyle('backgroundColor'); this.blinkAnimation = new Animation(this.input, 6); this.blinkAnimation.addAnimation('backgroundColor', getHexRGBColor(errBG), getHexRGBColor(origBG)); this.blinkAnimation.run(); var self=this; this.blinkAnimation.onfinish = function() { self.clearError(); } }, clearError: function() { if(this.blinkAnimation) this.blinkAnimation.stop(); this.input.removeClassName('MoneyInput_error'); this.input.setStyle({'backgroundColor': ''}); this.blinkAnimation=undefined; }, NotInRange: function() { this.aTip=this.input.readAttribute('title'); ShowTip(this.input, this.aTip); if(this.blinkAnimation) { this.blinkAnimation.stop(); this.blinkAnimation=undefined; } var origBG=this.input.getStyle('backgroundColor'); this.input.addClassName('MoneyInput_error'); var errBG=this.input.getStyle('backgroundColor'); this.blinkAnimation = new Animation(this.input, 6); this.blinkAnimation.addAnimation('backgroundColor', getHexRGBColor(errBG), getHexRGBColor(origBG)); this.blinkAnimation.run(); var self=this; this.blinkAnimation.onfinish = function() { self.clearError(); } } }); var DoubleInput = Class.create(MoneyInput, { initialize: function($super, input) { $super(input); }, Value: function() { this.ReadInputValue(); if(this.exponentForm!="yes") this.ConstructCanonical(); if(this.isNaNValue=='yes') { return double.NaN; } else if(this.canonicalSign == '-') { return double('-' + this.canonicalValue); } else { return double(this.canonicalValue); } } }); //Static members MoneyInput.prototype.DigitRegexp = new RegExp("[0-9]"); MoneyInput.prototype.NotDigitRegexp = new RegExp("[^0-9]", "g"); MoneyInput.prototype.PosDigitRegexp = new RegExp("[1-9]"); MoneyInput.prototype.NotCanonicalRegexp = new RegExp("[^0-9.]", "g"); MoneyInput.prototype.ForbiddenDelimiters = "[]()-*^"; MoneyInput.prototype.defaultThousandDelimiter = " "; MoneyInput.prototype.defaultDecimalPoint = "."; MoneyInput.prototype.defaultDecimalAccuracy = 2; MoneyInput.prototype.defaultShowSign = "yes"; MoneyInput.prototype.defaultShowBrackets = "no";