﻿function getTagFromIdentifierAndTitle(tagName, identifier, title)
{
	var len = identifier.length;
	var tags = document.getElementsByTagName(tagName);

	for (var i=0; i < tags.length; i++)
	{
		var tempString = tags[i].id;
		if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len))
		{
  			return tags[i];
		}
	}
	return null;
}

function shouldHideElement(elementId, shouldHide)
{
	if (shouldHide == true && document.getElementById(elementId))
  		document.getElementById(elementId).style.display = "none";
	else
		document.getElementById(elementId).style.display = "block";
}

function shouldShowFirstNameValidation(errorMsgElementId, strValue)
{			
	if (validateFirstName(strValue))
		shouldHideElement(errorMsgElementId, true);
}

function shouldShowLastNameValidation(errorMsgElementId, strValue)
{			
	if (validateLastName(strValue))
		shouldHideElement(errorMsgElementId, true);
}

function shouldShowCompanyValidation(errorMsgElementId, strValue)
{			
	if (validateCompany(strValue))
		shouldHideElement(errorMsgElementId, true);
}

function shouldShowTitleValidation(errorMsgElementId, strValue)
{			
	if (validateTitle(strValue))
		shouldHideElement(errorMsgElementId, true);
}

function shouldShowEmailValidation(errorMsgElementId, strValue)
{			
	shouldHideElement(errorMsgElementId, validateEmail(strValue));
}

function shouldShowPhoneValidation(errorMsgElementId, strValue)
{	
  	shouldHideElement(errorMsgElementId, validatePhone(strValue)); 
}

function shouldShowMessageValidation(errorMsgElementId, strValue)
{			
	if (validateMessage(strValue))
		shouldHideElement(errorMsgElementId, true);
}
 	
function validateValueExists(strValue)
{
	if (strValue && strValue.length > 0)
		return true;
	else
		return false;
}

function validateFirstName(strValue)
{
	return validateValueExists(strValue);
}
  	
function validateLastName(strValue)
{
	return validateValueExists(strValue);
}

function validateCompany(strValue)
{
	return validateValueExists(strValue);
}

function validateTitle(strValue)
{
	return validateValueExists(strValue);
}

function validateEmail(strValue)
{
	var objRegExp  = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;
	 		
	return objRegExp.test(strValue);
}

function validatePhone(strValue)
{
	if (validateValueExists(strValue))
	{
		var objRegExp  = /^(\(?\d\d\d\)?)?( |-|\.)?\d\d\d( |-|\.)?\d{4,4}(( |-|\.)?[ext\.]+ ?\d+)?$/i;
	 		
		return objRegExp.test(strValue); 
	}
	else
	{
		return true;
	}
}

function validateMessage(strValue)
{
	return validateValueExists(strValue);
}

function canSubmitForm()
{
	if (validateFirstName(getTagFromIdentifierAndTitle("input", "TextField", "FirstName").value)
		&& validateLastName(getTagFromIdentifierAndTitle("input", "TextField", "LastName").value)
		&& validateCompany(getTagFromIdentifierAndTitle("input", "TextField", "Company").value)
		&& validateTitle(getTagFromIdentifierAndTitle("input", "TextField", "Title").value)
		&& validateEmail(getTagFromIdentifierAndTitle("input", "TextField", "Email").value)
		&& validatePhone(getTagFromIdentifierAndTitle("input", "TextField", "Phone").value)
		&& validateMessage(getTagFromIdentifierAndTitle("textarea", "TextField", "Message").value))
		SharepointsBuiltInSubmitHandler();
	else
		shouldShowFormValidation();
}

function shouldShowFormValidation()
{
	shouldHideElement("FirstNameValidationError", validateFirstName(getTagFromIdentifierAndTitle("input", "TextField", "FirstName").value));
	shouldHideElement("LastNameValidationError", validateLastName(getTagFromIdentifierAndTitle("input", "TextField", "LastName").value));
	shouldHideElement("CompanyValidationError", validateCompany(getTagFromIdentifierAndTitle("input", "TextField", "Company").value));
	shouldHideElement("TitleValidationError", validateTitle(getTagFromIdentifierAndTitle("input", "TextField", "Title").value));
	shouldHideElement("EmailValidationError", validateEmail(getTagFromIdentifierAndTitle("input", "TextField", "Email").value));
	shouldHideElement("PhoneValidationError", validatePhone(getTagFromIdentifierAndTitle("input", "TextField", "Phone").value));
	shouldHideElement("MessageValidationError", validateMessage(getTagFromIdentifierAndTitle("textarea", "TextField", "Message").value));
}

var SharepointsBuiltInSubmitHandler;
function connectContactFormValidation()
{		
	getTagFromIdentifierAndTitle("input", "TextField", "FirstName").onchange = function(){ shouldShowFirstNameValidation("FirstNameValidationError", this.value);};
	getTagFromIdentifierAndTitle("input", "TextField", "LastName").onchange = function(){ shouldShowLastNameValidation("LastNameValidationError", this.value);};
	getTagFromIdentifierAndTitle("input", "TextField", "Company").onchange = function(){ shouldShowCompanyValidation("CompanyValidationError", this.value);};
	getTagFromIdentifierAndTitle("input", "TextField", "Title").onchange = function(){ shouldShowTitleValidation("TitleValidationError", this.value);};
	getTagFromIdentifierAndTitle("input", "TextField", "Email").onchange = function(){shouldShowEmailValidation("EmailValidationError", this.value);};	
	getTagFromIdentifierAndTitle("input", "TextField", "Phone").onchange = function(){shouldShowPhoneValidation("PhoneValidationError", this.value);};
	getTagFromIdentifierAndTitle("textarea", "TextField", "Message").onchange = function(){ shouldShowMessageValidation("MessageValidationError", this.value);};
	SharepointsBuiltInSubmitHandler = getTagFromIdentifierAndTitle("input", "SaveItem", "").onclick;
	getTagFromIdentifierAndTitle("input", "SaveItem", "").onclick = function(){canSubmitForm();};
	
	if (document.forms[0].action.toLowerCase().indexOf("source") < 0)
	{
		if (document.forms[0].action.indexOf("?") < 0)
			document.forms[0].action += '?source=ContactThankYou.aspx';
		else
			document.forms[0].action += '&source=ContactThankYou.aspx';
	}
}

_spBodyOnLoadFunctionNames.push("connectContactFormValidation");

