<!--//

// Get Document Object
function getObj(name){
	if(document.getElementById){
		return document.getElementById(name);
	}else if(document.all){
		return document.all[name];
	}else if(document.layers && document.layers[name] != null){
		return getObjNN4(document, name);
	}else{
		return false;
	}
}

// Get NN4 Document Object
function getObjNN4(obj, name){
	var x = obj.layers;
	var foundLayer;
	for(var i=0;i<x.length;i++){
		if(x[i].id == name){
			foundLayer = x[i];
		}else if (x[i].layers.length){
			var tmp = getObjNN4(x[i],name);
		}
		if(tmp){
			foundLayer = tmp;
		}
	}
	if(foundLayer){
		return foundLayer;
	}else{
		return false;
	}
}

// Disable the Enter Key usage: onkeypress="return disable_enter(this, event)"
function disable_enter(field, event){
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if(keyCode == 13){
		var i;
		for(i = 0; i < field.form.elements.length; i++){
			if(field == field.form.elements[i]){
				break;
			}
		}
		if(field.form.elements[i+1].type != 'hidden' && field.form.elements[i+1].disabled != 1){
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		}else{
			return disable_enter(field.form.elements[i+1], event);
		}
	}else{
		return true;
	}
}

function inArray(what, arr) {
    for (var i=0; i < arr.length; i++) {
        if (arr[i].toString() == what.toString()) return true
    }
    return false
}

// Replace char/string in a string
function replace(string, text, by){
	var strLength = string.length, txtLength = text.length;
	if((strLength == 0) || (txtLength == 0)){
		return string;
	}
	var i = string.indexOf(text);
	if((!i) && (text != string.substring(0,txtLength))){
		return string;
	}
	if(i == -1){
		return string;
	}
	var newstr = string.substring(0,i) + by;
	if(i+txtLength < strLength){
		newstr += replace(string.substring(i+txtLength,strLength),text,by);
	}
	return newstr;
}

// Numbers Only - different than formatNumber
function isNumeric(string, ignoreWhiteSpace) {
	if(string.search){
		if((ignoreWhiteSpace && string.search(/[^\d\s]/) != -1) || (!ignoreWhiteSpace && string.search(/\D/) != -1)){
			return false;
		}
	}
	return true;
}

// checksum using mod 10
function getMod10(number) {
	number = '' + number;
	number = replace(number, ' ', '');
	if (!isNumeric(number)){
		return false;
	}
	var checksum = 0;
	for(var i = number.length - 1; i >= 0; i--){
		var isOdd = ((number.length - i) % 2 != 0) ? true : false;
		digit = number.charAt(i);
		if(isOdd){
			checksum += parseInt(digit);
		}else{
			var evenDigit = parseInt(digit) * 2;
			if(evenDigit >= 10){
				checksum += 1 + (evenDigit - 10);
			}else{
				checksum += evenDigit;
			}
		}
	}
	return (checksum % 10);
}

// Check Numeric Format
function checkNumeric(what, field, formatOnly){
	msg = '';
	var newNumeric = getObj(what).value;
	newNumeric = replace(newNumeric, ' ', '');
	newNumeric = replace(newNumeric, '-', '');
	newNumeric = replace(newNumeric, '.', '');
	if (!isNumeric(newNumeric, false)) {
		if(formatOnly == 1){
			alert("Incorrect '" + field + "' format.");
			getObj(what).value = '';
			msg = false;
		}else{
			msg = "- Incorrect '" + field + "' format.\n";
		}
		newNumeric = '';
	}
	if(formatOnly == 1){
		getObj(what).value = newNumeric;
		msg = true;
	}
	return msg;
}

// Formats phone, fax fields
function checkPhone(what, field, req, errAlert){
	var str = getObj(what).value;
	str = replace(str, '(', '');
	str = replace(str, ')', '');
	str = replace(str, '-', '');
	str = replace(str, ' ', '');
	str = replace(str, '.', '');
	var regex = new RegExp("^[0-9]*$", "gi");
	var alertErr = "Incorrect " + field + " format.\n\nuse a 10 digit number\nincluding the area code in this field.\n\nie. 6045551234";
	var msgErr = "- Incorrect '" + field + "' format.\n";
	if(!regex.test(str)){
		if(errAlert == 1){
			alert(alertErr);
			getObj(what).value = '';
			return false;
		}else{
			return msgErr;
		}
	}else{
		if(str.length == 10){
			getObj(what).value = "(" + str.substring(0,3) + ") " + str.substring(3,6) + "-" + str.substring(6,10);
			if(errAlert == 1){
				return true;
			}else{
				msgErr = '';
				return msgErr;
			}
		}else{
			if((str.length > 0 && str != '0') || (req == 1 && (str == '0' || str.length == 0))){
				if(errAlert == 1){
					alert(alertErr);
					getObj(what).value = '';
					return false;
				}else{
					return msgErr;
				}
			}else{
				if(errAlert == 1){
					return true;
				}else{
					msgErr = '';
					return msgErr;
				}
			}
		}
	}
}

// Check Date Format
function checkDate(what, field, formatOnly){
	msg = '';
	var newDate = getObj(what).value;
	if(newDate.length > 0 && newDate != 'mm/dd/yy' && (newDate.search(/^(((0){0,1}[0-9]{1})|((1){1}(0|1|2){1}){1})\/((((0){0,1}[0-9]{1})|1[0-9]{1}|2[0-9]{1}|3(0|1)){0,1})\/((((19){1}([0-9]{2}))|((200){1}([0-9]{1})))|([0-9]{2}))$/) == -1)){
	//if(newDate.length > 0){
		if(formatOnly == 1){
			alert("Incorrect '" + field + "' format.\n\nie. mm/dd/yy");
			getObj(what).value = '';
			msg = false;
		}else{
			msg = "- Incorrect '" + field + "' format.\n";
		}
		newDate = '';
	}
	if(formatOnly == 1){
		getObj(what).value = newDate;
		msg = true;
	}else if(newDate == 'mm/dd/yy'){
		msg = "- Missing '" + field + "' field.\n";
	}
	return msg;
}

// Check Postal/Zip Code Format
function checkPostal(what, field, formatOnly, fldType){
	msg = '';
	var newPostalCode = getObj(what).value;
	newPostalCode = replace(newPostalCode, ' ', '');
	if (newPostalCode.length > 0 && (((fldType == "zip" && (newPostalCode.search(/^[0-9]{5}$/) == -1) && (newPostalCode.search(/^[0-9]{5}[\-]?[0-9]{4}$/) == -1)) || (fldType == "post" && (newPostalCode.search(/^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[\-\ ]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$/) == -1)) || (fldType != "zip" && fldType != "post" && (newPostalCode.search(/^[a-zA-Z]{1}[0-9]{1}[a-zA-Z]{1}[\-\ ]?[0-9]{1}[a-zA-Z]{1}[0-9]{1}$/) == -1) && (newPostalCode.search(/^[0-9]{5}$/) == -1) && (newPostalCode.search(/^[0-9]{5}[\-]?[0-9]{4}$/) == -1))))) {
		if(formatOnly == 1){
			if(fldType == "post"){
				alert("Incorrect '" + field + "' format.\n\nie. Q1W2E3");
			}else if(fldType == "zip"){
				alert("Incorrect '" + field + "' format.\n\nie. 90210");
			}else{
				alert("Incorrect '" + field + "' format.\n\nie. Q1W2E3 or 90210");
			}
			getObj(what).value = '';
			msg = false;
		}else{
			msg = "- Incorrect '" + field + "' format.\n";
		}
		newPostalCode = '';
	}
	if(formatOnly == 1){
		getObj(what).value = newPostalCode.toUpperCase();
		msg = true;
	}
	return msg;
}

// Check Money Format
function checkMoney(what, field, formatOnly, required){
	msg = '';
	amount = getObj(what).value;
	amount = replace(amount, '-', '');
	amount = replace(amount, '$', '');
	amount = replace(amount, ' ', '');
	amount = amount;
	amount -= 0;
	amount = Math.round(amount*100)/100;
	if(((amount / amount) != 1) && (amount != 0)){
		if(formatOnly == 1){
			alert("Invalid '" + field + "' format.\n\nie. $10.00");
			getObj(what).value = '0.00';
			msg = false;
		}else{
			msg = "- Invalid '" + field + "' format.\n";
		}
	}else{
		if(amount == 0 && required == 1){
			if(formatOnly == 1){
				alert("Missing '" + field + "' field.");
				getObj(what).value = '0.00';
				msg = false;
			}else{
				msg = "- Missing '" + field + "' field.\n";
			}
		}else{
			newAmount = (amount == Math.floor(amount)) ? amount + '.00' : ((amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
			if(formatOnly == 1){
				getObj(what).value = newAmount;
				msg = true;
			}
		}
		return msg;
	}
}

// Check Email Format
function checkEmail(what) {
	msg = '';
	var str = getObj(what).value;
	if(str.search(/^([0-9a-zA-Z]+([_&\.-]?[0-9a-zA-Z]+[_]?)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,\.,-]*(\.){1}[a-zA-Z]{2,4})$/i) == -1){
	//if(str.search(/^(\w+(?:\.\w+)*)@((?:\w+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i) == -1){
		msg = "- Incorrect 'Email' format.\n";
	}
	return msg;
}


// Format number
function formatNumber(field){
	amount = field.value;
	amount -= 0;
	if(((amount / amount) != 1) && (amount != 0)){
		field.value = '0';
		return false;
	}else{
		field.value = amount;
		return true;
	}
}

// Check that a credit card number is valid based using the LUHN formula (mod10 is 0)
function checkCCNumber(number, type) {
	var msg = '';
	number = '' + number;
	if(number.length > 16 || number.length < 13 ){
		msg = "Invalid 'Credit Card Number' field.";
	}else if(getMod10(number) != 0){
		msg = "Invalid 'Credit Card Number' field.";
	}else{
		var first2digits = number.substring(0, 2);
		var first4digits = number.substring(0, 4);
		if(type.toLowerCase() == 'visa' && number.substring(0, 1) == 4 && (number.length == 16 || number.length == 13 )){
			// valid - do nothing
		}else if(type.toLowerCase() == 'mastercard' && number.length == 16 && (first2digits == '51' || first2digits == '52' || first2digits == '53' || first2digits == '54' || first2digits == '55')){
			// valid - do nothing
		}else if(type.toLowerCase() == 'american express' && number.length == 15 && (first2digits == '34' || first2digits == '37')){
			// valid - do nothing
		}else if(type.toLowerCase() == 'diners club' && number.length == 14 && (first2digits == '30' || first2digits == '36' || first2digits == '38')){
			// valid - do nothing
		}else if(type.toLowerCase() == 'discover' && number.length == 16 && first4digits == '6011'){
			// valid - do nothing
		}else if(type.toLowerCase() == 'enroute' && number.length == 15 && (first4digits == '2014' || first4digits == '2149')){
			// valid - do nothing
		}else if(type.toLowerCase() == 'jcb' && number.length == 16 && (first4digits == '3088' || first4digits == '3096' || first4digits == '3112' || first4digits == '3158' || first4digits == '3337' || first4digits == '3528')){
			// valid - do nothing
		}else{
			msg = "Invalid 'Credit Card Number' field.";
		}
	}
	return msg;
}

// Set Form not submitted on load
var formSubmitted = "no";

// Form Submission
function submitForm(form){
	var msg = "";
	// common
	if(getObj("First_Name").value == ""){
		msg += "- Missing 'First Name' field.\n";
	}
	if(getObj("Last_Name").value == ""){
		msg += "- Missing 'Last Name' field.\n";
	}
	if(getObj("Telephone").value == ""){
		msg += "- Missing 'Telephone' field.\n";
	}else{
		msg += checkPhone('Telephone', 'Telephone', 0, 0);
	}
	if(getObj("Email").value == ""){
		msg += "- Missing 'Email' field.\n";
	}else{
		msg += checkEmail('Email');
	}
	// commercial
	if(form == "frmCommercial"){
		/*if(getObj("Brief_Details").value == ""){
			msg += "- Missing 'Brief Details' field.\n";
		}*/
	}
	// residential
	else if(form == "frmResidential"){
		if(getObj("Property_Value").value == "NaN"){
			msg += "- Invalid 'Property Value ($)' field.\n";
		}else if(getObj("Property_Value").value != ""){
			msg += checkMoney('Property_Value', 'Property Value ($)', 0, 2);
		}
		if(getObj("Financing_Amount").value == "NaN"){
			msg += "- Invalid 'Amount of financing required ($)' field.\n";
		}else if(getObj("Financing_Amount").value != ""){
			msg += checkMoney('Financing_Amount', 'Amount of financing required ($)', 0, 2);
		}
		if(getObj("Purpose").value == ""){
			msg += "- Missing 'Purpose' field.\n";
		}
	}
	// more common
	if(getObj("Contact_Consent").checked != true){
		msg += "- Consent to contact you required.\n";
	}
	// check for errors and double submit before sending
	if(msg == ''){
		if(formSubmitted == "no"){
			formSubmitted = "yes";
			getObj("hdnSubmit").value = form;
			getObj(form).submit();
			return false;
		}else{
			alert("The form has already been submitted. Please wait for the form to be processed.");
			return false;
		}
	}else{
		getObj("hdnSubmit").value = "";
		alert("Please correct the follow errors:\n\n" + msg);
		return false;
	}
}

//-->