
/*
 * Trims whitespace from the string
 */
function trim(s) {
	return s.replace(/^\s*/, "").replace(/\s*$/, "");
}
function validateContactUs(form) {
	var errorBox = document.getElementById("errorBox");
	var errString = "";
	var nameMissing = false;
	var phoneEmailMissing = false;
	/* Trim all values */
	form.Name.value = trim(form.Name.value);
	if (form.Company) {
	  form.Company.value = trim(form.Company.value);
	}
	if (form.Title) {
	  form.Title.value = trim(form.Title.value);
	}
	if (form.Phone) {
	  form.Phone.value = trim(form.Phone.value);
	  if (!validatePhone(form.Phone)) {
	    return false;
	  }
	}
	if (form.Email) {
	  form.Email.value = trim(form.Email.value);
	  if (!validateEmail(form.Email)) {
	    return false;
	  }
	}
	if (form.Comments) {
	  form.Comments.value = trim(form.Comments.value);
	}
	if (form.Name.value.length == 0) {
		if (form.Phone.value.length == 0 && form.Email.value.length == 0) {
			errString = "Please provide your Name and either a Phone Number or Email.</br>";
		} else {
			errString = "Please provide your Name.</br>";
		}
	} else if (form.Phone.value.length == 0 && form.Email.value.length == 0) {
		errString = "Please provide a Phone Number or Email.</br>";
	}
	if (errString != "") {
		errorBox.style.display = "block";
		errorBox.innerHTML = errString;
		return false;
	}
	
	errorBox.style.display = "none";
	errorBox.innerHTML = "";	
	return true;
}
function validateEmail(obj) {
	obj.value = trim(obj.value);
	var errorBox = document.getElementById("invalidEmail");
	var errorBoxOverall = document.getElementById("errorBox");
    errorBoxOverall.style.display = "none";
    errorBoxOverall.innerHTML = "";
	var errString = "Invalid email, please try again.";
	var str = obj.value;
	var at = "@";
	var dot = ".";
	var lat = str.indexOf(at);
	var lstr = str.length;
	var ldot = str.indexOf(dot);
	if (obj.value.length > 0) {
		if (str.indexOf(at) == -1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.indexOf(at, (lat + 1)) != -1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.indexOf(dot, (lat + 2)) == -1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (str.indexOf(" ") != -1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
	}
	errorBox.style.display = "none";
	errorBox.innerHTML = "";
	return true;
}

// 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 false;
		}
	}
    // All characters are numbers.
	return true;
}
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 validatePhone(obj) {
	var errorBox = document.getElementById("invalidPhone");
	var errorBoxOverall = document.getElementById("errorBox");
    errorBoxOverall.style.display = "none";
    errorBoxOverall.innerHTML = "";
	var errString = "Invalid phone number, please try again.";
	var bracket = 3;
	obj.value = trim(obj.value);
	strPhone = obj.value;
	if (strPhone.length > 0) {
		if (strPhone.indexOf("+") > 1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (strPhone.indexOf("-") != -1) {
			bracket = bracket + 1;
		}
		if (strPhone.indexOf(".") != -1) {
			bracket = bracket + 1;
		}
		if (strPhone.indexOf("(") != -1 && strPhone.indexOf("(") > bracket) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		var brchr = strPhone.indexOf("(");
		if (strPhone.indexOf("(") != -1 && strPhone.charAt(brchr + 2) != ")") {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		if (strPhone.indexOf("(") == -1 && strPhone.indexOf(")") != -1) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
		s = stripCharsInBag(strPhone, validWorldPhoneChars);
		if (!isInteger(s) || s.length < minDigitsInIPhoneNumber) {
			errorBox.style.display = "block";
			errorBox.innerHTML = errString;
			obj.focus();
			return false;
		}
	}
	
	errorBox.style.display = "none";
	errorBox.innerHTML = "";
	return true;
}

