
// 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= "";

	//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,}))$/

	// loop through each field
	for (counter=0; counter<arrFields.length; counter++){

		// Build reference to document object 
		obj = eval("frm." + arrFields[counter][0]);

		// Text fields
		if (obj.type == "text" || obj.type == "password" || obj.type == "textarea" || obj.type == "hidden" || obj.type == "file"){

			// Check for required text value
			if (arrFields[counter][2] == 1 && obj.value.length == 0) {
				strErr += arrFields[counter][1]+"\n";

			// Check for valid values
			} else if (obj.value.length > 0) {

				if (arrFields[counter][1].substring(arrFields[counter][1].length-5,arrFields[counter][1].length) == "Email" && !obj.value.match(re)){
					strErr += arrFields[counter][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 += arrFields[counter][1] + " (must be numeric)\n";
					} else if (obj.name.substring(0,11) == "numQuantity" && obj.value <= 0){
						strErr += arrFields[counter][1] + " (must be greater than 0)\n";
					}
				} else if (obj.name.substring(0,3) == "dtm" || (obj.name.substring(0,6) == "filter" && (obj.name.substring(obj.name.length-5,obj.name.length) == "start" || obj.name.substring(obj.name.length-3,obj.name.length) == "end"))) {
					if (isDate(obj.value) == false){
						strErr += arrFields[counter][1] + " (must be a valid date)\n";
					}
				}

			}
		
		// Select fields
		} else if (obj.type == "select-one") {
			
			// Check for required select index
			if (arrFields[counter][2] == 1 && obj.selectedIndex == 0){
				strErr += arrFields[counter][1]+"\n";
			}

		// Checkbox or radio buttons
		} else if (obj.length > 0) {
			
			// Check for required select index
			if (arrFields[counter][2] == 1){
				blnChecked = false;
				for (loop=0; loop<obj.length; loop++){
					if (obj[loop].checked == true){
						blnChecked = true;	
						break;
					}
				}
				if (blnChecked == false){
					strErr += arrFields[counter][1]+"\n";
				}
			}
									
		}			
	}
					
	//display error message
	if (strErr.length > 0){
		alert('Please enter a valid value for the following:\n\n' + strErr);
		return false;
	} else {	
		return true;
	}

}

//	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]-0 != (chkDate.getMonth() + 1)) { return false; }
	if (arrDate[1]-0 != chkDate.getDate()) { return false; }
	if (arrDate[2]-0 != chkDate.getFullYear()) { return false; }
	
	// If we've made it this far, we've got a valid date
	return true;
}


//	formatNumber
//
//	num - the number to format
//	dec - the number of decimal places to display
//
function formatNumber(num, dec){
	var sNum = (Math.round(num*(Math.pow(10,dec)))).toString();
	var sDec = '';
	var iLength = sNum.length;
	if (dec > 0){
		if (num != 0){
			sDec = sNum.substring(iLength-dec,iLength);
			sNum = sNum.substring(0,iLength-dec);
			iLength = sNum.length;	
		} else {
			for (i=0; i<dec; i++) sDec = sDec+'0';
		}
	}
	var iCommas = Math.floor((iLength-1)/3);
	var iPos = 0;
	for (i=0; i<iCommas; i++){
		iPos = iLength-(3*(i+1));
		sNum = sNum.substring(0,iPos)+','+sNum.substring(iPos,iLength+i);	
	}
	if (dec > 0) sNum = sNum+'.'+sDec;
	return sNum;
}