// JavaScript Document
// Generic sitewide scripts

function addSearchFormValidation()
{
	//adds validation to #searchForm
	if (document.getElementById("searchForm"))
	{
		document.getElementById("searchForm").onsubmit=function(){return(validateSearchForm());};
	}
}

function validateSearchForm()
{	
	//Must run removeErrorMessages() a couple times to get rid off all the messages for some reason...
	removeErrorMessages();
	removeErrorMessages();
	removeErrorMessages();
	removeErrorMessages();

	var form = document.getElementById("searchForm");
	var isError = false

	//Check if all the required fields are filled in
	//****************************************************************************************************

	if (form.searchPhrase.value === "")
	{
		addErrorMessage(form.searchPhrase,"Please enter what you want to search for.");
		isError = true;
	}

	//End checking for filled in fields
	//****************************************************************************************************

	// if there are any errors, then don't send the info...
	if (isError === true) 
	{
		return false;
	}
	// form is valid! Send info on to the VBS!
	form.validated.value = "true";
	return true;
}


//check for proper phone number format
function isPhoneNumber(str)
{
	if (str.length < 12) //check for required length
	{
		return false;
	}
	if ((str.charAt(3) != "-") || (str.charAt(7) != "-")) //check for 2 required dashes in the phone number
	{
		return false;
	}
	for (var j = 0; j < str.length; j++) // use isNumber() to check if all characters are numeric
	{
		if (str.charAt(j) == "-") 
		{
			j++;
		}
		if (!isNumber(str.charAt(j)))
		{
			return false;
		}
	}
	return true;
}


function addLoginFormValidation()
{
	//adds validation to #searchForm
	if (document.getElementById("loginForm"))
	{
		document.getElementById("loginForm").onsubmit=function(){return(validateLoginForm());};
	}
}

// checks the loginForm fields to see if they are filled in before submitting.
function validateLoginForm()
{	
	//Must run removeErrorMessages() a couple times to get rid off all the messages for some reason...
	removeErrorMessages();
	removeErrorMessages();
	removeErrorMessages();
	removeErrorMessages();

	var form = document.getElementById("loginForm");
	var isError = false

	//Check if all the required fields are filled in
	//****************************************************************************************************

	if (form.userId.value === "")
	{
		addErrorMessage(form.userId,'Enter your company\'s ID number.');
		isError = true;
	}

	if (form.password.value === "")
	{
		addErrorMessage(form.password,'Please enter your password.');
		isError = true;
	}


	//End checking for filled in fields
	//****************************************************************************************************

	// if there are any errors, then don't send the info...
	if (isError === true) 
	{
		return false;
	}
	// form is valid! Send info on to the VBS!
	form.validated.value = "true";
	return true;
}

//checks whether an individual character is numeric or not
function isNumber(str)
{
	if (str == "") { return false; }
	if (str < "0") { return false; }
	if (str > "9") { return false; }
	return true;
}








// Generic Form Functions
// cleans any string of unwanted junk input and also changes certain characters to words
function cleanOutJunk(str)
{
	if(str !== "")
	{
		str = str.replace(/\s+|^\s|\s$/g," "); //remove multiple white spaces
		str = str.replace(/&/g," and "); //replaces & with and
		str = str.replace(/'/g,"`"); //replaces ' with `
		str = str.replace(/;+/g,","); //replaces ; or . with ,
		str = str.replace(/\.+/g,"."); //replaces multiple . with only one
		str = str.replace(/\s+,|\s+\./g,","); //replaces ' ,' or ' .' with ','
		str = str.replace(/,+/g,","); //replaces multiple , characters with only 1
		str = str.replace(/,\b/g,", "); //replaces , with no space after it with , with a space after it
		str = str.replace(/^\s+|\s+$|^,+|,+$|^\.|^\b\s+|\.$/g,""); //removes white space at beginning and end along with commas at the beginning.
		str = str.replace(/^\s+|\s+$|^,+|,+$|^\.|^\b\s+/g,""); //removes white space at beginning and end along with commas at the beginning.
		str = str.replace(/\s+|^\s|\s$/g," "); //remove multiple white spaces
	}
	return str;
}

//checks if the email address is proper format
function isEmail(str)
{
	var regex =/^[\-_.a-z0-9]+@(([\-_a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
	return regex.test(str);
}

// Phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
//****************************************************************************************************
// 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 number.
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 checkInternationalPhone(strPhone)
{
	var s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function removeErrorMessages(formElement)
{
	// clear a single error message
	if (formElement)
	{
		spanElements = formElement.parentNode.getElementsByTagName("SPAN");
		
		for (var i=0; i<spanElements.length; i++)
		{
			if ((spanElements[i].className) && (spanElements[i].className=="validationError"))
			{
				spanElements[i].parentNode.removeChild(spanElements[i]);
			}
		}
		
	}
	
	// clear all error messages
	else 
	{

		var thisFormElement = document.getElementsByTagName("FORM");
		
		// loop through all forms
		for (var j=0; j<thisFormElement.length; j++)
		{
			// find all <span> tags within this form
			spanElements = thisFormElement[j].getElementsByTagName("SPAN");
			
			// loop through all the <span> tags
			for (var i=0; i<spanElements.length; i++)
			{
				if ((spanElements[i].className) && (spanElements[i].className=="validationError"))
				{
					// remove the <span> with the validation error message inside it
					spanElements[i].parentNode.removeChild(spanElements[i]);
				}
			}
			
		}
		
	}
}

// adds error messages to fields that have filed validation.
function addErrorMessage(field, message)
{
	// create error message inside a <span> for the given field and apply class="validationError"
	var errorMessage=document.createElement("span");
	var text = document.createTextNode(message);
	errorMessage.appendChild(text);		
	errorMessage.className="validationError";
	field.parentNode.insertBefore(errorMessage, null);
}


function checkSpecialLinks()
{
	// grab all links and loop through them checking for anchors that need special functions
	var as = document.getElementsByTagName("a");
	for(var i=0;i<as.length;i++)
	{
		//Popup Windows. Rel attribute for anchor must be set to "popup" 
		if ((as[i].getAttribute("rel")) && (as[i].getAttribute("rel").indexOf("popup") != -1))
		{
			// anchor tag must look like this: <a href="foo.bar" rel="popup,window name,height,width">Link</a>
			as[i].onclick=function(){return(popup(this));};
		}

		//Close Window. Rel attribute for anchor must be set to "close"
		if (as[i].getAttribute("rel") == "close")
		{
			// close popup window buttons. This script will put the text into the anchor if the browser can use the script. If not, then there will be not button visible.
			as[i].innerHTML = "Close Window";
			as[i].className=as[i].className+ "closeWindow";
			as[i].onclick=function(){return(closePopup(this));};
		}
	}
}

function popup(anchorTag)
{
	var rel = anchorTag.getAttribute("rel").split(",");
	// link needs to be formatted like this: <a href="#" rel="popup,NAME,600,600">Text</a>
	var windowAttributes = "height=" + rel[2] + ",width=" + rel[3] + ",menubar,resizable,scrollbars";
	window.open(anchorTag.getAttribute("href"),rel[1],windowAttributes);
	return false;
}

function closePopup(windowName)
{
	window.close(windowName);
}








// addLoadEvent()
// Adds event to window.onload without overwriting currently assigned onload functions.
// Function found at Simon Willison's weblog - http://simon.incutio.com/
function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
    	window.onload = func;
	} 
	else 
	{
		window.onload = function(){oldonload();func();};
	}
}
addLoadEvent(addSearchFormValidation);
addLoadEvent(addLoginFormValidation);
addLoadEvent(checkSpecialLinks)
