var CalcField=function(){var compTags=/(SELECT|RADIO|CHECKBOX)/,errorC='NA',op=['+','-','*','/','(',')','%',',',':','?','='],retObj={};Math.prec=function(num,pr){pr=parseInt(pr);if(!isNaN(pr)&&!isNaN(parseFloat(num))&&num!=Number.NEGATIVE_INFINITY&&num!=Number.POSITIVE_INFINITY){result=Math.round(num*Math.pow(10,pr));result=result/Math.pow(10,pr);tmp=result.toString().indexOf('.');if(tmp==-1){tmp=pr;result=result+'.';}else{tmp=pr-((result.toString().length)-(tmp+1));}for(var i=0;i<tmp;i++){result+='0';}return result;}return num;};function _addEvents(elem,evtName){if(document.addEventListener){elem.addEventListener(evtName,function(evt){retObj.Calculate(evt)},false);}else if(document.attachEvent){elem.attachEvent("on"+evtName,function(evt){retObj.Calculate(evt)});}else{elem.body["on"+evtName]=function(evt){retObj.Calculate(evt)};}};function _getFormElement(formElem,elemN){var elem=[];for(var i=0;i<formElem.elements.length;i++){if(formElem.elements[i].name==elemN){elem.push(formElem.elements[i]);}}return elem;};function _getValue(formElem,operand){var elem=[],result;if(!isNaN(parseFloat(operand))){return parseFloat(operand);}else{elem=_getFormElement(formElem,operand);if(elem.length!=0){for(var i=0;i<elem.length;i++){if(compTags.test(elem[i].tagName)){if(elem[i].multiple){throw errorC;}result=elem[i][elem[i].selectedIndex].value;}else if(elem[i].tagName=="INPUT"&&compTags.test(elem[i].type.toUpperCase())){if(elem[i].checked){result=elem[i].value;}}else{result=(elem[i].value);}}}else{throw errorC;}}return((result)?result:0);};function _operands(str){var op=[],tokens;str="("+str+")";while(tokens=str.match(/\W\w+(\[\w*\])*\W/)){str=str.replace(/\W\w+(\[\w*\])*/,'');tokens[0]=tokens[0].replace(/[^\w|\[|\]]/g,'');if(typeof Math[tokens[0]]!='function'){op=op.concat(tokens[0]);}}return op;}function _replaceOperands(formElem,str,operands){var pttrn,pttrnM,elemValue,toRep,tmpOp;str="("+str+")";for(var i=0;i<operands.length;i++){tmpOp=operands[i].replace(/\[/g,"\\[");tmpOp=tmpOp.replace(/\]/g,"\\]");pttrn=new RegExp("\\W"+tmpOp+"\\W"),pttrnM=str.match(pttrn);if(pttrnM){elemValue=_getValue(formElem,operands[i]);toRep=pttrnM[0].replace(operands[i],elemValue);str=str.replace(pttrnM[0],toRep);}}return str;}function _calculate(formElem,eq){var eqParts=[],leftExp,rightExp,rightValue;try{eq=eq.replace(/\s/g,'');pos=eq.indexOf('=');if(pos==-1){return;}eqParts[0]=eq.substring(0,pos);eqParts[1]=eq.substring(pos+1);leftExp=_getFormElement(formElem,eqParts[0]);if(leftExp.length==0){return;}rightExp=_replaceOperands(formElem,eqParts[eqParts.length-1],_operands(eqParts[eqParts.length-1]));with(Math){rightValue=eval((rightExp));}if(!isNaN(parseFloat(rightValue))&&rightValue!=Number.NEGATIVE_INFINITY&&rightValue!=Number.POSITIVE_INFINITY){leftExp[0].value=rightValue;return;}else{throw errorC;}}catch(e){leftExp[0].value='';}};retObj.Calculate=function(evt){var elem,formElem;evt=(evt)?evt:(window.event)?window.event:null;if(evt){elem=(evt.target)?evt.target:evt.srcElement;formElem=elem.form;if(formElem&&formElem.equations){for(var i=0;i<formElem.equations.length;i++){if(formElem.equations[i].indexOf(elem.name)!=-1){_calculate(formElem,formElem.equations[i]);}}}}};retObj.addEquation=function(formName,eq){var $E,formElem,me=this;formElem=(document.getElementById(formName))?document.getElementById(formName):(document.getElementsByName(formName).length>0)?document.getElementsByName(formName)[0]:null;if(formElem&&formElem.tagName=='FORM'){if(formElem.equations==null||formElem.equations==undefined){formElem.equations=new Array();}formElem.equations.push(eq);}};_addEvents(document,"click");_addEvents(document,"keyup");_addEvents(document,"change");return retObj;}();
