var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPoint = "."
var defaultEmptyOK = false
var comma = ",";
var open_parenthesis = "(";
var close_parenthesis = ")";
var hyphen = "-";
var decimal = ".";
var quote = "'\"";

var requestSubmitted = false;

var loanmin = 1;
var loanmax = 10000000;

var minPropertyVal = 1;



var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

var numIneligibleStates = 10;

var ineligibleStates = new Array(numIneligibleStates);
ineligibleStates[1] = "AL";
ineligibleStates[2] = "AK";
ineligibleStates[3] = "HI";
ineligibleStates[4] = "IA";
ineligibleStates[5] = "MD";
ineligibleStates[6] = "NV";
ineligibleStates[7] = "NC";
ineligibleStates[8] = "NY";
ineligibleStates[9] = "SC";
ineligibleStates[10] = "VT";


var newWindow;

function loadPage(page)   {

   document.form1.action=page;      // enter the page that you want to reload
   document.form1.method="post";    // use GET or POST
   document.form1.submit();
}

function submitForm(form,page)   {

   if (validateForm()){
      form.action=page;      // the page that you want to submit to
      form.method="post";    // use GET or POST
      form.submit();
   }
}

function reformatPercent(input,places)   {

   var output = reformatNumber(input,places);
   output += "%";
   return output;
}

function reformatCurrency(input,places)   {

    var output = reformatNumber(input,places);
    output = "$" + output;
    
    return output;
}

function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    
    return returnString;
}

function stripCharsInField (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.value.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.value.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    s.value = returnString;
    return returnString;
}


function stripCharsAfterDecimal (s, bag)   {

   var i, tmp;
   var returnString = "";
   

   for (i = 0; i < s.value.length; i++)   {
      var c = s.value.charAt(i);
      if (bag.indexOf(c) != -1) returnString += c;
   }
   tmp = returnString;
   returnString = "";
   
   for (i = 0; i < tmp.length; i++)   {
      var c = tmp.charAt(i);
            
      if (bag.indexOf(c) != 10){ 
        returnString += c;
       }else{
        s.value = returnString;
   		return returnString;
      }
   }
   s.value = returnString;
   return returnString;
}    
    
function stripCharsNotInField (s, bag)   {

   var i;
   var returnString = "";
   

   for (i = 0; i < s.value.length; i++)   {
      var c = s.value.charAt(i);
      if (bag.indexOf(c) != -1) returnString += c;
   }
   s.value = returnString;
   return returnString;
}    
    
function stripCharsNotInBag (s, bag)   {

   var i;
   var returnString = "";
   

   for (i = 0; i < s.length; i++)   {
      var c = s.charAt(i);
      if (bag.indexOf(c) != -1) returnString += c;
   }
   
   return returnString;
}

function reformatNumber(input,places) {

    var cleanInput;
    var output;
    var length;
    var pos;
	
    if (places < 0) places = 0;

    // check to see if there is a decimal point
    pos = input.indexOf(decimalPoint);
    
    // remove any extra decimal points
    if (pos > 0)  {
       cleanInput = input.substr(0,pos+1) + stripCharsInBag(input.substr(pos+1),decimalPoint);
    } else
       cleanInput = input;
   
    // round to the requested places
    cleanInput = String(roundNumber(cleanInput,places))

    // find location of decimal point after rounding
    pos = cleanInput.indexOf(decimalPoint);

    if (pos == 0) 
        output = "0" + cleanInput;
    else
        output = cleanInput; 
        
    // make sure the correct number of places to the right of the decimal are displayed  
    while ((output.length - (output.indexOf(decimalPoint) +1)) < places)  
              output = output + "0"; 
       
    // add the commas
    pos = output.indexOf(decimalPoint);
    length = output.length;
    
    if (pos > 0) {
       if (pos == 4 ) output = output.substring(0,1) + "," + output.substring(1);
       if (pos == 5 ) output = output.substring(0,2) + "," + output.substring(2);
       if (pos == 6 ) output = output.substring(0,3) + "," + output.substring(3);
       if (pos == 7 ) output = output.substring(0,1) + "," + output.substring(1,4) + "," + output.substring(4);
       if (pos == 8 ) output = output.substring(0,2) + "," + output.substring(2,5) + "," + output.substring(5);
       if (pos == 9 ) output = output.substring(0,3) + "," + output.substring(3,6) + "," + output.substring(6);
    }
    else if (length > 3) {
       if (length == 4 ) output = output.substring(0,1) + "," + output.substring(1);
       if (length == 5 ) output = output.substring(0,2) + "," + output.substring(2);
       if (length == 6 ) output = output.substring(0,3) + "," + output.substring(3);
       if (length == 7 ) output = output.substring(0,1) + "," + output.substring(1,4) + "," + output.substring(4);
       if (length == 8 ) output = output.substring(0,2) + "," + output.substring(2,5) + "," + output.substring(5);
       if (length == 9 ) output = output.substring(0,3) + "," + output.substring(3,6) + "," + output.substring(6);
    }
    
   return output;
}

function roundNumber(number, places) {
   if (places < 0) places = 0;
   return Math.round(number*Math.pow(10,places))/Math.pow(10,places);
}

function openWindow(windowHeight,URL)
{
   var windowWidth = 450;
   var windowLeft = (screen.width - windowWidth)/2;
   var windowTop  = (screen.height - windowHeight)/3;
   
   var myFeatures = "width=" + windowWidth + ",height=" + windowHeight + ",scrollbars=no";
       myFeatures += ",menubar=no,resizable=no,location=no,toolbar=no,buttonbar=yes";
       myFeatures += ",screenx=1200,screeny=0,left=" + windowLeft + ",top=" + windowTop; 
 
   newWindow = window.open(URL,"newWin",myFeatures);
   newWindow.focus();
}

function closeWindow()  {

   if (newWindow && !newWindow.closed)  {
      
      newWindow.close();
   }
}

function isEmpty(s)   {
   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)  {

   var i;
   if (isEmpty(s)) return true;
   for (i = 0; i < s.length; i++)  {
      var c = s.charAt(i);
      if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function isAcceptableRange (loan, min, max) {

	if (max == "") {
		return (loan >= min);
	}
	else if (min == "") {
		return (loan <= max);
	}
	else
		return ((loan >= min) && (loan <= max));
}



function reformat (s)

{   var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) resultString += arg;
       else {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}

function reformatUSPhone (USPhone)   {
   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}

function reformatZIPCode (ZIPString)   {
   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}

function formatInteger(data)   {
   data.value = stripCharsNotInBag(data,digits);
}

function formatNumber(data, places)   {
   data.value = reformatNumber(stripCharsNotInBag(data,digits+decimalPoint),places);    
}

function formatZIPCode(data)   {
   data.value = reformatZIPCode(stripCharsNotInField(data,digits));    
}

function formatPhone(data)   {
	 var num = data.value;
	 var firstnum = num.slice(0,1);
	 if (firstnum == 1)
			num = num.slice(1);
   data.value = reformatUSPhone(stripCharsNotInBag(num,digits));  
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isInteger (s)
{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }
    return true;
}

function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;

    var num = parseInt (s);
    return ((num >= a) && (num <= b));
}

function isDate (year, month, day)
{ 
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);

    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

    return true;
}

function isMonth (s)
{   
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{ 
    return isIntegerInRange (s, 1, 31);
}

function isYear (s)
{   
    return ((s.length == 2) || (s.length == 4));
}

function daysInFebruary (year)
{   
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isUSPhoneNumber(data)  {
   var s = stripCharsNotInBag(data,digits)
   if (s.length == 10)
      return true;
   else
      return false;
}

function confirmState(data){
   var i = 0;
   var stFlag = 0;
   while (i < numIneligibleStates) {
	i++;
	if (data.value == ineligibleStates[i]) {
		stFlag = 1;
	}
   }
   if (stFlag == 1) {
	alert("We regret to inform you that Equity Direct does not currently do business in this state.");
   }
}

function checkLoanReason(data) {
	if (data.value == "NewPurchase") {
		alert ("Equity Direct does not handle this type of loan.");
	}
}

function checkCredit(data) {
	if (data.value == "NeverLate") {
		alert ("Equity Direct only handles loans for those with less-than-perfect credit!");
	}
}

function isZIPCode(data)  {
   var s = stripCharsNotInBag(data,digits)
   if (s.length ==5 || s.length == 9)
      return true;
   else
      return false;
} 

function isEmail (s)   {  
    var i = 1;
    var sLength = s.length;

    while ((i < sLength) && (s.charAt(i) != "@"))   {
       i++;
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != "."))   {
       i++;
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isSignedFloat (s)

{   if (isEmpty(s)) 
       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedFloat.arguments[1] == true);

    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedFloat.arguments.length > 1)
            secondArg = isSignedFloat.arguments[1];

        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isFloat(s.substring(startPos, s.length), secondArg))
    }
}      

function checkLoan_Amount(data) {
 	var loan = stripCharsNotInBag(data,digits);
 	if (loan < loanmin) {
 		
 		alert("Please input the loan amount requested.");
 		return false;
 	}
 	return true;
}

function checkProperty_Val(data) {
	var prop = stripCharsNotInBag(data,digits);
 	if (prop < minPropertyVal) {
 		
 		alert("Please input the value of your home.");
 		return false;
 	}
 	return true;
}

function validateForm()   {

     
   
   var blankMessage = "";
   var errorMessage = "";
   var alertMessage = "";
   var emailFlag;
   var confirmEmailFlag;
   var firstError = "";
  
   
   /* validate loan information  */

   if (document.form1.loan_type.value == "invalid") {
      blankMessage += "\tLoan Purpose\n";
   }

   
        
   /* validate borrower information */

   if (document.form1.firstname.value == "" || document.form1.firstname.value == "First Name") {
      	blankMessage += "\tBorrower First Name\n";
   } 
   
   if (document.form1.lastname.value == "" || document.form1.lastname.value == "Last Name") {
      	blankMessage += "\tBorrower Last Name\n";
   } 
     
   if (document.form1.street_address.value == "") {
      blankMessage += "\tStreet Address\n";
   }
      
   if (document.form1.city.value == "") {
      blankMessage += "\tCity\n";
   }
      
   if (document.form1.state.value == "invalid") {
      blankMessage += "\tState\n";
   }
      
   if (document.form1.zip.value == "") {
      blankMessage += "\tZip Code\n";
   } /*else if (!isZIPCode(document.form1.zip.value))   {
        errorMessage += "\tZip Code\n";
   } */
   
       
   if (document.form1.email_address.value == "") {
      blankMessage += "\tE-Mail Address\n";
   }  else if (!isEmail(document.form1.email_address.value))  {
         errorMessage += "\tE-mail Address\n";
   } 
    
	/*    Borrower's Home Phone    */
	
   if (document.form1.homephone_areacode.value == "" )  {
      	blankMessage += "\tHome Area Code\n";
   } 
   
   if (document.form1.homephone_exchange.value == "" )  {
      	blankMessage += "\tHome Phone Number\n";
   } 
   
   if (document.form1.homephone_suffix.value == "" )  {
      	blankMessage += "\tHome Phone Number Suffix\n";
   } 
  
   
   /*   Borrower's Work Phone  */
   
  //if (document.form1.workphone_areacode.value == "" )  {
  //    	blankMessage += "\tWork Area Code\n";
  // } /*else {
  // 	  	stripCharsNotInBag(document.form1.workphone_areacode,digits);
  // }  */
   
  // if (document.form1.workphone_exchange.value == "" )  {
  //   	blankMessage += "\tWork Phone Number\n";
  // } 
   
  // if (document.form1.workphone_suffix.value == "" )  {
  //    	blankMessage += "\tWork Phone Number Suffix\n";
  // } 
   
   
   
   if (document.form1.mortgage_credit.value == "invalid") {
      	blankMessage += "\tOverall Mortgage Credit\n";
   }   
      
   if (document.form1.consumer_credit.value == "invalid") {
      	blankMessage += "\tOverall Consumer Credit\n";
   } 
   
   if (document.form1.property_type.value == "invalid") {
      	blankMessage += "\tType of Property\n";
   } 
   
   if (document.form1.income_verify.value == "invalid") {
      	blankMessage += "\tCan You Verify Your Income\n";
   } 
   
  

  /* validate property information  */  

   if (document.form1.property_value.value == "") {
		blankMessage += "\tCurrent Property Value\n";
		if (firstError == "") {
			firstError = "property_value";
		}
	 } 
	
	if (document.form1.mortgage_balance.value == "") {
		blankMessage += "\tAmount Owed on Property\n";
		if (firstError == "") {
			firstError = "mortgage_balance";
		}
	 }

   if (document.form1.extra_cash.value == "") {
		blankMessage += "\tAdditional Cash\n";
		if (firstError == "") {
			firstError = "extra_cash";
		}
   }
     
   
   
  
 
   if (blankMessage != "")  {
      alertMessage = alertMessage + "\nThe following required fields are blank:" + "\n\n" + blankMessage;
   }
   
   if (errorMessage != "")  {
      alertMessage = alertMessage + "\nThe following fields have errors:" + "\n\n" + errorMessage;
   }
   
   if (alertMessage != "") {
      alert(alertMessage);
      
      /*document.form1.elements[firstError].focus(); */
      return false;
   }  else{
     if (!checkProperty_Val(document.form1.property_value.value) ){return false;}		
     if (!checkLoan_Amount(document.form1.loan_amount.value)) {return false;}  
         
		if (requestSubmitted == false ){
			requestSubmitted = true;
			return  true;
		}else {
			alert("You have already submitted " + 
			"the request.. Please wait");
			return false;
      	}
   }

}


function totalLoanAmount(){
	if (document.form1.mortgage_balance.value != "" & document.form1.extra_cash.value != "")
	document.form1.total_loan.value = ( parseInt(document.form1.mortgage_balance.value) + parseInt(document.form1.extra_cash.value))
}

   
function stateDisclaimer(state){
		if (state=="AK" ){
			alert("A Note About Your Request:\n\n\t Equity Direct Mortgage Corporation accepts \nonline mortgage requests throughout the United States \nwith the exception of Alaska.");
		}
}