//Utility function called on page specific .js
function getReferrer() {
	if (document.referrer&&document.referrer!="") {
		return document.referrer;
	} else {
		return '';
	}
}

function validate() {

	var form = document.forms["subscribe"];
	//if we don't find the form, bail out
	if(!form) return false;
	var email = document.getElementById('email');
	var emailError = document.getElementById('email_error');
	emailError.innerHTML = "";

	
	//SECTION TWO - Set up boolean and regular expressions to test against
	//boolean for errors
	var boolHasErrors = false;
	//email
	var emptyreg = /\w{3,}/
	var emailreg = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
		
	if (email && !emptyreg.test(email.value)) {
		emailError.innerHTML += "Please enter an email address.";
		emailError.style.display = "block";
		boolHasErrors = true;
		email.className = "formfielderror";
	} else if (!emailreg.test(email.value)) {
		emailError.innerHTML += "Please enter a valid email address.";
		emailError.style.display = "block";
		email.className = "formfielderror";
		boolHasErrors = true;
	} else {
		emailError.innerHTML = "";
		emailError.style.className = "hide"
		email.className = "text_input";
	}
	//finally, return true or false
	if (boolHasErrors == true) { 
		return false;
	} else { 
		sendRequest(); 
	}
}


function validateForm(formToValidate) {


	var spinner = document.getElementById("formspinner");
	var submitButton = document.getElementById("formsubmit");
	var form = document.forms[formToValidate];

	//if we don't find the form, bail out
	if(!form) {
		spinner.style.visibility = "hidden";
		return false;
	} else {
		submitButton.style.display = "none";
		spinner.style.visibility = "visible";
	}
	
	//a very long function that handles many forms, but very repetitive
	
	//set a text field class for normal and medium width (partner page uses medium)
		var textFieldclassName;
		if (formToValidate == "partner") {
			textFieldclassName = "text_input medium";
		} else {
			textFieldclassName = "text_input";
		}

	//SECTION ONE - assign objects/elements to easy to use variable names
	// each section address different forms
	
	//Request Info forms used on all product pages
	if (formToValidate == "requestinfo") {
		var name = document.getElementById('Name');
		var phone = document.getElementById('Phone');
		var email = document.getElementById('EMail');
		var firm = document.getElementById('Firm');
		
		//we track these to make check the default input value
		var defaultName = "Enter Your Name";
		var defaultCompany = "Company";
		
		//related divs for error messaging
		var nameError = document.getElementById('name_error');
		var firmError = document.getElementById('firm_error');
		var phoneError = document.getElementById('phone_error');
		var emailError = document.getElementById('email_error');
	
		//we always empty out the error divs first
		nameError.innerHTML = "";
		firmError.innerHTML = "";
		phoneError.innerHTML = "";
		emailError.innerHTML = "";
		
	//Become a partner form on partners page
	} else if (formToValidate == "partner") {
		var name = document.getElementById('Name');
		var firm = document.getElementById('Firm');
		var email = document.getElementById('EMail');
		var phone = document.getElementById('Phone');
		
		var defaultName = "Name";
		var defaultCompany = "Company";
		
		//related divs for error messaging
		var nameError = document.getElementById('name_error');
		var phoneError = document.getElementById('phone_error');
		var emailError = document.getElementById('email_error');
		var firmError = document.getElementById('firm_error');
	
		//we always empty out the error divs first
		nameError.innerHTML = "";
		phoneError.innerHTML = "";
		emailError.innerHTML = "";
		firmError.innerHTML = "";
		
	//Request Support form
	}	else if (formToValidate == "support") {
		var firm = document.getElementById('Firm');
		var name = document.getElementById('Name');
		var email = document.getElementById('EMail');
		var phone = document.getElementById('Phone');
		var product = document.getElementById('Product');
		var version = document.getElementById('Version');
		var winver = document.getElementById('WinVer');
		var wordver = document.getElementById('WordVer');
		var imanver = document.getElementById('iManVer');
		var comments = document.getElementById('Comments');
		
		var defaultName = "Name";
		var defaultCompany = "Company";
		var defaultVersion = "Product Version";
		var defaultWinver = "Version of MS Windows";
		var defaultComments = "Nature of Problem: (Please provide detailed information, such as the exact error messages, steps to reproduce the problem, etc.)";
		
		//related divs for error messaging
		var nameError = document.getElementById('name_error');
		var firmError = document.getElementById('firm_error');
		var phoneError = document.getElementById('phone_error');
		var emailError = document.getElementById('email_error');
	
		//we always empty out the error divs first
		nameError.innerHTML = "";
		firmError.innerHTML = "";
		phoneError.innerHTML = "";
		emailError.innerHTML = "";

	//Contact Us form		
	}	else {
		var name = document.getElementById('Name');
		var phone = document.getElementById('Phone');
		var email = document.getElementById('Email');
		var firm = document.getElementById('Firm');
		
		var defaultName = "Contact Name";
		var defaultCompany = "Company";
		var defaultUsers = "Number of users";
		var defaultHear = "How did you hear about us?";
		
		//related divs for error messaging
		var nameError = document.getElementById('name_error');
		var phoneError = document.getElementById('phone_error');
		var emailError = document.getElementById('email_error');
		var firmError = document.getElementById('firm_error');
	
		//we always empty out the error divs first
		nameError.innerHTML = "";
		phoneError.innerHTML = "";
		emailError.innerHTML = "";
		firmError.innerHTML = "";
	}
	
	
	//SECTION TWO - Set up boolean and regular expressions to test against
	//boolean for errors
	var boolHasErrors = false;
	
	//set up our regular expressions
	//	must be at least 3 alphanumeric characters
	var emptyreg = /\w{2,}/
	//  must be numeric, one or more digits
	var isnumberreg = /\d{1,}/
	//email
	var emailreg = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
	//product version
	var prodreg = /[0-9]*\.?[0-9]+$/
	
	//SECTION THREE - start error checking
	//in each case I add a check for the object to prevent errors
	//so the format is: 	if (object and the regex test fails) { show error and set boolean to true } else { undo any error styles }

	//UNIVERSAL TESTS: these first tests, for name, phone, and email are common to all forms so we start with them
	if (name && (!emptyreg.test(name.value) || name.value == defaultName)) {
			nameError.innerHTML += "Please enter your name.";
			nameError.style.display = "block";
			name.className = "formfielderror";
			boolHasErrors = true;
	} else {
		nameError.innerHTML = "";
		nameError.className = "hide"
		name.className = textFieldclassName;
	}	
	if (phone && !emptyreg.test(phone.value)) {
		phoneError.innerHTML += "Please enter a phone number.";
		phoneError.style.display = "block";	
		phone.className ="formfielderror";
		boolHasErrors = true;
		
	} else if (checkPhone(phone.value) == false) {
		phoneError.innerHTML += "Please enter a valid phone number.";
		phoneError.style.display = "block";	
		phone.className = "formfielderror";
		boolHasErrors = true;
		
	} else {
		phoneError.innerHTML = "";
		phoneError.style.className = "hide"
		phone.className = textFieldclassName;
	}
	
	if (email && !emptyreg.test(email.value)) {
		emailError.innerHTML += "Please enter an email address.";
		emailError.style.display = "block";
		boolHasErrors = true;
		email.className = "formfielderror";
	} else if (!emailreg.test(email.value)) {
		emailError.innerHTML += "Please enter a valid email address.";
		emailError.style.display = "block";
		email.className = "formfielderror";
		boolHasErrors = true;
	} else {
		emailError.innerHTML = "";
		emailError.style.className = "hide"
		email.className = textFieldclassName;
	}
	
	if (firm && (!emptyreg.test(firm.value) || firm.value == defaultCompany)) {
		firmError.innerHTML += "Please enter a company name.";
		firmError.style.display = "block";
		firm.className = "formfielderror";
		boolHasErrors = true;
	}  else {
		firmError.innerHTML = "";
		firmError.className = "hide"
		firm.className = textFieldclassName;
	}
	
	//FORM SPECIFIC TESTS: now we move to tests specific to the forms
	
	// PRODUCTS FORM
	if (formToValidate == "requestinfo") {
		var users = document.getElementById('Users'); 
		var usersError = document.getElementById('users_error');
		if (users && form.Users.value == "0") {
			usersError.innerHTML += "Please enter the number of licensed users.";
			usersError.style.display = "block";
			users.className = "formfielderror";
			boolHasErrors = true;
		} else {
			usersError.innerHTML = "";
			usersError.className = "hide"
			users.className = "text_input";
		}
	
	// CONTACT US FORM
	} else if (formToValidate == "contact") {
		
		var hear = document.getElementById('HowDidYouHear');
		var hearError = document.getElementById('hear_error');
		var users = document.getElementById('Users'); 
		var usersError = document.getElementById('users_error');
		hearError.innerHTML = "";
		if (users && form.Users.value == "0") {
			usersError.innerHTML += "Please enter the number of licensed users.";
			usersError.style.display = "block";
			users.className = "formfielderror";
			boolHasErrors = true;
		} else {
			usersError.innerHTML = "";
			usersError.className = "hide"
			users.className = "text_input";
		}
		
		if (hear && (!emptyreg.test(hear.value) || hear.value == defaultHear)) {
			hearError.innerHTML += "Please how you heard about us.";
			hearError.style.display = "block";
			hear.className = "formfielderror";
			boolHasErrors = true;
		} else {
			hearError.innerHTML = "";
			hearError.className = "hide"
			hear.className = "text_input";
		}

	//REQUEST SUPPORT FORM
	} else if (formToValidate == "support") {
		
		var product_error = document.getElementById('product_error');
		var version_error = document.getElementById('version_error');
		var winver_error = document.getElementById('winver_error');
		var comments_error = document.getElementById('comments_error');
		
		product_error.innerHTML = "";
		version_error.innerHTML = "";
		winver_error.innerHTML = "";
		comments_error.innerHTML = "";

		if (version && version.value == defaultVersion) {
			version_error.innerHTML += "Please enter a product version.";
			version_error.style.display = "block";
			version.className = "formfielderror";
			boolHasErrors = true;
		} else if (!prodreg.test(version.value)) {
			version_error.innerHTML += "Please enter a numeric product version as x, x.x or x.x.x";
			version_error.style.display = "block";
			version.className = "formfielderror";
			boolHasErrors = true;
		}	else {
			version_error.innerHTML = "";
			version_error.className = "hide"
			version.className = "text_input";
		}
		
		if (winver && (!emptyreg.test(winver.value) || winver.value == defaultWinver)) {
			winver_error.innerHTML += "Please enter the version of MS Windows.";
			winver_error.style.display = "block";
			winver.className = "formfielderror";
			boolHasErrors = true;
		} else {
			winver_error.innerHTML = "";
			winver_error.className = "hide"
			winver.className = "text_input";
		}
		
		if (comments && (!emptyreg.test(comments.value) || comments.value == defaultComments)) {
			comments_error.innerHTML += "Please describe the nature of the problem in detail.";
			comments_error.style.display = "block";
			comments.className = "formfielderror";
			boolHasErrors = true;
		} else {
			comments_error.innerHTML = "";
			comments_error.className = "hide"
			comments.className = "text_input";
		}
		
		if (product && product.value == "") {
			product_error.innerHTML += "Please choose a product.";
			product_error.style.display = "block";
			product.className = "formfielderror";
			boolHasErrors = true;
		} else {
			product_error.innerHTML = "";
			product_error.className = "hide"
			product.className = "text_input";
		}
	} 

	//finally, return true or false
	if (boolHasErrors == true) { 
		submitButton.style.display = "";
		spinner.style.visibility = "hidden";
		return false;
	} else { 
		sendRequest(); 
	}
}

function checkPhone(num) {
	var numberCount = 0;
	for (var i=0; i < num.length; i++) {
		if (!isNaN(parseInt(num.charAt(i)))) {
			numberCount++;
		}
	}
	if (numberCount > 6) {
		return true;
	} else {
		return false;
	}
}