
function HtmlForm()
{
  this.forms = new Array();
}

HtmlForm.prototype.registerForm = function(formName)
{
  if (!this.forms[formName])
  {
    this.forms[formName] = new Array();
  }
}

HtmlForm.prototype.registerFormField = function(formName,fieldName)
{
  this.registerForm(formName);
  if (!this.forms[formName][fieldName])
  {
    this.forms[formName][fieldName] = new Array();
  }
}

HtmlForm.prototype.registerRequiredFieldValidator = function(formName,fieldName,fieldType,notAllowedValue,errorText)
{
  this.registerFormField(formName,fieldName);
  this.forms[formName][fieldName]["is_required_field"] = true;
  this.forms[formName][fieldName]["rfv_field_type"] = fieldType;
  this.forms[formName][fieldName]["rfv_not_allowed_value"] = notAllowedValue;  
  this.forms[formName][fieldName]["rfv_error_text"] = errorText;  
}

HtmlForm.prototype.getSelectedIndex = function(formName,fieldName)
{
  this.registerFormField(formName,fieldName);
  var formObject = window.document.forms[formName][fieldName];
  if (formObject != null &&
      formObject.type == "select-one")
  {
    return formObject.selectedIndex;
  }
  else
  {
    alert("Error at: HtmlForm.getSelectedIndex(..). Requested object is not select!");
  }
  return -1;
}

HtmlForm.prototype.getSelectedValue = function(formName,fieldName)
{
  var selectedIndex = this.getSelectedIndex(formName,fieldName);
  if (selectedIndex != -1)
  {
    var formObject = window.document.forms[formName][fieldName];
    return formObject.options[selectedIndex].value;
  }
  return null;
}

HtmlForm.prototype.validateEmailAddress = function(eMail)
{
  if (eMail == null ||
      eMail.length < 3 ||
      eMail.indexOf("@")  == -1 ||
      eMail.indexOf(".")  == -1 ||
      eMail.indexOf("*")  != -1 ||
      eMail.indexOf("'")  != -1 ||
      eMail.indexOf(",")  != -1 ||
      eMail.indexOf("\\") != -1 ||
      eMail.indexOf("/")  != -1)
  {
    alert("Email address is not valid! \n\n" +
          "Folowing rules are used for e-mail check:\n\n" +
          "1. Must have more than 2 char\n" +
          "2. Must have @ in it\n" +
          "3. Must have minimum one dot in it\n" +
          "4. Must *not* have folowin chars in it: *',/\\\n");
    return false;
  }
  return true;
}

HtmlForm.prototype.validateUrl = function(url)
{
  /*
  function validarURL(valor)
  {
    if (/^w+([.-]?w+)*.w+([.-]?w+)*(.w{2,3})+$/.test(valor))
    {
     return (true)
    } 
    else 
    {
      return (false);
    }
  }
  */
  if (url == null ||
      url.length < 3 ||
      url.indexOf(".") == -1)
  {
    alert("Url address is not valid! \n\n" +
          "Folowing rules are used for e-mail check:\n\n" +
          "1. Must have more than 2 char\n" +
          "2. Must have minimum one dot in it\n");
    return false;
  }
  return true;
}

HtmlForm.prototype.onValidateRequiredFields = function(formName,validateSpecialFields)
{
  var requiredFields = new Array();
  for (fieldName in this.forms[formName])
  {
    if (this.forms[formName][fieldName]["is_required_field"])
    {
      var formObject = window.document.forms[formName][fieldName];
      if (this.forms[formName][fieldName]["rfv_field_type"] == "radio")
      {
        formObject = window.document.forms[formName][fieldName][0];
      }
      if (formObject != null)
      {
        var filedIsOk = true;
        var fieldValue = null;
        if (formObject.type == "text")
        {
          fieldValue = formObject.value;
        }
        else if (formObject.type == "textarea")
        {
          fieldValue = formObject.value;
        }
        else if (formObject.type == "password")
        {
          fieldValue = formObject.value;
        }
        else if (formObject.type == "radio")
        {
          fieldValue = "";
          for (var i=0; i<window.document.forms[formName][fieldName].length; i++)
          {
            
            if (window.document.forms[formName][fieldName][i].checked == true)
            {
              formObject = window.document.forms[formName][fieldName][i];
              fieldValue = formObject.value;
            }
          }
        }
        else if (formObject.type == "select-one" &&
                 formObject.selectedIndex != -1)
        {
          fieldValue = this.getSelectedValue(formName,fieldName);
        }
        if (validateSpecialFields == true)
        {
          if (this.forms[formName][fieldName]["rfv_field_type"] == "email")
          {
            if (this.validateEmailAddress(fieldValue) == false)
            {
              requiredFields = new Array();
              requiredFields.push(formObject);
              requiredFields.push(this.forms[formName][fieldName]["rfv_field_type"]);
              requiredFields.push(this.forms[formName][fieldName]["rfv_error_text"]);
              return requiredFields;
            }
          }
          else if (this.forms[formName][fieldName]["rfv_field_type"] == "url")
          {
            if (this.validateUrl(fieldValue) == false)
            {
              requiredFields = new Array();
              requiredFields.push(formObject);
              requiredFields.push(this.forms[formName][fieldName]["rfv_field_type"]);
              requiredFields.push(this.forms[formName][fieldName]["rfv_error_text"]);
              return requiredFields;
            }
          }
        }
        else
        {
          if (fieldValue == this.forms[formName][fieldName]["rfv_not_allowed_value"])
          {
            requiredFields.push(formObject);
            requiredFields.push(this.forms[formName][fieldName]["rfv_field_type"]);
            requiredFields.push(this.forms[formName][fieldName]["rfv_error_text"]);
          }
        }
      }
    }
  }
  return requiredFields;
}

HtmlForm.prototype.onValidateAllFields = function(formName)
{
  var requiredFields = this.onValidateRequiredFields(formName,false);
  if (requiredFields.length > 0)
  {
    var alertMessage = "Following fields are required:\r\n";
    for (var i=0; i<requiredFields.length; i+=3)
    {
      alertMessage += "  " + requiredFields[i + 2] + "\r\n";
    }
    alert(alertMessage);
    requiredFields[0].focus();
    return false;
  }
  requiredFields = this.onValidateRequiredFields(formName,true);
  if (requiredFields.length > 0)
  {
    requiredFields[0].focus();
    return false;
  }
  if (window.document.forms[formName]["password"] != null &&
      window.document.forms[formName]["password_confirm"] != null)
  {
    if (window.document.forms[formName]["password"].value != window.document.forms[formName]["password_confirm"].value)
    {
      alert("'Password' and 'Confirm Password' must be same values.");
      window.document.forms[formName]["password"].focus();
      return false;
    }
  }
  return true;
}

HtmlForm.prototype.submitForm = function(formName)
{
  this.showUploadingAnimations(formName);
  window.document.forms[formName].submit();
  return false;
}

HtmlForm.prototype.onButtonSaveAndClose = function(formName)
{
  if (this.onValidateAllFields(formName) == false)
  {
    return false;
  }
  if (window.document.forms[formName]["command"] != null)
  {
    window.document.forms[formName]["command"].value = "save_and_close";
  }
  return this.submitForm(formName);
}

HtmlForm.prototype.onButtonGoBack = function(url)
{
  document.location.href = url;
}

HtmlForm.prototype.showUploadingAnimations = function(formName)
{
  var requiredFields = new Array();
  for (fieldName in this.forms[formName])
  {
    var formObject = window.document.forms[formName][fieldName];
    if (formObject != null)
    {
      if (formObject.type == "file")
      {
        var uploaDiv = document.getElementById(formObject.name + "_upload_div");
        if (uploaDiv != null)
        {
          uploaDiv.style.display = "block";
        }
      }
    }
  }
}

var clsHtmlForm = new HtmlForm();



