var savedClasses = new Array();

function updateValidatedField(valid, element, error_div_id, message, additionalDivs) {
  if (!valid) {
    if (element && savedClasses[element.name] == undefined) savedClasses[element.name] = element.className;
    if (element) element.className = "invalid_form_element";
    if (error_div_id != undefined) {
      var err = document.getElementById(error_div_id);
      if (!err) return false;
      if (message != undefined) err.innerHTML = message;
    }
    if (additionalDivs != undefined) {
      for (var i = 0; i < additionalDivs.length; i++) {
        var div = document.getElementById(additionalDivs[i]);
        if (!div) continue;
        div.style.display = "";
      }
    }      
    return false;
  } else {
    if (element && savedClasses[element.name] != undefined) element.className = savedClasses[element.name];
    if (error_div_id != undefined) {
      var err = document.getElementById(error_div_id);
      if (!err) return true;
      if (message != undefined) err.innerHTML = message;
    }
    if (additionalDivs != undefined) {
      for (var i = 0; i < additionalDivs.length; i++) {
        var div = document.getElementById(additionalDivs[i]);
        if (!div) continue;
        div.style.display = "none";
      }
    }      
    return true;
  }
}

function validate(element, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validate.arguments;
  if (args.length > 3) 
    for (var i = 3; i < args.length; i++) additionalDivs[i-3] = args[i];

  if (element.value == "") return updateValidatedField(false, element, error_div_id, message, additionalDivs);
  else return updateValidatedField(true, element, error_div_id, message, additionalDivs);
}

function validateSelect(element, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateSelect.arguments;
  if (args.length > 3) 
    for (var i = 3; i < args.length; i++) additionalDivs[i-3] = args[i];

  if (element.value == 0) return updateValidatedField(false, element, error_div_id, message, additionalDivs);
  else return updateValidatedField(true, element, error_div_id, message, additionalDivs);
}

function validateRadio(element, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateRadio.arguments;
  if (args.length > 3) 
    for (var i = 3; i < args.length; i++) additionalDivs[i-3] = args[i];

  var set = false;
  for (var i = 0; i < element.length && !set; i++) {
    if (element[i].checked == true) set = true;
  }
  return updateValidatedField(set, false, error_div_id, message, additionalDivs);
}

function validateEmail(element, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateEmail.arguments;
  if (args.length > 3) 
    for (var i = 3; i < args.length; i++) additionalDivs[i-3] = args[i];

  if (element.value == "") return updateValidatedField(true, element, error_div_id, message, additionalDivs);
  testValue = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(element.value);
  return updateValidatedField(testValue, element, error_div_id, message, additionalDivs);
}

function validateUnique(element, element_key, name_array, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateUnique.arguments;
  if (args.length > 5) 
    for (var i = 5; i < args.length; i++) additionalDivs[i-5] = args[i];

  for (var i = 0; i < name_array.length; i++) {
    if (element_key != i && element.value == name_array[i])
      return updateValidatedField(false, element, error_div_id, message, additionalDivs);
  }
  return updateValidatedField(true, element, error_div_id, message, additionalDivs);
}

function validateInt(element, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateInt.arguments;
  if (args.length > 3) 
    for (var i = 3; i < args.length; i++) additionalDivs[i-3] = args[i];

  if (isNaN(Number(element.value))) return updateValidatedField(false, element, error_div_id, message, additionalDivs);
  else return updateValidatedField(true, element, error_div_id, message, additionalDivs);
}

function validateFile(element, extension_array, error_div_id, message)
{
  var additionalDivs = new Array();
  var args = validateFile.arguments;
  if (args.length > 4) 
    for (var i = 4; i < args.length; i++) additionalDivs[i-4] = args[i];

  var extension = element.value.substring(element.value.lastIndexOf(".")+1);
  for (var i = 0; i < extension_array.length; i++) {
    if (extension_array[i] == extension) return updateValidatedField(true, element, error_div_id, message, additionalDivs);
  }
  return updateValidatedField(false, element, error_div_id, message, additionalDivs);
}

function validateForm(form)
{
  var eventFunctions = new Array("onchange", "onclick");
  var retval = true;
  
  var form_name;
  
  if (form.id) form_name = form.id
  else form_name = form.name;

	for (var i = 0; i < form.elements.length; i++) {
		var element = form.elements[i];
		if (element.style && element.style.display == "none") continue;
    
    var element_return = true;
		for (var j = 0; j < eventFunctions.length; j++) {
		  if (element[eventFunctions[j]] == undefined) continue;
    	var str = new String(element[eventFunctions[j]]);
    	if (str != undefined) while (str.indexOf("validate") > 0) {
    	  var strPart = str.substring(str.indexOf("validate"));
    	  var validateElementStart = strPart.substring(strPart.indexOf("(")+1);
    	  var validateElementEnd = validateElementStart.indexOf(")");
    	  if (validateElementStart.indexOf(",") < validateElementEnd && validateElementStart.indexOf(",") > 0) 
    	    validateElementEnd = validateElementStart.indexOf(",");
    	  var validateElement = validateElementStart.substring(0,validateElementEnd);
    	  var part; 
    	  
    	  if (validateElement == "this") {
    	    part = strPart.substring(0,strPart.indexOf("(")+1) + "document.forms['"+form_name+"'].elements['";
    	    part += element.name+"']" + validateElementStart.substring(validateElementEnd);
    	    strPart = part;
    	  }
    	  part = strPart;
    	  var new_part;
    	  while (part.indexOf("'") > 0) {
    	    new_part = part.substring(part.indexOf("'")+1);
    	    if (new_part.indexOf("'") < 0) return false;
    	    part = new_part.substring(new_part.indexOf("'")+1);
    	  }
    	  var functionName = strPart.substring(0,strPart.indexOf(")")+1);

    	  if (element_return && eval(functionName) == false) {
    	    retval = false; element_return = false;
    	  }
    	  str = strPart.substring(1);
    	}
		}
	} 
	if (retval == false) window.scroll(0,0);
  return retval;
}
