
function addField(field, type, label) {
	addType(field,type);
	addLabel(field,label);
	addRequiredField(field);
}

var arrRequired = new Array();
function addRequiredField (strFieldName) {
	arrRequired[arrRequired.length] = strFieldName;
}

var hshDependent = new Object();
function addRequiredDependent (strFieldName,strDependentQuestion,strDependentAnswer) {
	hshDependent[strFieldName] = new Object();
	hshDependent[strFieldName]['question'] = strDependentQuestion;
	hshDependent[strFieldName]['answer'] = strDependentAnswer;
}

var hshType = new Object();
function addType (strFieldName,strType) {
	hshType[strFieldName] = strType;
}

var hshLabel = new Object();
function addLabel (strFieldName,strLabel) {
	hshLabel[strFieldName] = strLabel;
}

var blnCheckEmail = 0;
var arrEmailCheck = new Array();
function addEmailCheck (strFieldName) {
	arrEmailCheck[arrEmailCheck.length] = strFieldName;
	blnCheckEmail = 1;
}

function checkForm (strFormName) {
  if (strFormName == "" || strFormName == "void" || strFormName == "undefined" || strFormName == "null" || strFormName == null){
    strFormName = "survey";
  }

	// error message
	var strRequiredMessage = "Please complete the following fields:\n\n";
	var strEmailMessage = "You did not provide a valid email address for:\n\n";

	// error flag
	var blnError = 0;
	var blnRequiredError = 0;
	var blnEmailError = 0;
	var strTmpFieldVal = "";
			
	// build our list of fields to check
	var arrCheck = new Array();
	for (var i = 0; i < arrRequired.length; i++) {
		arrCheck[arrCheck.length] = arrRequired[i];
	}
		
	for (strQuestion in hshDependent) {
		if (checkDependent(hshDependent[strQuestion]['question'],hshDependent[strQuestion]['answer'])) {
			arrCheck[arrCheck.length] = strQuestion;
		}
	}

	for (var i = 0; i < arrCheck.length; i++) {
		strTmpFieldVal = getFieldValue(arrCheck[i]);
		if (arrCheck[i] == "qx_105" && strTmpFieldVal) {
			var arrFieldVals = strTmpFieldVal.split(",");
			if (arrFieldVals.length != 3) {
				strRequiredMessage += hshLabel[arrCheck[i]] + " (please select exactly 3)\n";
				blnError = 1;
				blnRequiredError = 1;
			}
		}else if (!strTmpFieldVal) {
			strRequiredMessage += hshLabel[arrCheck[i]] + "\n";
			blnError = 1;
			blnRequiredError = 1;
		}
	}

	if (blnCheckEmail) {
		for (var i = 0; i < arrEmailCheck.length; i++) {
			if (isValidEmail(arrEmailCheck[i]) == 0) {
				strEmailMessage += hshLabel[arrEmailCheck[i]] + "\n";
				blnError = 1;
				blnEmailError = 1;
			}
		}
	}


	if (blnError) {

		var strMessage = "";
		if (blnRequiredError) strMessage += strRequiredMessage + "\n";
		if (blnCheckEmail && blnEmailError) strMessage += strEmailMessage;
		alert(strMessage);
	} else {
		var objForm = eval('document.forms.' + strFormName);		
		objForm.submit();
	}

}

function checkDependent (strQuestion,strAnswer) {
	var blnSet = 0;
	if (strAnswer == getFieldValue(strQuestion)) blnSet = 1;
	return blnSet;
}

function isValidEmail (strEmail) { 
	var strEmailAddress = getFieldValue(strEmail);
	var blnEmail = 0;
	if (strEmailAddress == "") {
		blnEmail = 1;
	} else {
//		var rgxEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		var rgxEmail = /^[a-zA-Z0-9][\w\.-\_]*[a-zA-Z0-9]@[\w-\.]*[a-zA-Z0-9][\w\.-\_]*\.[a-zA-Z]{2,7}$/;
		if (rgxEmail.test(strEmailAddress)) blnEmail = 1;
	}
	return blnEmail;
}
function getFieldValue (strFieldName) {
	var strFormName = "survey";	
	var objForm = eval('document.forms.' + strFormName);
	var objField = objForm.elements[strFieldName];
	var strValue = 0;
	var strType = hshType[strFieldName];
	switch (strType) {
		case "text" : case "textarea" : case "file" : case "password" : case "hidden" :
			strValue = objField.value;
			break;
		case "select-one" :
			strValue = objField.options[objField.selectedIndex].value;
			break;
		case "select-multiple" :
			var i, arrOptions = objField.options.length;
			for(i=0; i< arrOptions; i++)
				if(objField.options[i].selected) {
					strValue = 1;
					break;
				}
			break;
		case "radio-horiz" : case "radio" : case "checkbox" :
			if (objField[0] == null) {
				if (objField.checked) {
					strValue = objField.value;
				}
			} else {
				var i, arrFields = objField;
				for (i = 0; i < arrFields.length; i++) {
					if (arrFields[i].checked) {
						if (strFieldName == 'qx_105') {
							if (i>0 && strValue != 0){
								strValue += ","+arrFields[i].value;
							}else{
							  strValue = arrFields[i].value;
							}
						}else{
							strValue = arrFields[i].value;
							break;
						}
					}
				}
			}
			break;
	}	
	return strValue;
}
