// JavaScript Document
// valType has a structure:   valType[:valParam][|valType[:valParam]]

var STEP1_FIELDS = new Object();
STEP1_FIELDS['first_name']			= {'msg': "Please enter your First Name.", 					'valType':'non-empty'};
STEP1_FIELDS['last_name'] 			= {'msg': "Please enter your Last Name.", 					'valType':'non-empty'};
STEP1_FIELDS['street'] 				= {'msg': "Please enter your Address1.", 					'valType':'non-empty'};
STEP1_FIELDS['00N80000002viuC'] 	= {'msg': "Please enter the City.", 						'valType':'non-empty'};
STEP1_FIELDS['00N80000002visc'] 	= {'msg': "You should select a State.", 					'valType':'non-empty'};
STEP1_FIELDS['phone'] 				= {'msg': "Please enter your correct Phone1.", 						'valType':'phone'};
STEP1_FIELDS['email'] 				= {'msg': "Please enter your Email.", 						'valType':'email'};
STEP1_FIELDS['00N80000002viuE'] 	= {'msg': "You should select 'How did you hear about us?'", 'valType':'non-empty'};

var STEP2_FIELDS = new Object();
STEP2_FIELDS['first_name']			= {'msg': "Please enter your First Name.", 					'valType':'non-empty'};
STEP2_FIELDS['last_name'] 			= {'msg': "Please enter your Last Name.", 					'valType':'non-empty'};
STEP2_FIELDS['email'] 				= {'msg': "Please enter your Email.", 						'valType':'email'};
STEP2_FIELDS['00N80000002viuD'] 	= {'msg': "You should select a Category.", 					'valType':'non-empty'};
STEP2_FIELDS['00N80000002viuE'] 	= {'msg': "You should select 'How did you hear about us?'", 'valType':'non-empty'};
//STEP2_FIELDS['00N80000002viuu']		= {'msg': "You should write that you wish to tell us.", 	'valType':'non-empty'};

var STEP3_FIELDS = new Object();
STEP3_FIELDS['email'] 				= {'msg': "Please enter your Email.", 						'valType':'email'};

var formNumber = 1;

function validateForm(step) {
	var isError = false;
	var errorStr = "";
	var messagesArray = getFieldsArray(step);

	var fieldsArray = document.forms[formNumber].elements;	
	for(var i=0; i < fieldsArray.length; i++) {
			var field = fieldsArray[i];
			if(!validateElement(field, step)) {
				isError = true;
				errorStr += getErrorString(messagesArray[field.name].msg);
			}
		}
	
	if(isError)	{
		writeErrorString(errorStr);
		showErrorsBox();
	} else {
		showErrorsBox(false);
	}

	return !isError;
}

function validateElement(elem, step){
	if(!getFieldsArray(step)[elem.name]) return true;
	
	var valParts = getFieldsArray(step)[elem.name].valType.split("|");  // valType has a structure:   valType[:valParam][|valType[:valParam]]
	for (var i = 0; i < valParts.length; i++){
		if(!validateField(elem, valParts[i])) return false;
	}
	return true;
}

function validateField(field, valType){
	var res = false;
	var valTypeArr = valType.split(":");
	var validationType = valTypeArr[0];
	var validationParam = valTypeArr[1];
	var fieldValue = trim(field.value);
	switch(validationType){
		case "non-empty":
			if (fieldValue.length > 0) res = true;
			break;
		case "num":
			var re = /^\d+$/;
			if (re.test(fieldValue)) res = true;
			break;
		case "min":
			if (fieldValue.length >= validationParam) res = true;
			break;
		case "email":
			if (fieldValue.indexOf('@') && fieldValue.indexOf('@') != fieldValue.lastIndexOf('@')) break;
			var re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
			if(fieldValue.length > 0 && re.test(fieldValue)) res = true;
			break;
		case "match":
			if(fieldValue != "" && fieldValue == $(validationParam).value) res = true;
			break;
		case "credit-num":
			if (fieldValue == "AX") {
				if (fieldValue.length == 15) res = true;
			} else {
				if (fieldValue.length == 16) res = true;
			}
			break;
		case "phone":
			/*var phoneObjects = new Array();
			var phoneLengths = new Array();
			phoneObjects[0] = field;
			phoneObjects[1] = ((valTypeArr[1])?document.getElementById(valTypeArr[1]):false);
			phoneObjects[2] = ((valTypeArr[2])?document.getElementById(valTypeArr[2]):false);
			phoneLengths[0] = ((valTypeArr[3])?valTypeArr[3]:false);
			phoneLengths[1] = ((valTypeArr[4])?valTypeArr[4]:false);
			phoneLengths[2] = ((valTypeArr[5])?valTypeArr[5]:false);
			res = true;
			for (var j = 0; j <= 2; j++) {
				if (phoneObjects[j].value) {
					if (phoneLengths[j]) {
						if (phoneObjects[j].value.length < phoneLengths[j]) {	
							res = false;
							break;
						}
					} else {
						if (phoneObjects[j].value.length < 1) {
							res = false;
							break;
						}
					}
					var re = /^\d+$/;
					if (!re.test(phoneObjects[j].value)) {
						res = false;
						break;
					}

				} else {
					res = false;
					break;
				}
			}*/
			var re = /^[0-9 ()-]+$/;
			if (fieldValue.length > 0 && re.test(fieldValue)) res = true;
			break;
		case "has_text":
			if(fieldValue != "" && fieldValue == validationParam) res = true;
			break;
	}
	return res;
}

function getFieldsArray(step) {
	switch(step){
		case 1: return STEP1_FIELDS;
		case 2: return STEP2_FIELDS;
		case 3: return STEP3_FIELDS;
	}
}

function getErrorString(message) {
	if(!$("errorsBox"))
		return (message) ? "- " + message + "\n" : "";
	else
		return (message) ? "<li>" + message + "</li>" : "";
}

function writeErrorString(errorStr) {
	if(!$("errorsBox"))
		alert(errorStr);
	else
		$("errorsList").innerHTML = errorStr;
}

function showErrorsBox(show) {
	if(!$("errorsBox")) return;
	if(show === false) {
		addClass($("errorsBox"), "hidden");
	} else {
		removeClass($("errorsBox"), "hidden");
	}
}

function numHandler(field, prevFieldId, nextFieldId, event_el){
	if(/\D/.test(field.value)) {
		field.value = field.value.slice(0, field.value.length - 1);
		return;
	}
	if (prevFieldId || nextFieldId){
		var myEvent = ((event_el)?event_el:window.event);
		var code = myEvent.keyCode;
		var length = field.maxLength;
		if ((code != 9) && (code != 8)) {
			if (nextFieldId && (field.value.length > (length - 1)) && (code > 48) && (code < 57)){
				var next = $(nextFieldId);
				next.focus();
				next.select();
			}
		} else {
			if (code == 8) {
				if (prevFieldId && (field.value == '')) {
					var prev = $(prevFieldId);
					prev.focus();
					prev.select();
				}
			} else {
				field.select();
			}
		}
	}
}

function submitForm(step) {
    formNumber = 1;
    if (step==3) {
        formNumber = 0;
    }
	if(validateForm(step))	document.forms[formNumber].submit();
	//validateForm(step);
	return false;
}