var vdtDispatch = new Array();
vdtDispatch["isNotEmpty"] = new Dispatcher(isNotEmpty);
vdtDispatch["isSelected"] = new Dispatcher(isSelected);
vdtDispatch["isDate"] = new Dispatcher(isDate);
vdtDispatch["isPosInteger"] = new Dispatcher(/^\d+$/);
vdtDispatch["isInteger"] = new Dispatcher(/^-?\d+$/);
vdtDispatch["isNumber"] = new Dispatcher(/(^-?\d+\.\d*$)|(^-?\d+$)|(^-?\.\d+$)/);
//vdtDispatch["isEmail"] = new Dispatcher(/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/);
vdtDispatch["isEmail"] = new Dispatcher(/^[\'a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/);
vdtDispatch["isPhone"] = new Dispatcher(/^\(?\d{3}\)?([-. ]?)\d{3}[-. ]?\d{4}$/);
vdtDispatch["isSSN"] = new Dispatcher(/^\d{3}([- ]?)\d{2}\1\d{4}$/);
vdtDispatch["isZipCode"] = new Dispatcher(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
vdtDispatch["isCurrency"] = new Dispatcher(/(^\$?\d+\.\d{2}$)|(^\$?\d+$)|(^\$?\.\d{2}$)/);
//vdtDispatch["isMilEmail"] = new Dispatcher(/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[mil]/);
vdtDispatch["isMilEmail"] = new Dispatcher(/^[\'a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[mil]/);
vdtDispatch["isValidDate"] = new Dispatcher(isEmpty,isDate);
vdtDispatch["isValidPosInteger"] = new Dispatcher(isEmpty,"isPosInteger");
vdtDispatch["isValidNumber"] = new Dispatcher(isEmpty,"isNumber");
vdtDispatch["isValidEmail"] = new Dispatcher(isEmpty,"isEmail");
vdtDispatch["isValidPhone"] = new Dispatcher(isEmpty,"isPhone");
vdtDispatch["isValidSSN"] = new Dispatcher(isEmpty,"isSSN");
vdtDispatch["isValidZipCode"] = new Dispatcher(isEmpty,"isZipCode");
vdtDispatch["isValidCurrency"] = new Dispatcher(isEmpty,"isCurrency");
vdtDispatch["isValidMilEmail"] = new Dispatcher(isEmpty,"isMilEmail");

function Dispatcher() {
	this.vldtProc = arguments;
	this.applyValidate = dspExecute;

	function dspExecute(objRef) {
		with(this) {
			var ret = false;
			for(i=0;i < this.vldtProc.length;i++) {
				if(vldtProc[i].compile && vldtProc[i].test(objRef.value) || vldtProc[i].substring && vdtDispatch[vldtProc[i]].applyValidate(objRef) || vldtProc[i].call && vldtProc[i](objRef)) ret = true;
			}
			return ret;
		}
	}
}

function validate(objRef,method) {
	var args = validate.arguments;
	for (i = 1;i < args.length;i++) { if(!vdtDispatch[args[i]].applyValidate(objRef)) return false;}
	return true;
}

function isEmpty(objRef){ return (objRef.value == null || objRef.value == "");}

function isNotEmpty(objRef){ return !isEmpty(objRef);}

function isSelected(objRef) {
	if(objRef.selectedIndex != null) return ((objRef.selectedIndex == 0 && !objRef.multiple) || (objRef.selectedIndex == -1 && objRef.multiple)? false : true);
	if(objRef.length == null) return objRef.checked;
	for(var i = 0;i < objRef.length;i++) {if(objRef[i].checked == true) return true;}
	return false;
}

function isDate(objRef) {
	if(/[^a-zA-Z0-9]+/.test(objRef.value) && !isNaN(Date.parse(objRef.value)) ) {
		var dateRef = new Date(objRef.value);
		if (dateRef.getFullYear() > 1754)
			return true;
		else
			return false;
	}
	return false;
}
/*function isDate(objRef) {
	if(/[^a-zA-Z0-9]+/.test(objRef.value) && !isNaN(Date.parse(objRef.value)) ) return true;
	return false;
}*/