var validationFunction = new Object();
validationFunction["required"] = val_isRequired;
validationFunction["zipCode"] = val_isZipCode;
validationFunction["numeric"] = val_isNumeric;
validationFunction["email"] = val_isEmail;
validationFunction["phoneNumber"] = val_isPhoneNumber;
validationFunction["social"] = val_social;
function validate( form ) {
	if(document.getElementById('validationErrors'))
		document.getElementById('validationErrors').parentNode.removeChild(document.getElementById('validationErrors'));
	var rtn = true;
	form.id = (!form.id)? "myForm" : form.id;
	var inputs = document.getElementById(form.id).getElementsByTagName('input');
	var selects = document.getElementById(form.id).getElementsByTagName('select');
	var textareas = document.getElementById(form.id).getElementsByTagName('textarea');
	inputs = val_combineObjects(selects, inputs);
	inputs = val_combineObjects(inputs, textareas);
	rtn = val_validateInputs(inputs, form.id);
	form.id = (form.id == "myForm")? '': form.id;
	return rtn;
}
function val_validateInputs(inputs, formID){
	var valid = true;
	for(x=0; x < inputs.length; x++){
		inputs[x].invalid = false, inputs[x].errormsg = [];
		var class1 = (inputs[x].className)? inputs[x].className : '';
		while( class1.indexOf('[') != -1 ) {
			var start = (class1.indexOf('[')+1), end = class1.indexOf(']'), func = class1.slice(start,end), key = '['+func+']';
			if( valid == true && typeof validationFunction[func] == 'function' )
				valid = validationFunction[func](inputs[x]);
			else if(typeof validationFunction[func] == 'function')
				validationFunction[func](inputs[x]);
			else
				inputs[x].myName = func;
			class1 = class1.replace(key,'');
		}
		if(!inputs[x].myName)
			inputs[x].myName = inputs[x].name;
	}
	return (valid)? true:val_printErrors(inputs, formID);
}
function val_printErrors( inputs, formID ) {
	var myForm = document.getElementById(formID);
	var div = document.createElement('div');
	div.id='validationErrors';
	for(var x=0; x<inputs.length; x++){
		if(inputs[x].errormsg.length > 0) {
			div.appendChild(document.createTextNode(inputs[x].myName+' has the following error: '));
			for(var y=0; y<inputs[x].errormsg.length; y++) {
				var para = document.createElement('li');
				div.appendChild(para.appendChild(document.createTextNode(inputs[x].errormsg)));
			}
			div.appendChild(document.createElement('br'));
		}
		inputs[x].errormsg = null;
	}
	myForm.insertBefore(div, myForm.firstChild);
	document.getElementById('validationErrors').className = "validationErrors";
	return false;
}
function val_isNumeric(field) {
	field.value = val_trim(field.value);
	var RegExp = /^(-)?(\d*)(\.?)(\d*)$/;
	if( !field.value.match(RegExp) ) {
		field.errormsg.push('Value is not numeric.');
		val_falsify(field)
	}
	return (field.invalid)? false:val_cleanse(field);
}
function val_social(field) {
	field.value = val_trim(field.value);
	if(field.value.length == 0)
		return (field.invalid)? 'false':val_cleanse(field);
	var reg = /^\d{3}[\-]\d{2}[\-]\d{4}$/;
	if(reg.test(field.value))
		return (field.invalid)? 'false':val_cleanse(field);
	else {
		field.errormsg.push('Not a valid social.');
		return (field.invalid)? 'false':val_falsify(field);
	}
}
function val_isEmail(field) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	field.value = val_trim(field.value);
	if(field.value.length == 0)
		return (field.invalid)? false:val_cleanse(field);
	if(reg.test(field.value) == false) {
		field.errormsg.push('Not a valid email address.');
		return (field.invalid)? false:val_falsify(field);
	}
	else
		return (field.invalid)? false:val_cleanse(field);
}
function val_isPhoneNumber(field) {
	field.value = val_stripSpaces(field.value);
	if(field.value.length == 0)
		return (field.invalid)? false:val_cleanse(field);
    var regex = /^(\()?(\d{3})([\)-\. ])?(\d{3})([-\. ])?(\d{4})$/;
    if( regex.test(field.value) )
    	return (field.invalid)? false:val_cleanse(field);
    else {
    	field.errormsg.push('Not a valid phone number.');
    	return (field.invalid)? false:val_falsify(field);
    }
    return false;
}
function val_isZipCode(field) {
	field.value = val_trim(field.value);
	if(field.value.length == 0)
		return (field.invalid)? false:val_cleanse(field);
	var reg = /^\d{5}([\-]\d{4})?$/;
	if( reg.test(field.value) )
		return (field.invalid)? 'false':val_cleanse(field);
	else {
		field.errormsg.push('Not a valid zip code.');
		return (field.invalid)? 'false':val_falsify(field);
	}
}
function val_isRequired(field) {
	fieldValue = val_stripSpaces(field.value);
	if(fieldValue.length < 1) {
		field.errormsg.push('This field is required.');
		return val_falsify(field);
	}
	else
		return (field.invalid)? false:val_cleanse(field);
}
function val_falsify(field){
	field.invalid = true;
	if( field.nodeName != "select" && field.nodeName != "SELECT" )
		field.style.background = "#e47579";
	return false;
}
function val_cleanse(field){
	if( field.nodeName != "select" && field.nodeNAme != "SELECT" )
		field.style.background = "#FFF";
	return true;
}
function val_stripSpaces(fieldValue) {
	while( fieldValue.indexOf(' ') != -1 )
		fieldValue = fieldValue.replace(/ /,'');
	return fieldValue;
}
function val_trim(fieldValue) {
	fieldValue = fieldValue.replace(/^\s+/,"");
	fieldValue = fieldValue.replace(/\s+$/,"");
	return fieldValue;
}
function val_combineObjects(one, two) {
	var myObj = [];
	for( var x = 0; x < one.length; x++ )
		myObj[myObj.length] = one[x];
	for( var y = 0; y < two.length; y++ )
		myObj[myObj.length] = two[y];
	return myObj;
}
var val_o;
if( typeof window.onload == 'function' ) {
	val_o = window.onload;
}
window.onload = function() {
	if( typeof val_o == 'function' )
		val_o();
	if( location.search.indexOf('mailStatus=') != -1 ) {
		if( location.search.indexOf('successful') != -1 ) {
			var message = 'Thank you for contacting us! Your message has been sent successfully.';
			var header = 'Thanks!';
		}
		else {
			var header = 'Sorry!';
			var message = 'We are sorry, but your e-mail did not go through. Please try sending it at a later time.';
		}
		var close = document.createElement('input');
		close.type = 'button'; close.value = 'Close Window'; close.onclick = function (){ location = location.pathname; };
		var shade = document.createElement('div');var popupWindow = document.createElement('div');
		var height = document.getElementsByTagName('html')[0].offsetHeight;
		var width = document.getElementsByTagName('html')[0].offsetWidth;
		var windowLeft = ((width-300)/2)+'px';
		var windowTop = '100px';popupWindow.id = 'popupWindow';shade.id='shade';
		document.getElementsByTagName('html')[0].style.height = height+'px';
		document.getElementsByTagName('html')[0].style.overflow = 'hidden';
		var h2 = document.createElement('h3');h2.appendChild(document.createTextNode(header));
		popupWindow.appendChild(h2);popupWindow.appendChild(document.createElement('br'));
		popupWindow.appendChild(document.createTextNode(message));
		popupWindow.style.position = 'absolute';popupWindow.style.backgroundColor = '#fff';popupWindow.style.textAlign = 'left';
		popupWindow.style.padding = '30px';popupWindow.style.zIndex = 41;popupWindow.style.top = windowTop;
		popupWindow.style.left = windowLeft;popupWindow.style.width = '300px';popupWindow.appendChild(document.createElement('br'));
		popupWindow.appendChild(document.createElement('br'));popupWindow.appendChild(close);
		shade.style.backgroundColor = "#000";shade.style.height = '2500px';shade.style.width = '100%';
		shade.style.opacity = '.5';shade.style.position = 'absolute';shade.style.top = '0px';
		shade.style.left = '0px';shade.style.filter = 'alpha(opacity=50)';shade.style.zIndex = 40;
		document.getElementsByTagName('body')[0].appendChild(shade);
		document.getElementsByTagName('body')[0].appendChild(popupWindow);
	
	}
}
