

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 your '+field.title+'.</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{\w}{1}/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 id= form.getAttribute('id')
	var formFields = $("#"+id+" input");
	for(i=0;i<formFields.length;i++)
	{
	fieldValidate(formFields[i]);
	if(formFields[i].getAttribute('error')==1) errorCount++;
	}
	
	var formFields = $(".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(radioFields[i].childNodes[j].childNodes[0] && radioFields[i].childNodes[j].childNodes[0].nodeName =="INPUT")
					{
						if(radioFields[i].childNodes[j].childNodes[0].checked)
						{
							radioChecked = 1;
						}
					}
				}
			}
		}
		else
		{
			radioChecked = 1	
		}
		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(checkboxFields[i].childNodes[j].childNodes[1] && checkboxFields[i].childNodes[j].childNodes[1].nodeName=="DIV")
					{
						if(checkboxFields[i].childNodes[j].childNodes[1].childNodes[0].checked)
						{
							checkboxChecked = 1;	
						}
					}
				}
			}
		}
		else
		{
			checkboxChecked =1;	
		}
		if(checkboxChecked ==0)
		{
			$(checkboxFields[i]).append('<div class="formError">Please make a selection from the items above</div>');
			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);	
}