/**
 * @fileoverview
 * Special Calculation Functions
 *
 * @author © Copyright Mike Brockington 2004 - 2006 All rights reserved.
 * @version $Revision: 1.4 $
 * This version, Copyright: $Date: 2006/03/04 18:04:16 $
 */

function unknownChoice()
{
    alert("It is not possible to work out what you want to calculate. \nPlease press the appropriate button instead of the Return or Enter keys.");
    return false;  // prevent form submission
}

function allVATFunctions()
{
    if(outputHidden)
    {
    	var strDivID = "outputBlock";
    	toggleHiddenDiv(strDivID);
    	outputHidden = false;
    }
    var strFieldName   = "AmountValue";
    var currencySymbol = document.frmCalc.slctPrefix.value;
    var taxRate        = document.frmCalc.slctRate.value * 1;
    var inputValue     = document.frmCalc.txtAmountValue.value * 1;
    if(isValidNumber(strFieldName) )
    {
        addResults("Original Amount: "+currencySymbol+  inputValue);
        addResults(" Original + Tax: "+currencySymbol+ (inputValue * (taxRate +1) ) );
        addResults("     (Tax Added: "+currencySymbol+ " " + (inputValue * (taxRate) ) +")");
        addResults(" Original - Tax: "+currencySymbol+ (inputValue / (taxRate +1)) );
        addResults("(Tax Subtracted: "+currencySymbol+ " " + (inputValue - (inputValue / (taxRate +1)) ) +")");
        addDecoration("rule");
    }else{
        alert("Please enter a valid number into the 'Amount:' field.");
    }
}

function addVAT()
{
    if(outputHidden)
    {
    	var strDivID = "outputBlock";
    	toggleHiddenDiv(strDivID);
    	outputHidden = false;
    }
    var strFieldName   = "AmountValue";
    var currencySymbol = document.frmCalc.slctPrefix.value;
    var taxRate        = document.frmCalc.slctRate.value * 1;
    var inputValue     = getValue(strFieldName);
    if(isFinite(inputValue) )
    {
        addResults("Original Amount: " + inputValue.toCurrency(currencySymbol) );
        addResults("     Tax Amount:  "+ (inputValue * (taxRate)    ).toCurrency(currencySymbol) );
        addResults("    Total + Tax: " + (inputValue * (taxRate +1) ).toCurrency(currencySymbol) );
        addDecoration("rule");
    }else{
        alert("Please enter a valid number into the 'Amount:' field.");
    }
}

function subtractVAT()
{
    if(outputHidden)
    {
    	var strDivID = "outputBlock";
    	toggleHiddenDiv(strDivID);
    	outputHidden = false;
    }
    var strFieldName   = "AmountValue";
    var currencySymbol = document.frmCalc.slctPrefix.value;
    var taxRate        = document.frmCalc.slctRate.value * 1;
    var inputValue     = getValue(strFieldName);
    if(isValidNumber(strFieldName) )
    {
        addResults("Original Amount: " + inputValue.toCurrency(currencySymbol) );
        addResults("     Tax Amount:  "+ (inputValue - (inputValue / (taxRate +1))).toCurrency(currencySymbol) );
        addResults("    Total - Tax: " + (inputValue / (taxRate +1) ).toCurrency(currencySymbol) );
        addDecoration("rule");
    }else{
        alert("Please enter a valid number into the 'Amount:' field.");
    }
}

function displayPrintOutput()
{
    // alert("named.js:displayPrintOutput()");
    var outHTML = "<H2>Results from this calculator</H2>";
    outHTML    += allResults;
    displayPrintOutputArea(outHTML)
}


// Legacy:

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;
}

function attemptCalculation(objectPassed)
{
    if(objectPassed.formulae.length > 0)
    {
        if(isValidNumber(objectPassed.name) )
        {
            var tempString = "txt" + objectPassed.name;
            addResults(objectPassed.name+" = "+document.forms[0].elements[tempString].value + " " + 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 doCalculation(thisCalculation, strFieldName)
{
    var strToEvaluate = "";
    for(var j=0; j < thisCalculation.length;j++)
    {
        if(thisCalculation[j].indexOf("#") == 0)
        {
            var tempString = thisCalculation[j].substr(1); // remove leading #
            strToEvaluate += "(" + document.forms[0].elements["txt" + tempString].value + "/" + getMultiplier(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(isValid(thisCalculation[j]) )
            {
                // keep on checking
            }else{
                return true;
            }
        }
    }
    return false;
}

