/*Linear Algebra Functions &copy;Copyright Mike Brockington 2004 - 2007 All rights reserved. Build Number:16:This version, Copyright: 2006/03/04*/
/*Attempt calculation, with text formatted output Function*/
function calcResult(){if(outputHidden){var strDivID="outputBlock";toggleHiddenDiv(strDivID);outputHidden=false;}if(formulaArray){for(i=0;i<formulaArray.length;i++){attemptCalculation(formulaArray[i]);}addDecoration("rule");document.frmCalc.elements[0].focus();}else{alert("Sorry, No Formulae defined in this document.");}return false;}/*Attempt calculation, with HTML formatted output Function*/
function calcResult2(){if(outputHidden){var strDivID="outputBlock";toggleHiddenDiv(strDivID);outputHidden=false;}if(formulaArray){recordResultText("Attempting New Calculation");for(var i=0;i<formulaArray.length;i++){attemptCalculation2(formulaArray[i]);}for(var i=0;i<formulaArray.length;i++){attemptCalculationAgain(formulaArray[i]);}for(var i=0;i<formulaArray.length;i++){attemptCalculationAgain(formulaArray[i]);}document.frmCalc.elements[0].focus();}else{alert("Sorry, No Formulae defined in this document.");logMsg("Sorry, No Formulae defined in this document.", params={level:"error"});}return false;}function attemptCalculation(objectPassed){if(objectPassed.formulae.length > 0){if(isValidNumber(objectPassed.name) ){var inputValue=getValue(objectPassed.name);addResults(objectPassed.name+"="+inputValue+ " " + getUnits(objectPassed.name) + " (Input)");}else{var j=0;var boolTryAgain;do{boolTryAgain=tryCalculation(objectPassed.formulae[j]);j++;}while(j<objectPassed.formulae.length && boolTryAgain)if(boolTryAgain){addResults("Not enough info to calculate "+objectPassed.name);}else{addResults(objectPassed.name+"="+doCalculation(objectPassed.formulae[(j-1)], objectPassed.name) +" " + getUnits(objectPassed.name) + " (Calculated)");}}}}function attemptCalculation2(objectPassed){if(objectPassed.formulae.length > 0){if(isValidNumber(objectPassed.name) ){var inputValue=getValue(objectPassed.name);setCalcValue(objectPassed.name, inputValue);recordResultText(objectPassed.name+"="+inputValue+ " " + getUnits(objectPassed.name) + " (Input)");}else{var j=0;var boolTryAgain;do{boolTryAgain=tryCalculation(objectPassed.formulae[j]);j++;}while(j<objectPassed.formulae.length && boolTryAgain)if(boolTryAgain){logMsg("Not enough info to calculate "+objectPassed.name, params={level:"info"});}else{var resultValue=doCalculation(objectPassed.formulae[(j-1)], objectPassed.name);setCalcValue(objectPassed.name, resultValue);recordResultText(objectPassed.name+"="+resultValue +" " + getUnits(objectPassed.name) + " (Calculated)");}}}}function attemptCalculationAgain(objectPassed){if(objectPassed.formulae.length > 0){if(objectPassed.value ){return true;}else{var j=0;var boolTryAgain;do{boolTryAgain=tryCalculationAgain(objectPassed, objectPassed.formulae[j]);j++;}while(j<objectPassed.formulae.length && boolTryAgain)if(boolTryAgain){logMsg("Still not enough info to calculate "+objectPassed.name, params={level:"warn"});}else{var resultValue=doCalculationAgain(objectPassed.formulae[(j-1)], objectPassed);setCalcValue(objectPassed.name, resultValue);recordResultText(objectPassed.name+"="+resultValue +" " + getUnits(objectPassed.name) + " (Calculated)");}}}}function doCalculation(thisCalculation, strFieldName){var strToEvaluate="";for(var j=0;j < thisCalculation.length;j++){if((thisCalculation[j].indexOf("#")==0) || (thisCalculation[j].indexOf("!") == 0) ){var tempString=thisCalculation[j].substr(1);if(thisCalculation[j].indexOf("#")==0){var inputValue=getValue(tempString);strToEvaluate+="(" +inputValue + "/" + getMultiplier(tempString) + ")";}else{strToEvaluate+=" " +getConstant(tempString) + " ";}}else{strToEvaluate+=thisCalculation[j];}}return eval(strToEvaluate+"*" + getMultiplier(strFieldName));}/*Use calculated values in addition to user-provided values*/
function doCalculationAgain(thisCalculation, objCalc){var strToEvaluate="";var strFieldName=objCalc.name;for(var j=0;j < thisCalculation.length;j++){if((thisCalculation[j].indexOf("#")==0) || (thisCalculation[j].indexOf("!") == 0) ){var tempString=thisCalculation[j].substr(1);if(thisCalculation[j].indexOf("#")==0){var inputValue="";if(calcHasValue(tempString) ){inputValue=getCalcValue(tempString);}else{inputValue=getValue(tempString);}strToEvaluate+="(" +inputValue + "/" + getMultiplier(tempString) + ")";}else{strToEvaluate+=" " +getConstant(tempString) + " ";}}else{strToEvaluate+=thisCalculation[j];}}return eval(strToEvaluate+"*" + getMultiplier(strFieldName));}function tryCalculation(thisCalculation){for(var j=0;j < thisCalculation.length;j++){if(thisCalculation[j].indexOf("#")==0){if(isValidNumber(thisCalculation[j].slice(1) ) ){}else{return true;}}}return false;}/*See if calculated value has been stored already*/
function calcHasValue(thisFieldName){for(i=0;i<formulaArray.length;i++){if(formulaArray[i].name==thisFieldName){return formulaArray[i].value;}}logMsg("calcHasValue: No Match for:"+thisFieldName, params={level:"error"});return false;}/*Retrieve calculated value*/
function getCalcValue(thisFieldName){for(i=0;i<formulaArray.length;i++){if(formulaArray[i].name==thisFieldName){if(formulaArray[i].value ){return formulaArray[i].value;}}}return false;}/*Record calculated value*/
function setCalcValue(thisFieldName, thisValue){var i=0;for(i=0;i<formulaArray.length;i++){if(formulaArray[i].name==thisFieldName){formulaArray[i].value=thisValue;return true;}}logMsg("setCalcValue: No Match for:"+thisFieldName, params={level:"error"});return false;}/*Use calculated values in addition to user-provided values*/
function tryCalculationAgain(thisCalcSet, thisCalculation){for(var j=0;j < thisCalculation.length;j++){if(thisCalculation[j].indexOf("#")==0){var thisFieldName=thisCalculation[j].slice(1);if(calcHasValue(thisFieldName) || isValidNumber(thisFieldName ) ){}else{logMsg("tryCalculationAgain: No Match for:"+thisFieldName, params={level:"error"});return true;}}}return false;}function displayPrintOutput(){var outHTML="<H2>Results from this calculator</H2>";outHTML+=allResults;displayPrintOutputArea(outHTML);}
