      function UpdateCalculation()
      {
        var fPayment = 0;

        if( CheckUserFields() )
        {
          var fDivFactor = 2600.0;
          var fBalance   = (199.00 + FetchValue('paycal_price')) - FetchValue('paycal_tradein');
          var fRate      = FetchValue('paycal_rate') / fDivFactor;
          var fTaxes     = FetchValue('paycal_taxes');
          var fLuxThresh = 0.00;
          var fLuxRate   = 0.0;
          var iTerm      = (FetchValue('paycal_term')/12)*26;
          if( fLuxThresh>0 && fLuxRate>0 && fBalance>=fLuxThresh ) fTaxes += fLuxRate;
          if( fTaxes>0 ) fBalance += fBalance*(fTaxes/100.0);

          fBalance -= FetchValue('paycal_cashdown');

          if( fRate==0 )
          {
            fPayment = fBalance / iTerm;
          }
          else
          {
            var fVal = Math.pow(1+fRate, iTerm);
            fPayment = fBalance * (fRate*fVal) / (fVal - 1);
          }
          SetValue('paycal_payment', formatMoney(fPayment));
        }
        else
        {
          SetValue('paycal_payment', 'error');
        }

      }

      function CheckUserFields()
      {
        if( FetchValue('paycal_price')<0    ) return false;
        if( FetchValue('paycal_rate')<0     ) return false;
        if( FetchValue('paycal_cashdown')<0 ) return false;
        if( FetchValue('paycal_tradein')<0  ) return false;
        return true;
      }

      function SetValue(sElementID, sValue)
      {
        var rElement = document.getElementById(sElementID);
        rElement.value = sValue;
      }
      function FetchValue(sElementID)
      {
        var rElement = document.getElementById(sElementID);
        return MakeNum(rElement.value);
      }
      function formatMoney(amount)
      {
        return OutputComma(Math.floor(amount-0) + '') + OutputCents(amount - 0);
      }

      function OutputCents(amount)
      {
          amount = Math.round( ( (amount) - Math.floor(amount) ) *100);
          return (amount < 10 ? '.0' + amount : '.' + amount);
      }

      function OutputComma(number)
      {
          number = '' + number
          if (number.length > 3) {
              var mod = number.length%3;
              var output = (mod > 0 ? (number.substring(0,mod)) : '');
              for (i=0 ; i < Math.floor(number.length/3) ; i++) {
                  if ((mod ==0) && (i ==0))
                      output+= number.substring(mod+3*i,mod+3*i+3);
                  else
                      output+= ',' + number.substring(mod+3*i,mod+3*i+3);
              }
              return (output);
          }
          else return number;
      }
      function MakeNum(newNumber)
      {
        newStr=new String
        if(newNumber.charAt(0) == ".") newNumber = "0" + newNumber;
        strLength=newNumber.length

        for(var i=0; i<=strLength; i++) {
          tmpChar=newNumber.charAt(i)
          //convert non-alpha to letter to ensure fail (except for space, which we'll skip)
          if (tmpChar=="-" || tmpChar=="+" || tmpChar==")" || tmpChar=="(" || tmpChar=="*" || tmpChar=="&" || tmpChar=="#" || tmpChar=="!" || tmpChar=='"' || tmpChar=="/" || tmpChar=="'" || tmpChar=="$" || tmpChar=="," || tmpChar=="%"){tmpChar="h"}
          if (tmpChar==" "){tmpChar=""}

          // unnecessary? testChar=parseInt(tmpChar)
          if(tmpChar=="." || tmpChar<="9") {newStr=newStr+tmpChar}
          else return -1;

        }

        if( isNaN(newStr) ) return -1;
        return Math.round(newStr);
      }