// CALC_Global JavaScript file.
// 
//
// Function to calculate the present value of an investment.
// Parameters are rate, 
//                total number of periods, 
//                payment made each period, 
//                future value,
//                type (when payments are due),
function presentvalue(rate, nper, pmt, fv, type)
{
   nper = parseFloat(nper);
   pmt = parseFloat(pmt);
   fv = parseFloat(fv);
   rate = parseFloat(rate);
   type = parseFloat(type);
  
   if ( rate == 0 )
   {
        pv_value = -(fv + (pmt * nper));
   }
   else 
   {
        pv_value = -(pmt*(1+(rate*type))*((Math.pow(1 + rate, nper)-1)/rate)+fv)/Math.pow(1 + rate, nper);
   }
   return (pv_value);
}

// Function to calculate the payment for a period of an investment.
// Parameters are rate, 
//                total number of periods, 
//                present value, 
//                future value,
//                type (when payments are due),
function payment(rate, nper, pv, fv, type)
{
   nper = parseFloat(nper);
   pv = parseFloat(pv);
   fv = parseFloat(fv);
   rate = parseFloat(rate);
   type = parseFloat(type);
  
   if ( rate == 0 )
   {
        pmt_value = -((fv + pv)/nper);
   }
   else 
   {
        pmt_value = -((fv+(pv*(Math.pow((1+rate),nper))))/((1+rate*type)*((Math.pow((1+rate),nper)-1)/rate)));
   }
   return (pmt_value);
}


// Function to calculate the number of periods in a loan
// Parameters are rate,
//                pmt,
//                pv,
//                fv,
//                type.
function nper(rate, pmt, pv, fv, type)
{
   pmt = parseFloat(pmt);
   pv = parseFloat(pv);
   fv = parseFloat(fv);
   rate = parseFloat(rate);
   type = parseFloat(type); 

   if ( rate == 0 )
   {
        nper_value = -((fv + pv)/pmt);
   }
   else
   {
        nper_value = (Math.log((-fv * rate + pmt * (1 + rate * type))/(pv * rate + pmt * (1 + rate * type))))/(Math.log(1 + rate));
   }
   return (nper_value);   
}

// Function to calculate the future value of an investment.
// Parameters are rate, 
//                total number of periods, 
//                payment made each period, 
//                present value,
//                type (when payments are due),
function futurevalue(rate, nper, pmt, pv, type)
{
   nper = parseFloat(nper);
   pmt = parseFloat(pmt);
   pv = parseFloat(pv);
   rate = parseFloat(rate);
   type = parseFloat(type);
  
   if ( rate == 0 )
   {
        fv_value = -(pv + (pmt * nper));
   }
   else 
   {
        fv_value = -((pv*Math.pow((1+rate),nper))+(pmt*((1+rate*type)*(Math.pow((1+rate),nper)-1)/rate)));
   }
   return (fv_value);
}

// Function to format a number to a specified number of decimal places.
function conv_number(expr, decplaces) 
{
     var str = "" + Math.round(eval(expr) * Math.pow(10,decplaces));
     while (str.length <= decplaces) {
           str = "0" + str;
     }
     var decpoint = str.length - decplaces;
     if (decplaces != 0)
	     return (str.substring(0,decpoint) + "." + str.substring(decpoint,str.length));
     else
	     return (str.substring(0,decpoint));
}


// Function to format a number separated into thousands.
function format_num(number)
{
  if (number.charAt(number.length - 3) == ".")
  {
     var OriginalNumber = number;
     number = number.toString();
     if (number.substring(0,1) == "-") {
            number = number.substring(1, number.length);
     }
     if (number.length > 9 && number.length <= 12) {
            number = number.substring(0,number.length-9) + 
            "," + number.substring(number.length-9,number.length-6) +
            "," + number.substring(number.length-6,number.length);
     }
     if (number.length > 6 && number.length <= 9) {
            number = number.substring(0,number.length-6) + 
            "," + (number.substring(number.length-6,number.length));
     }
     if (OriginalNumber.substring(0,1) == "-") {
	return ("-$" + number) }
     else
        return ("$" + number);
  }
  else
  {
     var OriginalNumber = number;
     number = number.toString();
     if (number.substring(0,1) == "-") {
            number = number.substring(1, number.length);
     }
     if (number.length > 6 && number.length <= 9) {
            number = number.substring(0,number.length-6) +
            "," + number.substring(number.length-6,number.length-3) +
            "," + number.substring(number.length-3,number.length);
     }
     if (number.length > 3 && number.length <= 6) {
            number = number.substring(0,number.length-3) +
            "," + (number.substring(number.length-3,number.length));
     }
     if (OriginalNumber.substring(0,1) == "-") {
        return ("-$" + number) }
     else
        return ("$" + number);
  }
}

// Function to unformat a dollar value into unformatted numbers.
function unformat_num(number)
{
  var pos = 0;
  var len = 1;
  pos = number.indexOf("$");
  while (pos != -1)
  {
    preString = number.substring(0, pos);
    postString = number.substring(pos+len, number.length);
    number = preString + postString;
    pos = number.indexOf("$");
  }
  var pos = 0;
  var len = 1;
  pos = number.indexOf(",");
  while (pos != -1)
  {
    preString = number.substring(0, pos);
    postString = number.substring(pos+len, number.length);
    number = preString + postString;
    pos = number.indexOf(",");
  }
  return number;
}

// Function to convert empty strings to a value of zero.
function checknull(string1)
{
    if (string1 == "") {
        return "0";
    }
    return string1;
}


var decimalPointDelimiter = "."  

function isEmpty(s)
{
        s = s + "";
        if (s == null)
                return true;
        return (s.length == 0);
}  

function isDigit (c)
{
        return ((c >= "0") && (c <= "9"))
} 


// isFloat (STRING s [,BOOLEAN emtyOK])
function isFloat(s)
{
  s = s + ""
  var i
  var seenDecimalPoint = false

  if (isEmpty(s))
    if (isFloat.arguments.length == 1) return defaultEmptyOK
    else return (isFloat.arguments[1] == true)

  if (s == decimalPointDelimiter) return false       

// Search through string's characters one by one until we find a non-numeric
// character.  When we do, return false; if we don't return true
  for (i = 0; i < s.length; i++)
  {
    // Check that current character in a number.
    var c = s.charAt(i)
    if ((c == decimalPointDelimiter) && !seenDecimalPoint)
      seenDecimalPoint = true
    else if (!isDigit(c)) return false
  }
  // All characters are numbers
  return true
}    


function ValidateMand(Obj, Message)
{
	if (Obj.value == "" || Obj.value == null)
	{
		alert(Message);
		Obj.focus();
		Obj.select();
		return true;
	}
	else
		return false;
}

function ValidateNeg(Obj, Message)
{
	if (Obj.value != "" && Obj.value < 0)
	{
		alert(Message);
		Obj.focus();
		Obj.select();
		return true;
	}
	else
		return false;
		
}

function ValidateFloat(Obj, Message)
{
	if (Obj.value != "" && !isFloat(Obj.value) )
	{
		alert(Message);
		Obj.focus();
		Obj.select();
		return false;
	}
	else
		return true;
}

function CheckNull(Param)
{
	if (Param == "" || Param == null)
		return 0
	else
		return eval(Param)
}

function GetRadioValue(Obj)
{
	var value = null;
	for (var i=0; i < Obj.length; i++)
	{
		if (Obj[i].checked)
		{
			value = Obj[i].value;
			break;
		}
	}
	return value;
}
