function errdisplay(fld, errfld, errmsg) {


	var retval = true;





	if (errmsg.length > 0) {


		errfld.firstChild.nodeValue = errmsg;


		fld.className = "errorfld";


		errfld.className = "showerrmsg";


		fld.focus();


		retval = false;


	} else {


		fld.className = "validfld";


		errfld.className = "hideerrmsg";


	}





	return retval;


}





function fieldval(fld, errfld, type, req) {


	var strval = fld.value;


	var errmsg = "";


	var re;





	switch (type) {


		case "alpha":


			re = /^[a-zA-Z\s-]+$/;


			break;


		case "alphanum":


			re = /^[\w\s]+$/;


			break;


		case "email":


			re = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;


			break;


		default:


			re = /.*/;


	}





	if (strval.length == 0) {


		if (req) {


			errmsg = "Field cannot be empty";


		}


	} else {


		if (!strval.match(re)) {


			errmsg = "Input is invalid";


		}


	}





	return errdisplay(fld, errfld, errmsg);


}





function phoneval(fld, errfld, type, req) {


	var strval = fld.value;


	var errmsg = "";


	var phfmt;





	if (strval.length == 0) {


		if (req) {


			errmsg = "Field cannot be empty";


		}


	} else {


		var phfmt = phoneformat(strval, type)





		if (phfmt == -1) {


			errmsg = "Invalid phone no./format";


		} else {


			fld.value = phfmt;


		}


	}





	return errdisplay(fld, errfld, errmsg);


}





function dateval(fld, errfld, type, req) {


	var strval = fld.value;


	var errmsg = "";


	var datefmt;





	if (strval.length == 0) {


		if (req) {


			errmsg = "Field cannot be empty";


		}


	} else {


		var datefmt = dateformat(strval, type);





		if (datefmt == -1) {


			errmsg = "Invalid date";


		} else {


			fld.value = datefmt;


		}


	}





	return errdisplay(fld, errfld, errmsg);


}





function timeval(fld, errfld, type, req) {


	var strval = fld.value;


	var errmsg = "";


	var timefmt;





	if (strval.length == 0) {


		if (req) {


			errmsg = "Field cannot be empty";


		}


	} else {


		var timefmt = timeformat(strval, type);





		if (timefmt == -1) {


			errmsg = "Invalid time";


		} else {


			fld.value = timefmt;


		}


	}





	return errdisplay(fld, errfld, errmsg);


}





function phoneformat(strval, fmt) {


	var retval;





	if (strval.length > 0) {


		var nums = strval.replace(/[-\.\/\s\(\)]/g, "");





		switch (fmt) {


		case 0: //validate north american, return nums only


			re = /^1?[-\.\/\s]?((\(\d{3}\))|\d{3})[-\.\/\s]?(\d{3})[-\.\/\s]?(\d{4})$/;





			if (strval.match(re) && nums.length >= 10 && nums.length <= 11) {


				retval = nums;


			} else {


				retval = -1;


			}





			break;


		case 1: //validate north american, return format


			re = /^1?[-\.\/\s]?((\(\d{3}\))|\d{3})[-\.\/\s]?(\d{3})[-\.\/\s]?(\d{4})$/;





			if (strval.match(re)) {


				if (nums.length == 10) {


					retval = nums.substr(0, 3) + "-" + nums.substr(3, 3) + "-" + nums.substr(6, 4);


				} else if (nums.length == 11) {


					retval = nums.substr(0, 1) + "-" + nums.substr(1, 3) + "-" + nums.substr(4, 3) + "-" + nums.substr(7, 4);


				} else {


					retval = -1;


				}


			} else {


				retval = -1;


			}





			break;


		case 2: //validate international, return nums only


			re = /^((\+\d{1,3}[-\.\/\s]?\(?\d\)?[-\.\/\s]?\d{1,5})|(\(?\d{2,6}\)?))[-\.\/\s]?(\d{3,4})[-\.\/\s]?(\d{4})$/;





			if (strval.match(re)) {


				retval = nums;


			} else {


				retval = -1;


			}





			break;


		case 3: //validate international, return format


			re = /^((\+\d{1,3}[-\.\/\s]?\(?\d\)?[-\.\/\s]?\d{1,5})|(\(?\d{2,6}\)?))[-\.\/\s]?(\d{3,4})[-\.\/\s]?(\d{4})$/;





			if (strval.match(re)) {


				re = /^1?[-\.\/\s]?((\(\d{3}\))|\d{3})[-\.\/\s]?(\d{3})[-\.\/\s]?(\d{4})$/;





				if (strval.match(re)) {


					if (nums.length == 10) {


						retval = nums.substr(0, 3) + "-" + nums.substr(3, 3) + "-" + nums.substr(6, 4);


					} else if (nums.length == 11) {


						retval = nums.substr(0, 1) + "-" + nums.substr(1, 3) + "-" + nums.substr(4, 3) + "-" + nums.substr(7, 4);


					}


				} else {


					retval = strval;


				}


			} else {


				retval = -1;


			}





			break;


		default: //not specified; validate north american, return format


			re = /^1?[-\.\/\s]?((\(\d{3}\))|\d{3})[-\.\/\s]?(\d{3})[-\.\/\s]?(\d{4})$/;





			if (strval.match(re)) {


				if (nums.length == 10) {


					retval = nums.substr(0, 3) + "-" + nums.substr(3, 3) + "-" + nums.substr(6, 4);


				} else if (nums.length == 11) {


					retval = nums.substr(0, 1) + "-" + nums.substr(1, 3) + "-" + nums.substr(4, 3) + "-" + nums.substr(7, 4);


				} else {


					retval = -1;


				}


			} else {


				retval = -1;


			}





			break;


		}


	}





	return retval


}





function dateformat(strval, fmt) {


	var retval = "";





	delim = "(\\/|-|\\.|\\s)"


	re = "^\\d{1,2}" + delim + "(\\d{1,2}|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)" + delim + "(\\d{2}|\\d{4})$";


	var elems;


	mos = new Array("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");


	var day;


	var month;


	var year;





	if (strval.length > 0) {


		if (!strval.match(RegExp(re, "i"))) {


			retval = -1;


		} else {


			lv_tempdelim = strval.match(RegExp(delim));


			lv_tempchar = String(lv_tempdelim).substring(0,1);


			elems = strval.split(lv_tempchar);


			


			day = parseInt(elems[0], 10);


			month = parseInt(elems[1], 10);





			if (!month) {


				for (i in mos) {


					if (mos[i].match(RegExp("^" + elems[1], "i"))) {


						month = parseInt(i, 10);


					}


				}


			}





			year = (elems[2].length == 2)? (2000 + parseInt(elems[2], 10)) : (parseInt(elems[2], 10));





			if (month == 2) {


				if ((year % 4 == 0 && year % 100 > 0) || year % 400 == 0) {


					if (day < 1 || day > 29) {


						retval = -1;


					}


				} else {


					if (day < 1 || day > 28) {


					retval = -1;


					}


				}				


			} else if (month == 4 || month == 6 || month == 9 || month == 11) {


				if (day < 1 || day > 30) {


					retval = -1;


				}


			} else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {


				if (day < 1 || day > 31) {


					retval = -1;


				}


			} else {


				retval = -1;


			}





			if (retval != -1) {


				switch (fmt) {


				case "mmmmmmmmmddyyyy":


					retval = mos[month] + " " + day + ", " + year;


					break;


				case "yyyy-mm-dd":


					retval = year + "-" + ((month < 10)? "0" + month: month) + "-" + ((day < 10)? "0" + day: day);


					break;


				case "dd-mm-yyyy":


					retval = ((day < 10)? "0" + day: day) + "-" + ((month < 10)? "0" + month: month) + "-" + year;


					break;


				case "dd/mm/yyyy":


					retval = ((day < 10)? "0" + day: day) + "/" + ((month < 10)? "0" + month: month) + "/" + year;


					break;


				case "mm-dd-yyyy":


					retval = ((month < 10)? "0" + month: month) + "-" + ((day < 10)? "0" + day: day) + "-" + year;


					break;


				case "mm/dd/yyyy":


					retval = ((month < 10)? "0" + month: month) + "/" + ((day < 10)? "0" + day: day) + "/" + year;


					break;


				case "dd-mmm-yyyy":


					retval = ((day < 10)? "0" + day: day) + "-" + (mos[month].substr(0, 3)).toUpperCase() + "-" + year;


					break;


				default:


					retval = year + "-" + ((month < 10)? "0" + month: month) + "-" + ((day < 10)? "0" + day: day);


					break;


				}


			}


		}


	}





	return retval;


}





function timeformat(strval, fmt) {


	var retval = "";





	var re = /^\d{1,2}:?\d{2}(:?\d{2})?\s?([AaPp][Mm])?$/;





	var ap;


	var nums;


	var hour;


	var min;


	var sec;





	if (strval.length > 0) {


		if (strval.match(re)) {


			var ap = String(strval.match(/[AaPp][Mm]/)).toUpperCase();





			var nums = strval.replace(/[:\sAaPpMm]/g, "");





			switch (nums.length) {


			case 3: //hr, mins only


				hour = parseInt(nums.substr(0, 1), 10);


				min = parseInt(nums.substr(1, 2), 10);





				break;


			case 4: //hrs, mins only


				hour = parseInt(nums.substr(0, 2), 10);


				min = parseInt(nums.substr(2, 2), 10);





				break;


			case 5: //hr, mins, secs


				hour = parseInt(nums.substr(0, 1), 10);


				min = parseInt(nums.substr(1, 2), 10);


				sec = parseInt(nums.substr(3, 2), 10);





				break;


			case 6: //hrs, mins, secs


				hour = parseInt(nums.substr(0, 2), 10);


				min = parseInt(nums.substr(2, 2), 10);


				sec = parseInt(nums.substr(4, 2), 10);





				break;


			}





			if (sec > 59) {


				retval = -1;


			}





			if (min > 59) {


				retval = -1;


			}





			if (hour > 23) {


				retval = -1;


			} else {


				if (ap == "AM") {


					if (hour < 1 || hour > 12) {


						retval = -1;


					} else if (hour == 12) {


						hour = 0;


					}


				} else if (ap == "PM" && hour < 12) {


					hour = hour + 12;


				}


			}





			if (retval != -1) {


				switch (fmt) {


				case "12HH:MM:SS": //12-hour c secs


					hour = ((hour > 12)? (hour - 12): ((hour == 0)? 12: hour));





					retval = hour + ":" + ((min < 10)? "0" + min: min) + ":" + ((sec)? ((sec < 10)? "0" + sec: sec): "00");





					break;


				case "12HH:MM:SS AP": //12-hour c secs, am/pm


					ap = ((hour < 12)? "AM": "PM");


					hour = ((hour > 12)? (hour - 12): ((hour == 0)? 12: hour));





					retval = hour + ":" + ((min < 10)? "0" + min: min) + ":" + ((sec)? ((sec < 10)? "0" + sec: sec): "00") + " " + ap;





					break;


				case "24HH:MM:SS": //24-hour c secs


					retval = ((hour < 10)? "0" + hour: hour) + ":" + ((min < 10)? "0" + min: min) + ":" + ((sec)? ((sec < 10)? "0" + sec: sec): "00");





					break;


				case "12HH:MM": //12-hour s secs


					hour = ((hour > 12)? (hour - 12): ((hour == 0)? 12: hour));





					retval = hour + ":" + ((min < 10)? "0" + min: min) + " " + ap;





					break;


				case "12HH:MM AP": //12-hour s secs, am/pm


					ap = ((hour < 12)? "AM": "PM");


					hour = ((hour > 12)? (hour - 12): ((hour == 0)? 12: hour));





					retval = hour + ":" + ((min < 10)? "0" + min: min);





					break;


				case "24HH:MM": //12-hour s secs


					retval = ((hour < 10)? "0" + hour: hour) + ":" + ((min < 10)? "0" + min: min);





					break;


				default: //not specified; return 24-hour c secs


					retval = ((hour < 10)? "0" + hour: hour) + ":" + ((min < 10)? "0" + min: min) + ":" + ((sec)? ((sec < 10)? "0" + sec: sec): "00");





					break;


				}


			}


		} else {


			retval = -1;


		}


	}





	return retval;


}






