﻿function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
  {alert(alerttxt);return false}
else {return true}
}
}

function validate_form(thisform)
{
with (thisform)
{

if (validate_required(Contact_FullName,"Name must be filled out!")==false) {Contact_FirstName.focus();return false}
if (validate_required(Contact_FullName,"Name must be filled out!")==false) {Contact_LastName.focus();return false}
if (validate_required(Contact_Email,"Email Address must be filled out!")==false) {Contact_Email.focus();return false}

}
}

var FormValidator = {
	execFuncOnSubmit:function(){},
	buttonClicked:false
};
// Namespace Global Variables
	FormValidator.activeForm='';
	FormValidator.errorClassName='form-error';
	FormValidator.formId='';
	FormValidator.rdoGroupName='';
	FormValidator.cbxGroupName='';
	FormValidator.count=0;
	FormValidator.errors=0;
	FormValidator.errorItemList='';
	FormValidator.ReValidate=function(v){
		if(typeof(FormValidator.formId)!=='undefined'&&FormValidator.formId.length>0){
			var f=document.getElementById(FormValidator.formId);
		}else{
			var f=document.forms[0];	
		}
		if(typeof(v)!=='undefined'&&v==='reset'){
			for(var i=0;i<f.length;i++){
				el=f.elements[i];
				FormValidator.Helpers.removeEventListener(el,"blur",FormValidator.ReValidate,false);
				FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
				FormValidator.Helpers.remove_errorClassName(el);
			}
			FormValidator.show_errorMsg(false);
		}else{
			FormValidator.Validate(f);
		}
	};
	FormValidator.ByPassSecWord=false;
// Helper Object containing common methods
	FormValidator.Helpers = {
		get_parentElement:function(obj){if(typeof(obj)!=='undefined'){return(obj.parentNode||obj.parentElement);}},
		get_msgLengthAsBoolean:function(msg){if(typeof msg !== 'undefined' && msg.length === 0){return false;}else if(typeof(msg)!=='undefined'&&msg.length>0){return true;}return;},
		create_errorMarkers:function(el){var d=document;FormValidator.markerElement=d.createElement('span');FormValidator.markerText=d.createTextNode('!');FormValidator.markerElement.className=FormValidator.errorClassName;FormValidator.markerElement.id=el.id+'_span';FormValidator.markerElement.appendChild(FormValidator.markerText);},
		remove_errorMarkers:function(spanID){var oSpan=document.getElementById(spanID);if(oSpan){oSpan.parentNode.removeChild(oSpan);}return;},
		remove_errorClassName:function(el){if(el.className.indexOf(FormValidator.errorClassName)>-1){el.className=el.className.replace(FormValidator.errorClassName,'');}},
		attachEventListener:function(target, eventType, functionRef, capture){if(typeof target.addEventListener!="undefined"){target.addEventListener(eventType,functionRef,capture);}else if(typeof target.attachEvent!="undefined"){target.attachEvent("on"+eventType,functionRef);}else{return false;}return true;},
		removeEventListener:function(target, eventType, functionRef, capture){
			if(typeof target.removeEventListener!="undefined"){
				target.removeEventListener(eventType, functionRef, capture);
			}else if(typeof target.detachEvent!="undefined"){
				target.detachEvent("on"+eventType,functionRef);
			}else{
				return false;
			}
		}
	};
	
// Show Error Message
	FormValidator.show_errorMsg=function(b){
		var oMsgContainerId;
		if(FormValidator.activeForm!=='frmMailtoComments'){
			oMsgContainerId="f_error";
		}else{
			oMsgContainerId=FormValidator.activeForm+'_error';
		}
		var d=document,oDiv=d.getElementById(oMsgContainerId);
		var msgHeaderClassName='alert';
		var msgHeaderText='We\'ve encountered some errors on the form that need your attention<br>';
		var msgBodyText='Please correct the fields below as indicated by the error triangles. <span class="error-hint">(hint: hover your mouse arrow over the triangle for a detailed explanation of the error).</span>';
		if(oDiv){
			if(b){
				if(oDiv.style.display!=='block'&&oDiv.style.display!==''){
					var errHeader=document.createElement('span');
					var errMsg=document.createElement('span');
					errHeader.innerHTML=msgHeaderText;
					errHeader.className=msgHeaderClassName;
					errMsg.innerHTML=msgBodyText;
					oDiv.appendChild(errHeader);
					oDiv.appendChild(errMsg);
					oDiv.style.display='block';
					if(typeof(FormValidator.ResizePanel)!=='undefined'){
						FormValidator.ResizePanel();
					}
					if(typeof(FormValidator.JumpToMessage)!=='undefined'&&FormValidator.JumpToMessage===true){
						oDiv.scrollIntoView();
					}
				}
			}else{
				oDiv.innerHTML='';
				oDiv.style.display='none';
				if(typeof(FormValidator.ResizePanel)!=='undefined'){
					FormValidator.ResizePanel();
				}
			}
		}
	};
	
// Validators
	FormValidator.Validators={
		validate_Email:function(v){
			var objRegExp = /^([a-zA-Z0-9_]|\-|\.)+@(([a-zA-Z0-9_]|\-)+\.)+[a-zA-Z]{2,4}$/;
			var objEmailRegExp = new RegExp(objRegExp);
			return objEmailRegExp.test(v);
		},
		validate_Phone:function(v){
			var objRegExp = /^\([1-9]\d{2}\)\s?\d{3}\-|\.\d{4}$/;;
			return objRegExp.test(v);
		},
		validate_InputType:function(e,what){
			var key,keyChar,regexp;
			if(window.event){key=e.keyCode;}else if(e.which){key=e.which;}
			keyChar=String.fromCharCode(key);
			switch(what.toLowerCase()){
				case 'alpha':
					regexp=/[a-zA-Z\-\']|\0|[\b]|\t/;return regexp.test(keyChar);
				case 'alphanumeric':
					regexp=/[a-zA-Z]|\d|\0|[\b]|\t/;
					return regexp.test(keyChar);
				case 'integer':
					regexp=/\d|\0|[\b]|\t/;
					return regexp.test(keyChar);
				case 'decimal':
					regexp=/\d|\.|\0|[\b]|\t/;
					return regexp.test(keyChar);
				case 'email':
					regexp=/\S|\t/;
					return regexp.test(keyChar);
				default:
					break;
			}
		},
		validate_InputLength:function(e,args){
			if(window.event){key=e.keyCode;el=e.srcElement}else if(e.which){key=e.which;el=e.target};
			var regexp=/(48)|(49)|(50)|(51)|(52)|(53)|(54)|(55)|(56)|(57)|(96)|(97)|(98)|(99)|(100)|(101)|(102)|(103)|(104)|(105)/;
			var limit=args[0],id=args[1],tabTarget;
			if(regexp.test(key)){
				if(el.value.length==limit){
					try{
						for(i=0;i<document.forms[0].length;i++){
							if(document.forms[0].elements[i].id.indexOf(id)>-1){
								tabTarget=document.forms[0].elements[i];
								break;
							}
						}
						window.setTimeout('',500);
						tabTarget.focus();
						tabTarget.select();
					}
					catch(err){
					
					}
				}
			}
		},
		validate_TextBox:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(el.value.length === 0){
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title=el.title+' is required and cannot be left blank.';
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
			}else{
				if(el.value.length > 0){
					if(el.id.toLowerCase().indexOf("email") > -1){
						if(!FormValidator.Validators.validate_Email(el.value)){
							errors+=1;
							el.className+=' '+FormValidator.errorClassName;
							FormValidator.Helpers.create_errorMarkers(el);
							FormValidator.markerElement.title=el.title+' does not appear to contain a valid email address. (exampe: name@address.com)';
							FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
						}
					}else if((el.id.toLowerCase().indexOf("phone") > -1)||(el.id.toLowerCase().indexOf("fax") > -1)){
						if(!FormValidator.Validators.validate_Phone(el.value)){
							errors+=1;
							el.className+=' '+FormValidator.errorClassName;
							FormValidator.Helpers.create_errorMarkers(el);
							FormValidator.markerElement.title=el.title+' does not appear to contain a valid phone or fax number.';
							FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
						}
					}
				}
			}
			return errors;
		},
		validate_Password:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(el.value.length === 0){
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title=el.title+' is required and cannot be left blank.';
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
				
			}else{
				if(typeof(FormValidator.Password)!=='undefined'&&typeof(FormValidator.ConfirmPassword)!=='undefined'){
					if(FormValidator.Password.value!==FormValidator.ConfirmPassword.value){
						errors+=1;
						el.className+=' '+FormValidator.errorClassName;
						FormValidator.Helpers.create_errorMarkers(el);
						FormValidator.markerElement.title='Your passwords do not match.  Please re-type them and try again';
						FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
					}
				}
			}
			return errors;
		},
		validate_TextArea:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(el.value.length === 0){
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title=el.title+' is required and cannot be left blank.';
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
			}
			return errors;
		},
		validate_SelectOne:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if((el.options[el.selectedIndex].value === 0)||(el.options[el.selectedIndex].value==='')){
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title='A selection is required for '+el.title;
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
			}
			return errors;
		},
		validate_SelectMultiple:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(el.selectedIndex===-1||el.options[el.selectedIndex].value===''){
				if(el.selectedIndex===0){el.selectedIndex=-1;}
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title='At least one item must be selected for' +el.title;
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
			}
			return errors;
		},
		validate_RadioButton:function(el){
			var d=document,errors=0,count=0,rdoGroup;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(el.name.length > 0){
				if(el.name.toLowerCase()!==FormValidator.rdoGroupName.toLowerCase()){
					FormValidator.rdoGroupName=el.name;
					rdoGroup=d.getElementsByName(FormValidator.rdoGroupName);
					if(typeof(rdoGroup)!=='undefined'){
						for(var x=0;x<rdoGroup.length;x++){
							if(rdoGroup[x].checked){
								count+=1;
								break;
							}
						}
					}
					if(count===0){
						errors+=1;
						el.className+=' '+FormValidator.errorClassName;
						FormValidator.Helpers.create_errorMarkers(el);
						FormValidator.markerElement.title='A selection is required for '+el.title;
						FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
					}
					return errors;
				}
			}
		},
		validate_CheckBox:function(el){
			var errors=0;
			FormValidator.Helpers.remove_errorMarkers(el.id+'_span');
			FormValidator.Helpers.remove_errorClassName(el);
			if(!el.checked){
				errors+=1;
				el.className+=' '+FormValidator.errorClassName;
				FormValidator.Helpers.create_errorMarkers(el);
				FormValidator.markerElement.title='A selection is required for '+el.title;
				FormValidator.Helpers.get_parentElement(el).appendChild(FormValidator.markerElement);
			}
			return errors;
		}
	};

// Call Validation Methods
	FormValidator.Validate=function(oForm){
		var el;
		FormValidator.activeForm=oForm.id;
		FormValidator.count=0;
		FormValidator.errors=0;
		for(var i=0;i<oForm.length;i++){
			el=oForm.elements[i];
			FormValidator.Helpers.removeEventListener(el,"blur",FormValidator.ReValidate,false);
			if(el.id.toLowerCase().indexOf("req_")>-1){
				checktype: switch(el.type){
					case 'text':
						FormValidator.count+=FormValidator.Validators.validate_TextBox(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'password':
						FormValidator.count+=FormValidator.Validators.validate_Password(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'textarea':
						FormValidator.count+=FormValidator.Validators.validate_TextArea(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'select-one':
						FormValidator.count+=FormValidator.Validators.validate_SelectOne(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'select-multiple':
						FormValidator.count+=FormValidator.Validators.validate_SelectMultiple(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'radio':
						FormValidator.count+=FormValidator.Validators.validate_RadioButton(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					case 'checkbox':
						FormValidator.count+=FormValidator.Validators.validate_CheckBox(el);
						FormValidator.Helpers.attachEventListener(el,"blur",FormValidator.ReValidate,false);
						break checktype;
					default:
						break checktype;
				}
			}
		}
		FormValidator.errors=FormValidator.count;
		if(FormValidator.errors>0){
			FormValidator.show_errorMsg(true);
			FormValidator.buttonClicked=false;
			return false;
		}else{
			FormValidator.show_errorMsg(false);
			if(FormValidator.buttonClicked===true){
				if(typeof(FormValidator.execFuncOnSubmit)!=='undefined'){
					eval(FormValidator.execFuncOnSubmit);
					window.setTimeout(function(){oForm.reset();},2000);
				}
			}
			return true;
		}
	};