// used for the credit wizard because
// only positive numbers are allowed
function isValidPositiveField(formField) {	
	if (isValidCalculatorNumber(formField)){
		if(isInclusivelyInRange(formField.value,1,9999999)){
			return true;
		}
	}
	formField.focus();
	formField.select();
	return false;
}

// used for the debt calculator and the net worth calculator
// because negative numbers are not allowed
function isValidNonNegativeField(formField) {	
	if (isValidCalculatorNumber(formField)){
		if(isInclusivelyInRange(formField.value,0,9999999)){
			return true;
		}
	}
	formField.focus();
	formField.select();
	return false;
}

// used for the cash flow calculator
// because negative numbers are allowed
function isValidField(formField) {
	if (isValidCalculatorNumber(formField)){
		if(isInclusivelyInRange(formField.value,-9999999,9999999)){
			return true;
		}
	}	
	formField.focus();
	formField.select();
	return false;
}

// can be used for cash flow, debt and net worth calculators
function isValidCalculatorNumber(formField) {
	formField.value= trim(formField.value);
	if(isEmpty(formField.value)) {
		formField.value = "0";	
		return true;
	} else if(isCommaFormattedFloat(formField.value)){
		formField.value = removeCharFromString(formField.value, ',');
		//round to the nearest whole number	
		formField.value = Math.round(parseFloat(formField.value));
		return true;
	}
	return false;
}

function isValidDecimalNumber(formField) {
	formField.value= trim(formField.value);
	if (isNaN(formField.value)) 
		{
		return false;
		}
	else
		{
		return true;
		}
	return false;		
}

function issueAlertFor(message,userFriendlyFieldName) {
	alert(message+" "+userFriendlyFieldName+".");
}

function reverse(str){
    var s = "";
    var i = str.length;
    while (i>0) {
        s += str.substring(i-1,i);
        i--;
    }
    return s;
}

function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;



      for(i=0;i<=sText.length;i++)
      {
      	if (ValidChars.indexOf(sText.charAt(i)) == -1)
         {
         	IsNumber = false;
         }
      }

   return IsNumber;

 }
 function IsNumericChar(sText)
 {
    var ValidChars = "0123456789";
       var IsNumber=true;
    
    
    
    
          if (ValidChars.indexOf(sText) == -1)
             {
             IsNumber = false;
             }
    
   return IsNumber;
 
 }

function unformatCurrency(isFrenchLocale,data){
       var str="";
       var groupSeparators;
       var decimalSeparator;
       var groupChars;
       var newStrAmount = "";
       var _VALID_COMMA_POS=3;
       var amount="";
       str=data.value;
       newStrAmount=data.value;
       if (isFrenchLocale)
        {
            groupSeparators = " " + '\u00A0';
            decimalSeparator = ",";
            groupChars = " " + '\u00A0';

            // Eric Furrer - Format the number to a valid French input
            // i.e. 45.000,00 = 45,000.00
            var amtLen = newStrAmount.length;

            if (amtLen > 2)
            {
                // check for x.x or x,x
                var ch = newStrAmount.charAt(amtLen - 2);

                if ((ch == '.') || (ch == ','))
                {
                    newStrAmount += '0';
                    amtLen++;
                }

                ch = newStrAmount.charAt(amtLen - 3);

                if ((ch != '.') && (ch != ','))
                {
                    newStrAmount = newStrAmount + ".00";
                    amtLen += 3;
                }

                newStrAmount = newStrAmount.replace('.', ' ');
                newStrAmount = newStrAmount.replace(',', ' ');
                newStrAmount = newStrAmount.substring(0, amtLen - 3) + "," +
                    newStrAmount.substring(amtLen - 2, amtLen);
            } else
            {
                // check for .x or ,x
                var ch = newStrAmount.charAt(0);
                if ((ch == '.') || (ch == ','))
                {
                    newStrAmount = "0" + newStrAmount;
                    newStrAmount = newStrAmount.replace('.', ',');
                    amtLen++;
                }
            }

            // end of modification - Eric Furrer
        } else
        {
            groupSeparators = ",";
            decimalSeparator = ".";
            groupChars =  ",";
        }

        newStrAmount = trim(newStrAmount);
	//alert(newStrAmount);
        var fromIndex = newStrAmount.indexOf(decimalSeparator);
        var dollarsPart = "";
        var centsPart = "";

        if (fromIndex >= 0)
        {
            dollarsPart = newStrAmount.substring(0, fromIndex);
            centsPart = newStrAmount.substring(fromIndex + 1,
                newStrAmount.length);
	    	
            var centsPartLen = centsPart.length;
	//alert("centsPartLen"+centsPartLen);
	//alert("centsPart"+centsPart);
            if (centsPartLen == 0)
            {
                centsPart = "00";
            }
            // Check for valid cents part
            if ((centsPartLen > 2) ||
                (centsPartLen != 0 && !IsNumeric(centsPart)))
            {
            	  
                  return data.value;
            }
        } else
        {
            centsPart = "00";

            if (newStrAmount.length > 0)
            {
                dollarsPart = newStrAmount;
            }
        }
	//alert(dollarsPart);
        var commaCount = 0;
        var len = dollarsPart.length - 1;

        if ((len > 0) &&
            (groupSeparators.indexOf(dollarsPart.charAt(0)) != -1 ||
            groupSeparators.indexOf(dollarsPart.charAt(len)) != -1))
       {
               return data.value;
        } else
        {
            // Check the amount before decimal point contains valid numbers
            for (i = len; i >= 0; i--)
            {
                var ch = dollarsPart.charAt(i);
                if (IsNumericChar(ch))
                {
                    amount+=ch;
                }
                // Check for amount should not have charactes other than digits and comma
                else
                {
                       if (groupChars.indexOf(ch) == -1)
                       {
                         return data.value;
                       }else
                       {
                            var ch2 = dollarsPart.charAt(i + 1);
                            if (!IsNumericChar(ch2))
                            {
                             return data.value;
                            }
                            // If comma present, check for valid comma position in amount
                            var commaPos = (len - i) - (4 * commaCount);

                            if ((i == 0) || (commaPos % _VALID_COMMA_POS != 0))
                            {
                             return data.value;
                            }
                            commaCount++;
                        }
                  }
              }



            if (commaCount > 0) {
                len++;

                var required = len / 4;
                required=Math.floor(required);
                if (commaCount != required) {

                      return data.value;


                }
            }
        }

        amount = reverse(amount);
        amount+="." + centsPart;
        //alert(amount);
        return amount.toString();

    }


    function trim(sLine) {
       if( (sLine == "") || (sLine == null) )
         return(sLine);
       else
         return(sLine.replace(/(\s+$|^\s+)/g, ""));
    }
    function isEmpty(s)
    {
      // Check whether string s is empty.
      return ((s == null) || (s.length == 0))
    }
    function isInclusivelyInRange(numberString, numericalLowerLimit, numericalUpperLimit) {
        var number = numberString-0;
        return (number>=numericalLowerLimit && number<=numericalUpperLimit);
    }

    function isExclusivelyInRange(numberString, numericalLowerLimit, numericalUpperLimit) {
        var number = numberString-0;
        return (number>numericalLowerLimit && number<numericalUpperLimit);
    }

function isCommaFormattedFloat ( inputStr )
{
   var foundNumeric = false;
   if ((inputStr != null) && (inputStr != ""))
   {
      var minusSignPosition = 0;
	var numberOfPeriods = 0;
      var c = '?';
      for (var i = 0, commaPosition = 1, j = inputStr.length - 1; j >= 0; i++, j--, commaPosition++)
      {
         c = inputStr.charAt( j );
         if ((c == '.') && (numberOfPeriods == 0))
         {
            commaPosition = 0;
		numberOfPeriods++;
            continue;
         }
         if ((commaPosition == 4) && (c == ','))
         {
            commaPosition = 0;
            continue;
         }
         if ((j == minusSignPosition ) && (c == '-'))
         {
            continue;
         }
         if ((c >= '0') && (c <= '9'))
         {
            foundNumeric = true;
         }
         else
         {
            return false;
         }
      }
   }
   return foundNumeric;
}

// removes all occurrences of unwantedChar from the rawString
function removeCharFromString(rawString, unwantedChar) {
	var cleanString = "";
	for (var i=0; i<rawString.length; i++) {
		if (rawString.charAt(i) != unwantedChar) {
			cleanString += rawString.charAt(i);
		}
	}
	return cleanString;
}
