addLoadListener(formInit);

function getElementsByAttribute(attribute, attributeValue)
{
  var elementArray = new Array();
  var matchedArray = new Array();

  if (document.all)
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  for (var i = 0; i < elementArray.length; i++)
  {
    if (attribute == "class")
    {
      var pattern = new RegExp("(^| )" + attributeValue + "( |$)");

      if (pattern.test(elementArray[i].className))
      {
        matchedArray[matchedArray.length] = elementArray[i];
      }
    }
    else if (attribute == "for")
    {
      if (elementArray[i].getAttribute("htmlFor") || elementArray[i].getAttribute("for"))
      {
        if (elementArray[i].htmlFor == attributeValue)
        {
          matchedArray[matchedArray.length] = elementArray[i];
        }
      }
    }
    else if (elementArray[i].getAttribute(attribute) == attributeValue)
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
}

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
    var functionString = eventType + functionRef;
    target["e" + functionString] = functionRef;
    target[functionString] = function(event)
    {
      if(typeof event == "undefined"){event = window.event}; target["e" + functionString](event);
    };
    
    target.attachEvent("on" + eventType, target[functionString]);
  }
  else
  {
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true;
}

function detachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.removeEventListener != "undefined")
  {
    target.removeEventListener(eventType, functionRef, capture)
  }
  else if (typeof target.detachEvent != "undefined")
  {
    var functionString = eventType + functionRef;

    target.detachEvent("on" + eventType, target[functionString]);

    target["e" + functionString] = null;
    target[functionString] = null;
  }
  else
  {
    target["on" + eventType] = null;
  }

  return true;
}

function stopDefaultAction(event)
{
    event.returnValue = false;
    if (typeof event.preventDefault != "undefined")
    {
        event.preventDefault();
    }
}

function formInit()
{
    if(document.forms[0]) document.forms[0].onsubmit = validateFields;
}

function validateFields()
{
    var elements = document.forms[0].elements;
    var errors = 0;
    
    for (var i = 0; i < elements.length; i++)
    {
        var newError = false;
        errSpan="E-"+elements[i].name ;
        var errorMessage = "";
        
        if (/(^| )checkRequired( |$)/.test(elements[i].className)) 
        {
            if (elements[i].type=="radio")
            {
                var radioName = elements[i].name;
                var numberOfButtons = document.forms[0][radioName].length;
                newError = true;

                for (var j = 0; j < numberOfButtons; j++)
                {  
                    if (document.forms[0][radioName][j].checked) 
                    {
                        newError = false;
                    }
                }
                
                i = i + numberOfButtons -1;
            }

            else if (elements[i].value == "") newError = true;
            
            if (newError) errorMessage = "champs obligatoire";
            
        }

        if (/(^| )checkEmail( |$)/.test(elements[i].className) && elements[i].value != "" && !validateMail(elements[i].value))
        {
            errorMessage = "l'adresse E-mail n'est pas valide";
            newError = true;
        }

         
        if (newError)
        {
            errors++;
            
            if (document.getElementById(errSpan))
            {
                var span = document.getElementById(errSpan);
                span.innerHTML = errorMessage;
            }
            elements[i].className=elements[i].className+" error";
        }
        else
        {
            if (/(^| )error( |$)/.test(elements[i].className))
            {
                elements[i].className = elements[i].className.replace(/error/g, "");
            }
            if (document.getElementById(errSpan))
            {
                var span = document.getElementById(errSpan);
                span.innerHTML = "";
            }
            
        }
    }
    if (errors) return false;
}

function validateMail(string)
{
    return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(string)); 
}


