var CalcField=function(){var compTags=/(RADIO|CHECKBOX)/,errorC='NA',retObj={},ua=navigator.userAgent;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&&pr>0){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 sendEvent(e){if(ua.match(/MSIE\s([^;]*)/)){e.fireEvent("onclick");}else{var evt=document.createEvent("MouseEvents");evt.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);e.dispatchEvent(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 e=[],r;if(!isNaN(parseFloat(operand))){return parseFloat(operand);}else{e=_getFormElement(formElem,operand);if(e.length!=0){for(var i=0;i<e.length;i++){if(e[i].tagName.toUpperCase()=="SELECT"){if(e[i].multiple){throw errorC;}else{r=(e[i][e[i].selectedIndex].getAttribute('value',0)!=null&&e[i][e[i].selectedIndex].getAttribute('value',0)!="")?e[i][e[i].selectedIndex].value:e[i][e[i].selectedIndex].text;}}else if((e[i].tagName=="INPUT"&&compTags.test(e[i].type.toUpperCase()))||compTags.test(e[i].tagName.toUpperCase())){if(e[i].checked){r=e[i].value;}}else{r=(e[i].value);}}}else{throw errorC;}}return((r)?r: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;sendEvent(leftExp[0]);}else{throw errorC;}}catch(e){leftExp[0].value='';sendEvent(leftExp[0]);}};retObj.Calculate=function(evt){var elem,formElem,str="[\\+|\\-|\\*|\\/|\(|\\)|%|,|:|\\?|=]+",reg;evt=(evt)?evt:(window.event)?window.event:null;if(evt){elem=(evt.target)?evt.target:evt.srcElement;var tname=elem.tagName.toLowerCase();if(tname=='button'||tname=='img'||(elem.type&&/(button|submit)/i.test(elem.type.toLowerCase()))){return;}reg=(elem.name)?(new RegExp(str+elem.name.replace(/\[/g,'\[').replace(/\]/g,'\]')+str)):(new RegExp(str+elem.name+str));formElem=elem.form;if(formElem&&formElem.equations){for(var i=0;i<formElem.equations.length;i++){tmp=formElem.equations[i]+')';if(reg.test(tmp)){_calculate(formElem,formElem.equations[i]);}}}}};retObj.CalculateEq=function(formName,eq){formElem=(document.getElementById(formName))?document.getElementById(formName):(document.getElementsByName(formName).length>0)?document.getElementsByName(formName)[0]:null;_calculate(formElem,eq);};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;}();
