/*  Formcheck javascript, version 1.2 
 *
 *  Original by quirksmode.org 
 *  
--------------------------------------*/

/* event adding */
   function addEventSimple(obj,evt,fn) {
      if (obj.addEventListener)
         obj.addEventListener(evt,fn,false);
      else if (obj.attachEvent)
         obj.attachEvent('on'+evt,fn);
   }

/* form validating */
   var validationErrorMessage = new Object();
   validationErrorMessage['required'] = 'Verplicht veld!';
   validationErrorMessage['requiredsmall'] = 'Verplicht';
   validationErrorMessage['numeric'] = 'Dit veld moet numeriek zijn';
   validationErrorMessage['postcode'] = 'Dit veld moet een postcode zijn';
   validationErrorMessage['price'] = 'Onjuist geldbedrag';
   validationErrorMessage['pattern'] = 'Patroon onjuist';
   validationErrorMessage['email'] = 'Geen emailadres!';
   validationErrorMessage['emailsmall'] = 'Onjuist email adres';

   var validationFunctions = new Object();
   validationFunctions["required"] = isRequired;
   validationFunctions["requiredsmall"] = isRequired;
   validationFunctions["pattern"] = isPattern;
   validationFunctions["postcode"] = isPostCode;
   validationFunctions["price"] = isPrice;
   validationFunctions["numeric"] = isnumeric;
   validationFunctions["emailsmall"] = isEmail;
   validationFunctions["email"] = isEmail;

   function isRequired(formField) {
      switch (formField.type) {
         case 'text':
         case 'select-one':
            if (trim(formField.value))
               return true;
            return false;
         case 'radio':
            var radios = formField.form[formField.name];
            for (var i=0;i<radios.length;i++) {
               if (radios[i].checked) return true;
            }
            return false;
         case 'checkbox':
            return formField.checked;
         case 'textarea':
            // check for tinymce
            try{
               if(tinyMCE.activeEditor){
                  tinyMCE.triggerSave(true,true); // trigger save event
                  var temp=formField.value;
                  temp=trim(temp.replace(/<\/?[^>]+>/gi, ''));
                  if(temp) return true; // check for empty html
               }
            } catch(err1){};

            // normal textarea
            if (trim(formField.value)) return true;

            return false;
      }
   }

   function isPattern(formField,pattern) {
      var pattern = pattern || formField.getAttribute('pattern');
      var regExp = new RegExp("^"+pattern+"$","");
      var correct = regExp.test(formField.value);
      if (!correct && formField.getAttribute('patternDesc'))
         correct = formField.getAttribute('patternDesc');
      return correct;
   }

   function isPostCode(formField) {
      return isPattern(formField,"\\d{4}\\s*\\D{2}");
   }
   function isPrice(formField) {
      return isPattern(formField,"\\d+\\,\\d{2}");
   }
   function isnumeric(formField) {
      return isPattern(formField,"\\d+");
   }

   // aangepast, oude functie voldeed niet
   function isEmail(formField) {
      if(formField.value=='')return true; // niet controleren op waarde, gebruik required
      var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
      var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // valid
      if (!reg1.test(formField.value) && reg2.test(formField.value))
        return true;
      else
         return false;

   }

   function emptyFunction() {
      return true;
   }


   function trim(value) {
     value = value.replace(/^\s+/,'');
     value = value.replace(/\s+$/,'');
     return value;
   }

   /*********************************/

   var W3CDOM = document.createElement && document.getElementsByTagName;

   function validateForms() {
      if (!W3CDOM) return;
      var forms = document.forms;
      for (var i=0;i<forms.length;i++) {
         if(forms[i].id=='loginform')continue;
         if(forms[i].id=='ledenform')continue;
         if(forms[i].id=='activityform')continue;
         if(forms[i].id=='joinform')continue;
         forms[i].onsubmit = validate;
      }
   }

   addEventSimple(window,'load',validateForms);

   function validate() {
      var els = this.elements;
      var validForm = true;
      var firstError = null;
      for (var i=0;i<els.length;i++) {
         if (els[i].removeError)
            els[i].removeError();
         var req = els[i].getAttribute('validation');
         if (!req) continue;
         var reqs = req.split(' ');
         if (els[i].getAttribute('pattern'))
            reqs[reqs.length] = 'pattern';
         for (var j=0;j<reqs.length;j++) {
            if (!validationFunctions[reqs[j]])
               validationFunctions[reqs[j]] = emptyFunction;
            var OK = validationFunctions[reqs[j]](els[i]);
            if (OK != true) {
               var errorMessage = OK || validationErrorMessage[reqs[j]];
               writeError(els[i],errorMessage)
               validForm = false;
               if (!firstError)
                  firstError = els[i];
               break;
            }
         }
      }

      if (!validForm) {
         //alert("Het formulier is niet juist ingevuld");
         /*location.hash = '#contactform';*/
         writeSingleError(this, 'Het formulier is niet juist ingevuld.');

      }
      return validForm;

   }

   function writeError(obj,message) {
      // kijk of errorMessage al is gezet, zo nee, toevoegen
      if(obj.className.indexOf('errorMessage')==-1)
         obj.className += ' errorMessage';

      obj.onchange = removeError;
      if (obj.errorMessage || obj.parentNode.errorMessage) return;
      var errorMessage = document.createElement('label');
      errorMessage.className = 'errorMessage';
      errorMessage.setAttribute('for',obj.id);
      errorMessage.setAttribute('htmlFor',obj.id);
      errorMessage.appendChild(document.createTextNode(message));
      obj.parentNode.appendChild(errorMessage);
      obj.errorMessage = errorMessage;
      obj.parentNode.errorMessage = errorMessage;
   }

   function removeError() {
      this.className = this.className.replace(/errorMessage/,'');
      if (this.errorMessage) {
         this.parentNode.removeChild(this.errorMessage);
         this.errorMessage = null;
         this.parentNode.errorMessage = null;
         removeSingleError();
      }
      this.onchange = null;
   }


   /* show error next to submit button */
   function writeSingleError(formObject,message){

      // search for button
      var button = formObject.getElementsByTagName('button')[0];

      // check if error message exists
      if(!document.getElementById('singleErrorMessage')){

         // create error message
         var errorButtonMessage = document.createElement('span');
         /*errorButtonMessage.className = 'errorMessage';*/
         errorButtonMessage.appendChild(document.createTextNode(message));
         errorButtonMessage.id = 'singleErrorMessage';
         button.parentNode.appendChild(errorButtonMessage);
      }

   }
   /* remove error next to submit button */
   function removeSingleError(){
      var errorObject = document.getElementById('singleErrorMessage');
      if(errorObject) errorObject.parentNode.removeChild(errorObject);
   }


/* custom extended email validation */
function validateEmail(email){
   if(email.length <= 0){
      return false;
   }
   var splitted = email.match("^(.+)@(.+)$");
   if(splitted == null) return false;
   if(splitted[1] != null ) {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
   }
   if(splitted[2] != null) {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) {
         var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
         if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
   }
   return false;
}
