String.prototype.Replace = function(o, n) { return this.split(o).join(n); }

function validateForm(frm){
  for (var i = 0; i < frm.length; i++){
    var req=frm[i].getAttribute('required');if (req==null)req='-1';
	switch(req){
		case '-1':break;
		case 'date' :if ((!isDate(frm[i].value) && !frm[i].getAttribute('condition')) || invalidValue(frm[i])) {alert(getValidationMessage(frm[i], 'vMessage'));frm[i].focus();frm[i].select();return false;};break;
		case 'email':if (!frm[i].disabled){if ((!validEmail(frm[i].value) && !frm[i].getAttribute('condition')) || invalidValue(frm[i])) {alert(getValidationMessage(frm[i], 'vMessage'));frm[i].focus();frm[i].select();return false;}};break;
		default:
			if (req!='-1'||req.toLowerCase()=='condition'&&!frm[i].disabled){
		    switch (frm[i].type.toLowerCase()){
			    case 'hidden':break;
			    case 'radio':
					  if (getSelectedOption(frm[frm[i].name]) == -1) {
					  	alert(getValidationMessage(frm[i], 'vMessage'));return false;
					  }
			    	break;
			    case 'select-one': case 'select' :
					  if ((frm[i].selectedIndex<=0&&!frm[i].getAttribute('condition'))||invalidValue(frm[i])){
					  	alert(getValidationMessage(frm[i], 'vMessage'));frm[i].focus();return false;
					  }
						break;
			    default:
			      if ((frm[i].value == '' && !frm[i].getAttribute('condition')) || invalidValue(frm[i])){
				  		alert(getValidationMessage(frm[i], 'vMessage'));frm[i].focus();return false;
			   	  }
						break;
		  	}
	  	}
		}
  }
 return true;
}

function getSelectedOption(fld) {if (!fld.length){if (fld.checked) return 0;};for (var i=0;i<fld.length;i++)if(fld[i].checked)return i;return -1;}
function validEmail(email) {var invalidChars="`~!#$%^&*()+|<>?/:,; ";
	for(i=0;i<invalidChars.length;i++) {
		var badChar=invalidChars.charAt(i);
		if(email.indexOf(badChar,0)!=-1) return false;
	}
	var atPos=email.indexOf("@",1)
	if(atPos==-1) return false;
	if(email.indexOf("@",atPos+1)!=-1) return false;

	var periodPos=email.indexOf(".",atPos)
	if(periodPos==-1) return false;
	if(periodPos+3>email.length) return false;
	return true;
}

function getValidationMessage(elm, attr) {
	var custom_message=elm.getAttribute(attr);
	if(!custom_message)custom_message=elm.getAttribute("required");
	if(!custom_message)custom_message=elm.getAttribute("dataType");
	var fld_name
	if(elm.getAttribute('display_name')){
		fld_name = elm.getAttribute('display_name');
	}else{
		if (elm.id){fld_name=elm.id;}else{fld_name=elm.name;}
	}
	if (custom_message) {
		switch (custom_message){
			case 'date' :return 'Please enter a valid date in "'+fld_name+'".';break;
			case 'num': case 'int' :return 'Please enter a numeric value in "'+fld_name+'".';break;
			case 'email':return 'Please enter a valid Email Address in "'+fld_name+'".';break;
			default:return custom_message;
		}
	}
	if (elm.type.toLowerCase()=="select-one"||elm.type.toLowerCase()=="select"||elm.type.toLowerCase()=="radio") return 'Please select a "' + fld_name + '".';
	return 'Please enter a value in "' + fld_name + '".';
}

function invalidValue(elm) {
  var invalid_values = elm.getAttribute('invalid');
  var data_type = elm.getAttribute('dataType');
  var condition = elm.getAttribute('condition');
  switch (data_type) {
    case 'int' :
		var val=elm.value;if (val==null||val=="")val=elm.defaultValue;
		if (isNaN(val)) return true;
		var min_value = elm.getAttribute('min');
		var max_value = elm.getAttribute('max');
		if (min_value) if (min_value > val) return true;
		if (max_value) if (max_value < val) return true;
	break;
	default :
	  	if (condition) {
			if (!eval(condition.Replace('this.form', 'document.forms.' + elm.form.name).Replace('this', 'document.forms.' + elm.form.name + '.' + elm.name))) {
				return true;
			}
		}
		var min_length = elm.getAttribute('min_length');
		var max_length = elm.getAttribute('max_length');
		if (elm.value.length < min_length && min_length) return true;
		if (elm.value.length > max_length && max_length) return true;
	  if (invalid_values) {
	    if (invalid_values.indexOf(',') != -1) {
			invalid_values = invalid_values.split(',');
			for (var x = 0; x < invalid_values.length; x++) if (elm.value == invalid_values[x]) return true;
		}
		else {
			return (elm.value == invalid_values);
		}
	  }
  }
  return false;
}

var dtCh= "/";var minYear=1300;var maxYear=4000;
function isDate(dtStr){var daysInMonth=DaysArray(12);dtStr=dtStr.Replace(' ','');var pos1=dtStr.indexOf(dtCh);var pos2=dtStr.indexOf(dtCh,pos1+1);var strMonth=dtStr.substring(0,pos1);var strDay=dtStr.substring(pos1+1,pos2);var strYear=dtStr.substring(pos2+1);
	strYr=strYear;if (strDay.charAt(0)=="0"&&strDay.length>1)strDay=strDay.substring(1);if (strMonth.charAt(0)=="0"&&strMonth.length>1) strMonth=strMonth.substring(1);
	for (var i=1;i<=3;i++){if(strYr.charAt(0)=="0"&&strYr.length>1)strYr=strYr.substring(1);}
	month=parseInt(strMonth);day=parseInt(strDay);year=parseInt(strYr);
	if(pos1==-1||pos2==-1){return false;}
	if(strMonth.length<1||month<1||month>12){return false;}
	if(strDay.length<1||day<1||day>31||(month==2&&day>daysInFebruary(year))||day>daysInMonth[month]){return false;}
	if(strYear.length!=4||year==0||year<minYear||year>maxYear){return false;}
	if(dtStr.indexOf(dtCh,pos2+1)!=-1||!isNaN(stripCharsInBag(dtStr,dtCh))==false){return false;}
return true;
}
function DaysArray(n){for(var i=1;i<=n;i++){this[i]=31;if(i==4||i==6||i==9||i==11){this[i]=30;};if(i==2){this[i]=29;}};return this;};
function daysInFebruary(year){return (((year%4==0)&&((!(year%100==0))||(year%400==0)))?29:28);};
function stripCharsInBag(s,bag){var i;var returnString="";for(i=0;i<s.length;i++){var c=s.charAt(i);if (bag.indexOf(c)==-1)returnString+=c;};return returnString;}