String.prototype.Replace = function(o, n) { return this.split(o).join(n); }

function validateForm(frm){
  for (var i = 0; i < frm.length; i++){
    if (frm[i].getAttribute('required') == '' && !frm[i].disabled){
	    switch (frm[i].type.toLowerCase()){
	    case 'hidden':
	    break;
	    case 'radio':
		  if (getSelectedOption(frm[frm[i].name]) == -1) {
		  	alert(getValidationMessage(frm[i], 'validationmsg'));
		    return false;
		  }
	    break;
	    case 'select-one':
		  if (frm[i].selectedIndex <= 0 || invalidValue(frm[i])){
		  	alert(getValidationMessage(frm[i], 'validationmsg'));
		    frm[i].focus();
		    return false;
		  }
	    break;
	    default:
	      if ((frm[i].value == '' && !frm[i].getAttribute('condition')) || invalidValue(frm[i])){
		  	alert(getValidationMessage(frm[i], 'validationmsg'));
		    frm[i].focus()
		    return false;
	   	  }
	  	}
  	}
    else if (frm[i].getAttribute('required') == 'email' && !frm[i].disabled){
		if (!validEmail(frm[i].value)) {
		  	alert(getValidationMessage(frm[i], 'validationmsg'));
		    frm[i].focus();
			frm[i].select();
		    return false;
		}
	}
  }
  return true;
}

function getSelectedOption(fld) {
  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)
	    return custom_message;
	if (elm.id)
		return 'Please enter a value in "' + elm.id + '".';
	else
		return 'Please enter a value in "' + elm.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' :
		if (isNaN(elm.value)) return true;
		var min_value = elm.getAttribute('min');
		var max_value = elm.getAttribute('max');
		if (min_value) {
			if (min_value > elm.value) return true;
		}
		if (max_value) {
			if (max_value < elm.value) 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;
			}
		}
	  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;
}
