
/** HELPER FUNCTIONS **/	
	function Is() {
		agent = navigator.userAgent.toLowerCase();
		this.major = parseInt(navigator.appVersion);
		this.minor = parseFloat(navigator.appVersion);
		this.ns = ((agent.indexOf('mozilla') != -1) &&
		(agent.indexOf('spoofer') == -1) &&
		(agent.indexOf('compatible') == -1) &&
		(agent.indexOf('opera') == -1) &&
		(agent.indexOf('webtv') == -1) &&
		(agent.indexOf('hotjava') == -1));
		this.ns2 = (this.ns && (this.major == 2));
		this.ns3 = (this.ns && (this.major == 3));
		this.ns4 = (this.ns && (this.major == 4));
		this.ns6 = (this.ns && (this.major >= 5));
		this.ie = ((agent.indexOf("msie") != -1) &&
		(agent.indexOf("opera") == -1));
		this.ie3 = (this.ie && (this.major < 4));
		this.ie4 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 4") != -1));
		this.ie5 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 5.") != -1) &&
		(agent.indexOf("msie 5.5") == -1) &&
		(agent.indexOf("mac") == -1));
		this.iem5 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 5.") != -1) &&
		(agent.indexOf("mac") != -1));
		this.ie55 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 5.5") != -1));
		this.ie6 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 6.") != -1));
		this.ie7 = (this.ie && (this.major == 4) &&
		(agent.indexOf("msie 7.0b") != -1));
		this.nsdom = (this.ns4 || this.ns6);
		this.ie5dom = (this.ie5 || this.iem5 || this.ie55);
		this.iedom = (this.ie4 || this.ie5dom || this.ie6);
		this.w3dom = (this.ns6 || this.ie6 ||this.ie7);
}
var is = new Is();

var digits = "0123456789";
var phoneNumberDelimiters = "()- ";
var validWorldPhoneChars = phoneNumberDelimiters + "+";
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

// form validation utilizing jquery (www.jquery.com) - written by Affinity Internet

function fieldValidate(field)
{

	var required = field.getAttribute('required');
	var fieldError = field.name+'Error';
	if($("#"+fieldError)) $("#"+fieldError).remove();
// basic validation only checks for an entered value
	if(field.value == '' && required==null) 
	{
		
		$(field).addClass("formFieldError").after('<div id="'+fieldError+'" class="formError">Please enter this required information.</div>');
		field.setAttribute('error',1);
	}
	else 	
	{
		field.setAttribute('error',0);
		$(field).removeClass("formFieldError");
		//extract functions for different field types - phone, email, zip, etc.
		
		if(required==null)
		{
		if(field.name.match(/phone/gi) || field.name.match(/fax/gi))  phoneValidate(field)			
		if(field.name.match(/email/gi)) emailValidate(field);
		if(field.name.match(/zip/gi)) zipValidate(field);
		if(field.name.match(/ssn/gi)) ssnValidate(field);
		}	
	}
}

function phoneValidate(field)
{
	var fieldError = field.name+'Error';
	
	s=stripCharsInBag(field.value,validWorldPhoneChars);
	if(isInteger(s) && s.length == minDigitsInIPhoneNumber)
	{
		field.value = s.substr(0,3) +"-"+s.substr(3,3)+"-"+s.substr(6,4);
	}
	else
	{
		field.setAttribute('error',1)
		$(field).addClass("formFieldError").after('<div id="'+fieldError+'" class="formError">Please check your '+field.title+' input.</div>');
	}
}

function emailValidate(field)
{
	var fieldError = field.name+'Error';
	if(!field.value.match(/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/))
	{
		field.setAttribute('error',1)
		$(field).addClass("formFieldError").after('<div id="'+fieldError+'" class="formError">Please enter a valid e-mail address.</div>');
	}
}

function zipValidate(field)
{
	var fieldError = field.name+'Error';
	if(!field.value.match(/^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$/))
	{
		field.setAttribute('error',1)
		$(field).addClass("formFieldError").after('<div id="'+fieldError+'" class="formError">Please enter a valid zip code.</div>');
	}
}

function ssnValidate(field)
{
	var fieldError = field.name+'Error';
	
	s=stripCharsInBag(field.value,validWorldPhoneChars);
	if(isInteger(s) && s.length == 9)
	{
		field.value = s;
	}
	else
	{
		field.setAttribute('error',1)
		$(field).addClass("formFieldError").after('<div id="'+fieldError+'" class="formError">Please check your '+field.title+' input.</div>');
	}
}

var triedValidate=0;

function formValidate(form)
{
	
	var errorCount = 0;
	if($("#submitError")) $("#submitError").remove();
	var formFields = $("#"+form +" .formField input");
	
	for(i=0;i<formFields.length;i++)
	{
	fieldValidate(formFields[i]);
	if(formFields[i].getAttribute('error')==1) errorCount++;
	}
	
	var formFields = $(form+" .formField select");
	for(i=0;i<formFields.length;i++)
	{
	fieldValidate(formFields[i]);		
	if(formFields[i].getAttribute('error')==1) errorCount++;
	}
	
	
	// validate any radio buttons
	var radioFields = $(".radioObject");
	for(i=0;i<radioFields.length;i++)
	{
		var radioChecked = 0;
		if(radioFields[i].getAttribute("required") != 0)
		{
			for(j=0;j<radioFields[i].childNodes.length-1;j++)
			{
				
				if(radioFields[i].childNodes[j] && radioFields[i].childNodes[j].nodeName == "DIV")
				{
					if(!is.ie)
					{
						if(radioFields[i].childNodes[j].childNodes[1] && radioFields[i].childNodes[j].childNodes[1].nodeName =="INPUT")
						{
							if(radioFields[i].childNodes[j].childNodes[1].checked)
							{
								
								radioChecked++;
								$(".formError").remove();
							}
						}
					}
					else
					{
						if(radioFields[i].childNodes[j].childNodes[0] && radioFields[i].childNodes[j].childNodes[0].nodeName =="INPUT")
						{
							if(radioFields[i].childNodes[j].childNodes[0].checked)
							{
								
								radioChecked++;
								$(".formError").remove();
							}
						}
					}
				}
			}
		}
		else
		{
			radioChecked++;	
		}
		if(radioChecked==0)
		{
			$(radioFields[i]).append('<div class="formError">Please make a selection from the items above</div>');
			errorCount++;
		}
	}
		
	
	//validate checkboxes
	
	var checkboxFields = $(".checkboxObject");
	for(i=0;i<checkboxFields.length;i++)
	{
		var checkboxChecked = 0;
		
		if(checkboxFields[i].getAttribute("required") != 0)
		{
			for(j=0;j<checkboxFields[i].childNodes.length;j++)
			{
				if(checkboxFields[i].childNodes[j] && checkboxFields[i].childNodes[j].nodeName == "DIV")
				{
					if(!is.ie)
					{
						if(checkboxFields[i].childNodes[j].childNodes[1] && checkboxFields[i].childNodes[j].childNodes[1].nodeName=="DIV")
						{
							if(checkboxFields[i].childNodes[j].childNodes[1].childNodes[1].checked)
							{
								checkboxChecked++;
								$(".formError").remove();
							}
						}	
					}
					else
					{
						if(checkboxFields[i].childNodes[j].childNodes[0] && checkboxFields[i].childNodes[j].childNodes[0].nodeName=="DIV")
						{
							if(checkboxFields[i].childNodes[j].childNodes[0].childNodes[0].checked)
							{
								checkboxChecked++;
								$(".formError").remove();
							}
						}		
					}
					
					
					
				}
			}
		}
		else
		{
			checkboxChecked++;	
		}
		if(checkboxChecked ==0)
		{
			$(checkboxFields[i]).append('<div class="formError">Please make a selection from the items above</div>');
			errorCount++;
		}
	}
	
	
	//alert(errorCount);
	if(errorCount > 0)
	{
		$("#formSubmit").before('<div id="submitError" class="formError">Please make sure all required fields are completed and try again.</div>');
		triedValidate=1;
		return false;
	}
	else
	{
		triedValidate=0;
		return true;
	}
}

function updateValidate(field)
{
	if(triedValidate > 0) fieldValidate(field);	
}