


////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
/////////////// ICICI Interest Rate Calculator (BETA) //////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////


// Look for form field value
// @param String name: HTML field name
// @return Float: HTML field value
function getValue(name) {
  field = document.forms["calculator"].elements[name];
  return parseFloat(parseMoney(field.value)); 
}

// Refresh form on click
function calc() {
  var initial = getValue("initial");
  var period = getValue("period");
  var rate = getValue("rate")/100;
  
  if(moneycheck(initial) && periodcheck(period)) {
    var balance = determineBalance(initial, period, icici_value);
    var earnings = determineEarnings(initial, period, icici_value);
  	 
  	if (percentcheck(rate)) {
      selection ("comparison");
      var compbalance = determineBalance(initial, period, rate);
      var compearnings = determineEarnings(initial, period, rate);
      var addearnings = earnings-compearnings;
	  if (addearnings<0) addearnings = 0.00000000000000001;
  	} else {
      var compbalance = 0;
      var compearnings = 0;
      var addearnings = 0;
  	}
  
    if(isNaN(balance) || isNaN(earnings)) {
      displayResult("balance","");
      displayResult("earnings","");
      change(false);
    } else {
      displayResult("balance",styleNumber(balance));
      displayResult("earnings",styleNumber(earnings));
      if (compbalance!=0) {
        displayResult("compbalance",styleNumber(compbalance));
        displayResult("compearnings",styleNumber(compearnings));
        displayResult("addearnings",styleNumber(addearnings));
        displayResult("error"," ");
      } else {
        displayResult("compbalance","");
        displayResult("compearnings","");
        displayResult("addearnings","");
      }
      change(true);
    }
  } else {
    displayResult("balance","");
    displayResult("earnings","");
    displayResult("compbalance","");
    displayResult("compearnings","");
    displayResult("addearnings","");
    change(false);
  }
}

function change (val) {
  if (val) {
  	selection ();	
  } else {
  	deselection ();	
  }
}

function deselection () {
 var aFields = new Array ("tAmount", "tAmountUnit", "tEarnings", "tEarningsUnit", "tAmountComp", "tAmountCompUnit", "tEarningsComp", "tEarningsCompUnit", "tEarningHi", "tEarningsHiUnit");
 var aClass = new Array ("label inactive", "unit inactive", "label inactive", "unit inactive", "label inactive", "unit inactive", "label inactive", "unit inactive", "label inactive2", "unit inactive");
 
  for (var i=0; i<aFields.length; i++) {
	document.getElementById(aFields[i]).className = aClass[i];
  }
}

function selection (val) {
 var aFields = new Array ("tAmount", "tAmountUnit", "tEarnings", "tEarningsUnit", "tAmountComp", "tAmountCompUnit", "tEarningsComp", "tEarningsCompUnit", "tEarningHi", "tEarningsHiUnit");
 var aClass = new Array ("label active", "unit active", "label active", "unit active", "label active", "unit active", "label active", "unit active", "label active2", "unit active");

  for (var i=0; i<aFields.length; i++) {
	document.getElementById(aFields[i]).className = aClass[i];
  }
}


// Display calculator results
// @param String name: name of HTML element
// @param String value: formatted result amount
function displayResult(name,value) {
	if (value=='') value =  ".";
    document.getElementById(name).firstChild.nodeValue = value;
}

// Convert user input into parseable string
// @param string val: user input
// @returns string: formatted value
function parseMoney(val) {

  // remove spaces
    val = val.replace(/ /g, "");  

  // remove all dots except the last one
  // if it's a euro+cent value, extract the two parts
  var dot = val.lastIndexOf(".");
  var comma = val.lastIndexOf(",");
  if(dot > 0 || comma > 0) {
     if (comma > dot) var delimiter = comma;
       else var delimiter = dot;
  } else {
     var delimiter = -1;
  }
  var cent = val;
  
  // if found a comma: format number accordingly
  if(delimiter > -1) {
     cent = cent.slice(delimiter+1);
     if(cent.length <= 5 && cent.length >= 1) {
        var euro = val;
        euro = euro.slice(0,delimiter);
        euro = euro.replace(/\./g, "");
        euro = euro.replace(/,/g, "");
        val = euro + "." + cent;
      } else {
        val = val.replace(/\./g, "");
        val = val.replace(/,/g, "");
      }
  } 
  return val;
}


// Update field format
// @param String fld: html field name
// @return Boolean: status
function fixMoney(fld) { // monetary field formatting

  // get field value
  var val = fld.value;

  // check user input
  val = parseMoney(val);

  // convert final value into float number
  val = parseFloat(val);
  
  // look if it's a number anyway
  if(isNaN(val)) { // parse error 
     //////// MARK ERRORS ////////////
     fld.style.border = "1px solid red";
	 displayResult("error",errorinitial);
     return false;
  }

  val = String(val);
  // display result
  fld.value= styleNumber(val);
  fld.style.border = "1px solid #4b4b4b";
  return true;
}


// Update field format
// @param String fld: html field name
// @return Boolean: status
function fixPeriod(fld) {

  // get field value
  var val = fld.value;
  // look if it's a number anyway
  if(isNaN(val)) { // parse error 
     //////// MARK ERRORS ////////////
     fld.style.style.border = "1px solid red";
	 displayResult("error",errorperiod);
     return false;
  }
  fld.style.border = "1px solid #4b4b4b";
  return true;
}

// Update field format
// @param String fld: html field name
// @return Boolean: status
function fixRate(fld) { // monetary field formatting

  // get field value
  var val = fld.value;
  
  if (val!="") {
  // check user input
  val = parseMoney(val);

  // convert final value into float number
  val = parseFloat(val);
  
  // look if it's a number anyway
  if(isNaN(val)) { // parse error 
     //////// MARK ERRORS ////////////
     fld.style.border = "1px solid red";
	 displayResult("error",errorrate);
     return false;
  }
  val = String(val);
  // display result
  fld.value= styleNumber(val);  
  } else {
  fld.value= "";	  
  }

  fld.style.border = "1px solid #4b4b4b";
  return true;
}

// format Float in German style X.XXX,XX
// if lang is set to "en", English format X,XXX.XX 
// @param Float num: value
// @return String: formatted number
function styleNumber(num) {
	if (lang=='en') {
		var dec_point = ".";
		var thousands_sep = ",";
	} else {
		var dec_point = ",";
		var thousands_sep = ".";
	}
	
   num = num.toString().replace(/\$|\,/g,'');
   if(isNaN(num))
      num = "0";
   num = Math.floor(num*100+0.50000000001);
   cents = num%100;
   num = Math.floor(num/100).toString();
   if(cents<10)
      cents = "0" + cents;
   for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
      num = num.substring(0,num.length-(4*i+3))+thousands_sep+num.substring(num.length-(4*i+3));
   return (num + dec_point + cents);
}

function numcheck(value) {
	if (isNaN(value))
			return false;
    else
			return true;
}

function periodcheck(value) {
	if (isNaN(value)) {
	     //////// MARK ERRORS ////////////
		 document.getElementById("period").style.border = "1px solid red";
 	 	 displayResult("error",errorperiod);
		 return false;
	} else {
		displayResult("error"," ");
		return true;
	}
}

function moneycheck(value) {
	if (isNaN(value)) {
	     //////// MARK ERRORS ////////////
		 document.getElementById("initial").style.border = "1px solid red";
 	 	 displayResult("error",errorinitial);
		 return false;
	} else {
		displayResult("error","");
		return true;
	}
}

function percentcheck(value) {
  if (numcheck(value)) {
	  if (value<0) { // should be something between 0 and 10
	     //////// MARK ERRORS ////////////
		 document.getElementById("rate").style.border = "1px solid red";
 	 	 displayResult("error",errorrate);
		 return false;
	  } else {
		  displayResult("error"," ");
		  return true;
	  }
  } else {
	return false;  
  }
}


function myreset(val) {
	if (val != 'compare') {
		displayResult("balance","");
		displayResult("earnings","");
	}
	displayResult("compbalance","");
	displayResult("compearnings","");
	displayResult("addearnings","");
	change(false);	
}
