// Encapsulage pour gérer le stopObserving sur les bon handlers
var errorMessages = {
	displayHandler : new Array(),
	hideHandler : new Array(),
	displayErrorMessage : function(event) {
	  try {
		  var elemId = this.id.replace('line_', '');
		  if($(elemId)) {
			  var errorMsg = $(elemId).readAttribute('errorMsg');
		  } else {
			  if($(elemId+'_1')) {
				  var errorMsg =  $(elemId+'_1').readAttribute('errorMsg');
			  } else {
				  var errorMsg = "This field is required";
			  }
		  }
		  if($('errorMsg_'+this.id)) $('errorMsg_'+this.id).show();
		  else {
			  var parentElement = $(this.id).parentNode;
			  new Insertion.Top('webform', '<div id="errorMsg_'+this.id+'">'+errorMsg+'</div>');
			  $('errorMsg_'+this.id).addClassName('errorMsg');
		  }
	  } catch(err) { }
	},

	hideErrorMessage : function(event) {
	   if($('errorMsg_'+this.id)) $('errorMsg_'+this.id).hide();
	}
};


var $CE = function(tagName, attributes, styles){ //short for create element
      var el = document.createElement(tagName);
      if (attributes)
            $H(attributes).each(function(pair){
                  eval("el." + pair.key + "='" + pair.value + "'");
            });
      if (styles)
            $H(styles).each(function(pair){
                  el.style[pair.key] = pair.value;
            });
      return $(el);
};

//adding he new methods
Element.addMethods({
    append: function(element, tagName, attributes, styles) {
        element = $(element);
        var newEl = $CE(tagName, attributes, styles);
        element.appendChild(newEl);
        return newEl;
    }
});

function validateForm() {
	var serialized = Form.serializeElements($('webform').getElements());
	new Ajax.Request(
        '/request.php',
        {
            method: 'post'
        ,   parameters: 'formValidation=1&display=json&class=webform&method=validForm&'+serialized
        ,   onLoading: function() {
                //Element.removeClassName($('loading'), 'hide');
            }
        ,   onComplete: function(req, jsonResult) {
                //Element.addClassName($('loading'), 'hide');
                setErrors(jsonResult);
                if(jsonResult.result == '1') {
                   $('webform').submit();
				}
            }
        }
    );
    return false;
}


function setErrors(jsonResult) {
    try {
        for(i in jsonResult.errorFields) {
            if($('lbl_'+i)) {
                Element.addClassName('lbl_'+i, 'errorField');
				var observeElement = 'line_'+i;
				if($(i)) {
					Element.addClassName(i, 'errorField');
				}
				errorMessages.displayHandler[observeElement] =  errorMessages.displayErrorMessage.bindAsEventListener($(observeElement));
				errorMessages.hideHandler[observeElement] =  errorMessages.hideErrorMessage.bindAsEventListener($(observeElement));
				Event.observe(observeElement, 'mouseover', errorMessages.displayHandler[observeElement]);
				Event.observe(observeElement, 'mouseout', errorMessages.hideHandler[observeElement]);
            }
        }
        for(i in jsonResult.validFields) {
            if($('lbl_'+i)) {
                Element.removeClassName('lbl_'+i, 'errorField');
				var observeElement = 'line_'+i;
				if($(i)) {
					Element.removeClassName(i, 'errorField');
				}
				Event.stopObserving(observeElement, 'mouseover', errorMessages.displayHandler[observeElement]);
				Event.stopObserving(observeElement, 'mouseout', errorMessages.hideHandler[observeElement]);
            }
        }
    } catch(err) { alert(err); }
}
