/* JavaScript Document for registration_form.html
 * Copyright 2009, Todd Lininger.
 * Developed for The Interval Group.
 */

function verifyRegistrationForm() {
	document.getElementById('js_check').value = 1;
	var _return = false;
	var required_fields_text = new Array(
		'First Name',
		'Last Name',
		'Mailing Address',
		'City',
		'State/Province',
		'Zip/Postal Code',
		'Country',
		'Phone',
		'E-mail Address'
	);
	var required_fields = new Array(
		document.getElementById('c_fname'),
		document.getElementById('c_lname'),
		document.getElementById('c_address'),
		document.getElementById('c_city'),
		document.getElementById('c_state'),
		document.getElementById('c_zip'),
		document.getElementById('c_country'),
		document.getElementById('c_homephone'),
		document.getElementById('c_email')
	);
	var error_message_txt = "";
	// Make sure all of the required fields are filled in
	for (var i=0; i<required_fields_text.length; i++) {
		if (required_fields[i].value == "") {
			required_fields[i].style.backgroundColor = "#fff6ee";
			error_message_txt = "Please complete all required fields.<br />";
		}
		else {
			required_fields[i].style.backgroundColor = "#fff";
		}
	}
	// If all fields are filled in, continue checking individual fields
	if (error_message_txt == "") {
		//Trim all fields
		required_fields[0].value = trim(required_fields[0].value);
		required_fields[1].value = trim(required_fields[1].value);
		required_fields[2].value = trim(required_fields[2].value);
		required_fields[3].value = trim(required_fields[3].value);
		required_fields[4].value = trim(required_fields[4].value);
		required_fields[5].value = trim(required_fields[5].value);
		// required_fields[6] cannot be trimmed because it is a drop-down box
		required_fields[7].value = trim(required_fields[7].value);
		// trimEmailString() removes ALL spaces
		required_fields[8].value = trimEmailString(required_fields[8].value);
		//Start error checking
		if (required_fields[0].value.length < 2 || required_fields[0].value.length > 64) {
			//First name is too short or too long
			error_message_txt += "Please check your first name.<br />";
		}
		if (required_fields[1].value.length < 2 || required_fields[1].value.length > 64) {
			//Last name is too short or too long
			error_message_txt += "Please check your last name.<br />";
		}
		if (required_fields[2].value.length < 6 || required_fields[2].value.length > 64) {
			//Address is too short or too long
			error_message_txt += "Please check your address.<br />";
		}
		/*if (validateZip(required_fields[5]) != 1) {
			error_message_txt += "Please check your zip/postal code.<br />";
		}*/
		if (checkInternationalPhone(required_fields[7].value) != 1) {
			error_message_txt += "Please check your phone number.<br />";
		}
		if (validateEmail(required_fields[8]) != 1) {
			error_message_txt += "Please check your e-mail address.<br />";
		}
	}
	if (error_message_txt == "") {
		_return = true;
	}
	document.getElementById('error_message').innerHTML = error_message_txt;
	return _return;
}

function trim(str) {
   return str.replace(/^\s+|\s+$/g,'');
}

function validateZip(field) {
	with (field) {
		noDashes = value.replace (/[^\d]/g, "");
		reNums = new RegExp(/^\s*\d+\s*$/);
		if (reNums.test(noDashes)) return 1;
		else return 0;
	}
}

function validateEmail(field) {
	with (field) {
		aPos = value.indexOf("@");
		dotPos = value.lastIndexOf(".");
		if (aPos < 1 || dotPos-aPos < 2) { return 0; }
		else { return 1; }
	}
}

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return 0;
    }
    // All characters are numbers.
    return 1;
}
function trimEmailString(s)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to 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 checkInternationalPhone(strPhone){
	var bracket = 3;
	strPhone = trimEmailString(strPhone);
	if (strPhone.indexOf("+") > 1) return 0;
	if (strPhone.indexOf("-") != -1) bracket = bracket+1;
	if (strPhone.indexOf("(") != -1 && strPhone.indexOf("(")>bracket) return 0;
	var brchr = strPhone.indexOf("(");
	if (strPhone.indexOf("(") != -1 && strPhone.charAt(brchr+2) != ")") return 0;
	if (strPhone.indexOf("(") == -1 && strPhone.indexOf(")") != -1) return 0;
	s = stripCharsInBag(strPhone,validWorldPhoneChars);
	if (isInteger(s) && s.length >= minDigitsInIPhoneNumber) return 1;
}