

// 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);
}




// 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();};
	}
}