function processForms()
{
  var oForms = $A(document.forms);  
  if (oForms)
  {
    oForms.each(function(oForm) 
    {
      var form_extended = $(oForm);
      if (!form_extended || form_extended.hasClassName('do-not-process'))
        return;
      
      // Get all the elements of the form and process them
      var oElements = form_extended.select('input[type=text], select');
      oElements.each( function(oElement)
      {
        if (form_extended.hasClassName('inline-labels'))
        {
          var oLabel = $(Builder.node('label',  {
                                                  className : 'input-inner-label',
                                                  title : oElement.title,
                                                  'for' : oElement.id
                                                }, oElement.title));
          
          if ("" != oElement.value)
          {
            oLabel.setStyle({display : 'none'});
          }
          
          oElement.observe('keydown', function() {
            var oLabel = $(this).parentNode.down('label[title="'+this.title+'"]');
            if (oLabel)
            {
              oLabel.hide();
            }
          });
          oElement.observe('blur', function() {
            if ("" == this.value)
            {
              var oLabel = $(this).parentNode.down('label[title="'+this.title+'"]');
              if (oLabel)
              {
                oLabel.appear();
              }
            }
          });
          
          $(oElement.parentNode).insert(oLabel);
        }
        
        if (oElement.hasClassName('highlight-on-selection'))
        {
          oElement.observe('focus', function() {
            $(this).select();
          });
        }
        
        // Add event to required/valid fields to validate the contents when they are changed
        if (oElement.hasClassName('required') || oElement.hasClassName('valid'))
        {
          oElement.observe('keyup', function() {
            if (this.getValue())
            {
              $(this).removeClassName('required');
              $(this).addClassName('valid');
            }
            else
            {
              $(this).removeClassName('valid');
              $(this).addClassName('required');
            }
          });
        }
      });
      
      form_extended.observe('submit', function(oEvent) { validateForm(oEvent); });
      
      if (form_extended.hasClassName('autofocus'))
      {
        form_extended.focusFirstElement();
      }
      else
      {
        
      }
      
      var checkall_element = form_extended.down('input.check-box-checkall');
      if (checkall_element)
      {
        checkall_element.observe('click', function(event) 
        {
          var checkall_controller = this;
          var form_checkboxes = form_extended.select('input[type=checkbox]');
          form_checkboxes.each( function(checkbox)
          {
            if (!checkbox.hasClassName('check-box-checkall'))
            {
              checkbox.checked = checkall_controller.checked;
            }
          });
        });
      }
    });
  }
  else
  {
    
  }
}
addLoadEvent(processForms);

function validateForm(oEvent)
{
  var bSuccess = false;
  
  var oRequiredElements = oEvent.target.select('input.required:not([type=hidden]),select.required');
  var aErrorElements = oRequiredElements.inject([], function(aResults, oElement) {    
    if (oElement.getValue())
    {
      oElement.removeClassName('required');
      oElement.addClassName('valid');
    }
    else
    {
      var oLabel = null;
      if ((oLabel = oEvent.target.down('label[for='+oElement.id+']')))
      {
        aResults.push(oLabel.innerHTML);
      }
      else
      {
        aResults.push(oElement.name);
      }
    }
    
    return aResults;
  });
  
  if (aErrorElements.size() > 0)
  {
    oEvent.stop();
    alert(T.p("Required Information is missing")+":\n - "+aErrorElements.join("\n - "));
  }
  else
  {
    bSuccess = true;
  }
  return bSuccess;
}

