// JavaScript Document: Form Validator
// Invalid field's label will change to Red onSubmit/onClick
// All field names and labelnames are case-sensitive

var Testing = false;
var errorFree;

/*--------------------------------------------------------------------
strip_commas(field)
HeightInInches(feet, inches, height)

req_regexp(field, exp_text, labelName)
req_text(field, labelName)
req_number(field, labelName)
req_combo(combo, index, labelName) 
req_select(box, labelName)

req_text_w_combo(combo, index, field, labelName)
req_number_w_combo(combo, index, field, labelName)

req_number_length(field, length, labelName)
req_number_min_amt(field, amt, labelName)
opt_number(field, labelName)
opt_number_length(field, length, labelName)
req_phone_3_fields(ac, pre, num, labelName)
----------------------------------------------------------------------*/
//Diaply Wrong and Correct Images 
function WrongCorrectImages(labelNameIn, Result){
	var labelNameW;
	var labelNameC;
	labelNameW = labelNameIn + "Wrong";
	labelNameC = labelNameIn + "Correct";
	
	var objImg;
	objImg = document.getElementsByTagName('div');
	var regW = new RegExp(labelNameW);
	var regC = new RegExp(labelNameC);	

	if(Result == false){
		for (var i=0; i<objImg.length; i++){
			if(regW.test(objImg[i].className)){objImg[i].style.display = "inline";}
		}
		for (var i=0; i<objImg.length; i++){
			if(regC.test(objImg[i].className)){objImg[i].style.display = "none";}
		}
		
	}
	else{
		for (var i=0; i<objImg.length; i++){
			if(regW.test(objImg[i].className)){objImg[i].style.display = "none";}
		}
		for (var i=0; i<objImg.length; i++){
			if(regC.test(objImg[i].className)){objImg[i].style.display = "inline";}
		}
	}
}


//Removes Commas from numeric fields
function strip_commas(field) {
    if((field != null && field.value != null && field.type != "hidden") || Testing ) {
	re = /[,$]/gi;
	str = field.value;
	field.value = str.replace(re, "");
    }
}

//Convert Feet/Inches value to Inches
function HeightInInches(feet, inches, height) {
    if( (feet != null && inches != null && height != null) || Testing) {
	if(!isNaN(feet.value) && !isNaN(inches.value)) {
	    height.value = (feet.value * 12) + inches.value;
	}
    }
}

//URL   "http://.+\\..+\\..+"
//Email ".+@.+\\..+"
function req_regexp(field, exp_text, labelName) {
    if((field != null && field.type != "hidden") || Testing ) {
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');
		req_regexpRE = new RegExp(exp_text);
		
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);		
		
		if(!req_regexpRE.test(field.value)) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}				 
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

function req_text(field, labelName) {
    if((field != null && field.type != "hidden") || Testing ) {
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');

		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
		if(field.value.length == 0) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

function req_number(field, labelName) {
    if((field != null && field.value != null && field.type != "hidden") || Testing ) {
	    strip_commas(field);
	    field.value = field.value.replace(/(^\s+|\s+$)/g,'');
		
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
	    if(field.type != "hidden" && (field.value.length == 0 || isNaN(field.value))) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

//Checks if a certain combo option is selected and throws an error if it is
function req_combo(combo, index, labelName) {
    if(combo != null || Testing ) {	
			
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
		if(combo.options[index].selected) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

//Check if at least one option in select box is selected
function req_select(box, labelName){	
	 if(box != null || Testing ) {	
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);	
	
		if(box.selectedIndex == -1){
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }		
			 WrongCorrectImages(labelName, true);
		}
	 }
}

//Checks a text field if a certain combo option is selected
function req_text_w_combo(combo, index, field, labelName) {
    if( (combo != null && field != null) || Testing ) {
				
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
		if(combo.options[index].selected && field.value.length == 0) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

//Checks a numeric field if a certain combo option is selected
function req_number_w_combo(combo, index, field, labelName) {
    if( (combo != null && field != null) || Testing ) {
		strip_commas(field);
				
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
				
		if(combo.type != "hidden" && combo.options[index].selected && (field.value.length == 0 || isNaN(field.value))) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}

function req_number_length(field, length, labelName) {
    if((field != null && field.type != "hidden") || Testing ) {		
		strip_commas(field);
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');
		
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
		if(field.value.length != length || isNaN(field.value)) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }
			 WrongCorrectImages(labelName, true);
		}
    }
}

//Check if greater than or equal (>=) min. amt
function req_number_min_amt(field, amt, labelName) {

    if((field != null && field.type != "hidden") || Testing ) {
		strip_commas(field);
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');
		
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);	
				
		if(field.value.length == 0 || isNaN(field.value) || (field.value < amt)) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }			
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }				
			 WrongCorrectImages(labelName, true);
		}
    }
}

function opt_number(field, labelName) {
    if((field != null && field.type != "hidden") || Testing ) {
		strip_commas(field);
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');
				
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);	
				
		if(field.value.length != 0 && isNaN(field.value)) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }			
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }				
			 WrongCorrectImages(labelName, true);
		}
    }
}

function opt_number_length(field, length, labelName) {
    if((field != null && field.type != "hidden") || Testing ) {
		strip_commas(field);
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');
	
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);	
				
		if(field.value.length != 0 && (field.value.length != length || isNaN(field.value))) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }				
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }				
			 WrongCorrectImages(labelName, true);
		}
    }
}

function req_phone_3_fields(ac, pre, num, labelName) {
    if( (ac != null && pre != null && num != null) || Testing ) {
		ac.value  = ac.value.replace(/(^\s+|\s+$)/g,'');
		pre.value = pre.value.replace(/(^\s+|\s+$)/g,'');
		num.value = num.value.replace(/(^\s+|\s+$)/g,'');
		
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);	
		
		if((ac.value.length != 3 || isNaN(ac.value)) || (pre.value.length != 3 || isNaN(pre.value)) || (num.value.length != 4  || isNaN(num.value))) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }				
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }				
			 WrongCorrectImages(labelName, true);
		}	
	}
}

//Testing Function
function Check_1(theform){
	errorFree = true;
	
	//req_regexp(theform.username, ".+@.+\\..+", "InputLabelUsername"); //Email
	//req_regexp(theform.username, "http://.+\\..+\\..+", "InputLabelUsername"); //URL	
	req_text(theform.username, "InputLabelUsername"); 
	//req_number(theform.username, "InputLabelUsername");	
	req_combo(theform.state, 0, "InputLabelState");
	req_select(theform.opt, "InputLabelOption");
	
	//req_text_w_combo(theform.state, 1, theform.username, "InputLabelUsername")
	//req_number_w_combo(theform.state, 1, theform.username, "InputLabelUsername")
	
	//req_number_length(theform.username, 5, "InputLabelUsername")
	//req_number_min_amt(theform.username, 5000, "InputLabelUsername")
	//opt_number(theform.username, "InputLabelUsername")
	//opt_number_length(theform.username, 5, "InputLabelUsername")
	req_phone_3_fields(theform.day_phone_ac, theform.day_phone_pre, theform.day_phone_num, "InputLabelDayPhone");
	
	return errorFree;
}

////////////////////////////////////////////////Form Validator Code////////////////////////////////////////////////
/*--------------------------------------------------------------------
strip_commas(field)
HeightInInches(feet, inches, height)

req_regexp(field, exp_text, labelName)
req_text(field, labelName)
req_number(field, labelName)
req_combo(combo, index, labelName) 
req_select(box, labelName)

req_text_w_combo(combo, index, field, labelName)
req_number_w_combo(combo, index, field, labelName)

req_number_length(field, length, labelName)
req_number_min_amt(field, amt, labelName)
opt_number(field, labelName)
opt_number_length(field, length, labelName)
req_phone_3_fields(ac, pre, num, labelName)
----------------------------------------------------------------------*/
//Insurance Common Checks
//birth, weight, and height are boolean: True or False
//For height, must have 3 fields: feet, inches, height(hidden)
function All_Common(theForm, birth, weight, height) {    

	req_text(theForm.first_name, "InputLabelFirstName");
	req_text(theForm.last_name, "InputLabelLastName");
	req_text(theForm.real_addr, "InputLabelAddress");
	req_text(theForm.city, "InputLabelCity");
	req_combo(theForm.state, 0, "InputLabelState"); 
	req_number_length(theForm.zip_code, 5, "InputLabelZip");
	req_phone_3_fields(theForm.day_phone_ac, theForm.day_phone_pre, theForm.day_phone_num, "InputLabelDayPhone");
	req_phone_3_fields(theForm.eve_phone_ac, theForm.eve_phone_pre, theForm.eve_phone_num, "InputLabelEvePhone");
	req_regexp(theForm.email_addr, ".+@.+\\..+", "InputLabelEmail");	
	
    if(birth) {
		req_number_length(theForm.year, 2, "InputLabelBirth");
    }
    if(weight) {
		req_number(theForm.weight, "InputLabelWeight");
    }
	if(height){
		HeightInInches(theForm.feet, theForm.inches, theForm.height);
		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp("InputLabelHeight");					
		if(theForm.height.value.length == 0 || isNaN(theForm.height.value) || (theForm.height.value < 1)) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }				
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }				
		}	
	}
}

function req_text_withDefault(field, labelName, DefaultStr) {
    if((field != null && field.type != "hidden") || Testing ) {
		field.value = field.value.replace(/(^\s+|\s+$)/g,'');

		var obj;
		obj = document.getElementsByTagName('div');
		var reg = new RegExp(labelName);
		
		if(field.value.length == 0 || field.value == DefaultStr) {
			errorFree = false;
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#FF0000";}
			 }	
			 WrongCorrectImages(labelName, false);
		}
		else{
			 for (var i=0;i<obj.length;i++){
				 if(reg.test(obj[i].className)){obj[i].style.color = "#333333"; }
			 }			
			 WrongCorrectImages(labelName, true);
		}
    }
}



/***********************************************
* Disable "Enter" key in Form script- By Nurul Fadilah(nurul@REMOVETHISvolmedia.com)
* This notice must stay intact for use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
                
function handleEnter (field, event) {
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			var i;
			for (i = 0; i < field.form.elements.length; i++)
				if (field == field.form.elements[i])
					break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		} 
		else
		return true;
	}      
