// initialize fields array;
var arrFields = new Array();


//	validate
//
//	validate checks each of the HTML fields in the arrFields array
//	to make sure a valid value has been entered for them before the form is submitted.
//
//   arrFields[0] - name of form element
//   arrFields[1] - display name for error message
//   arrFields[2] - 0 or 1, whether the field is required
//
function validate(frm){

	var strErr= "";
	
	// loop through each field
	for (counter=0; counter<arrFields.length; counter++){

		// Build reference to document object 
		obj = eval("frm.elements['" + arrFields[counter][0] + "']");

		//skip this field if it is for a different form
		if (typeof obj == 'undefined') continue;

		//valiadateField
		strErr += validateField(obj, arrFields[counter]);

	}
					
	//display error message
	if (strErr.length > 0){
		alert('Please enter a valid value for the following:\n\n' + strErr);
		return false;
	} else {	
		return true;
	}

}

// validateField - validates a single field
//
function validateField(obj, arrField){

	var strErr= "";

	//email regexp
	var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

	// Text fields
	if (obj.type == "text" || obj.type == "password" || obj.type == "textarea" || obj.type == "hidden" || obj.type == "file"){

		// Check for required text value
		if ((arrField[2] == 1 && obj.value.length == 0) || ((obj.name.substring(0,8) == "flt_from" || obj.name.substring(0,6) == "flt_to") && obj.value == "mm/dd/yyyy")) {
			strErr += arrField[1]+"\n";

		// Check for valid values
		} else if (obj.value.length > 0) {

			if (arrField[1].substring(arrField[1].length-8,arrField[1].length) == "Email(s)"){
				var myStr = obj.value;
				var arr = myStr.split(",");
				for (var i in arr) {
					var strTmpEmail = arr[i];
					strTmpEmail = strTmpEmail.replace(/^(\s+)?(.*\S)(\s+)?$/, '$2');	// trim
					if (! strTmpEmail.match(re)){
						strErr += arrField[1]+" (must contain valid email address(es)!)\n";
						break;
					}
				}
				
			} else if (arrField[1].substring(arrField[1].length-5,arrField[1].length) == "Email" && !obj.value.match(re)){
                    strErr += arrField[1]+" (must be a valid email address)\n";
			
			} else if (obj.name.substring(0,3) == "num" || obj.name.substring(0,3) == "int"){
				while (obj.value.indexOf('$') > -1){
					obj.value = obj.value.substring(0,obj.value.indexOf('$')) + obj.value.substring(obj.value.indexOf('$')+1,obj.value.length);
				}
				while (obj.value.indexOf(',') > -1){
					obj.value = obj.value.substring(0,obj.value.indexOf(',')) + obj.value.substring(obj.value.indexOf(',')+1,obj.value.length);
				}
				if (isNaN(obj.value)){
					strErr += arrField[1] + " (must be numeric)\n";
				} else if (obj.name.substring(0,3) == "int" && obj.value.substring(0,obj.value.indexOf('.'))){
					strErr += arrField[1] + " (must be an integer)\n";
				} else if (arrField[0].substring(0,11) == "numQuantity" && obj.value <= 0){
					strErr += arrField[1] + " (must be greater than 0)\n";
				}
			
			} else if (obj.name.substring(0,3) == "dtm" || obj.name.substring(0,8) == "flt_from" || obj.name.substring(0,6) == "flt_to") {
				if (isDate(obj.value) == false){
					strErr += arrField[1] + " (must be a valid date)\n";
				}
			}

		}
	
	// Select fields
	} else if (obj.type == "select-one") {
		
		// Check for required select index
		if (arrField[2] == 1 && obj.selectedIndex == 0){
			strErr += arrField[1]+"\n";
		}

	// Select fields
	} else if (obj.type == "select-multiple") {
		
		// Check for required select index
		if (arrField[2] == 1){
			blnSelected = false;
			for (loop=0; loop<obj.length; loop++){
				if (obj[loop].selected == true){
					blnSelected = true;	
					break;
				}
			}
			if (blnSelected == false){
				strErr += arrField[1]+"\n";
			}
		}

	// Checkbox group or radio buttons
	} else if (obj.length > 0) {
		
		// Check for required select index
		if (arrField[2] == 1){
			blnChecked = false;
			for (loop=0; loop<obj.length; loop++){
				if (obj[loop].checked == true){
					blnChecked = true;	
					break;
				}
			}
			if (blnChecked == false){
				strErr += arrField[1]+"\n";
			}
		}
		
	// Checkbox or single radio
	} else if (obj.type == "checkbox" || obj.type == "radio") {
		
		// Check for required select index
		if (arrField[2] == 1 && !obj.checked){
			strErr += arrField[1]+"\n";
		}
								
	}			


	return strErr;
}


//	isDate
//
//	isDate is a function which is used to determine if the specified date is a 
//	valid date.
//
//	dDate - Date being validated
//
function isDate(dDate) {
	
	// Begin by converting the supplied date into an array with [mm][dd][yyyy]
	if (dDate.indexOf("/") > -1){
		arrDate = dDate.split("/");
	} else {
		arrDate = dDate.split("-");
	}
	
	// If array is less than 3 elements, date is not valid- return false
	if (arrDate.length != 3) return false;

	// Make sure we've got the right century
	if (arrDate[2].length == 2){
		arrDate[2] = '20'+arrDate[2];
	}
		
	// All three elements must be numeric
	if (isNaN(arrDate[0]) || isNaN(arrDate[1]) || isNaN(arrDate[2])) return false;
		
	// Convert the supplied date into a javascript date.  This will work even if
	// the date supplied is not valid; but the final value will be a different date
	// than the one originally supplied.
	chkDate = new Date(arrDate[0]+'/'+arrDate[1]+'/'+arrDate[2]);
	
	// Now get the month, day, and year of the new date.  Check to see if they 
	// match the original values for for month, day, and year.  If any don't 
	// match, an invalid date was supplied.
	if (arrDate[0] != (chkDate.getMonth() + 1)) return false;
	if (arrDate[1] != chkDate.getDate()) return false;
	if (arrDate[2] != chkDate.getFullYear()) return false;
	
	// If we've made it this far, we've got a valid date
	return true;
}