var EarlContact = {}

EarlContact.http = false;
EarlContact.name = '';
EarlContact.errors = new Array();

EarlContact.submit = function(form) {

	// disable submit button (enable is done in asynchrone function)
    this._switchForm(form, true);
    // hide succces & error messages
    this._hideMessages(form);
    // serialize form values
    var str = this._serialize(form);
    // send values
    this._ajax(form, str);
    
    return false;
}

EarlContact._switchForm = function(form, state) {
    var i;
    
    var inputs = form.getElementsByTagName("input");
    
    for (i=0; i<inputs.length; i++) {
        if (inputs[i].type == "submit") {
            inputs[i].disabled = state;
        }
    }
}

EarlContact._hideMessages = function(form) {

    for (var item in EarlContact.errors)
    {
        var elt_error = document.getElementById(EarlContact.name + '_' + item + '_error'); 
        var elt = document.getElementById(EarlContact.name + '_' + item); 
    
		if(elt_error)
			elt_error.style.display = "none";

		if(elt)
	  		elt.className = EarlContact.errors[item];
    }
    var divSuccess = EarlContact._getMessageDiv(EarlContact.name, 'success');
    if (divSuccess)
    {
        divSuccess.style.display = "none";
    }

    var divError = EarlContact._getMessageDiv(EarlContact.name, 'error');
    if (divError)
    {
        divError.style.display = "none";
    }
}

EarlContact._ajax = function(form, str) {
    var url = form.action;
    
    if (!url || url == "#")
        url = "contact/form/submit";

    if( typeof(CrossXHR) == 'function' )
    {
		request = new CrossXHR();
		request.onreadystatechange = function() {
			if(request.readyState == 4) {
				request.responseText = request.responseText.replace(/\n/gi, "");
				EarlContact._onAjaxResponse(form, request.responseText, request.status);
				EarlContact._switchForm(form, false);
            }
	    }
		request.open('POST', url);
		request.send(str);
    }
    else
    {
	    if (!EarlContact.http) {
		    if(navigator.appName == "Microsoft Internet Explorer") {
		    	EarlContact.http = new ActiveXObject("Microsoft.XMLHTTP");
		    } else {
		    	EarlContact.http = new XMLHttpRequest();
		    }
	    }
	    
	    if (EarlContact.http)
	    {
		    var http = EarlContact.http;
		    EarlContact.http.open("POST", url, true);
		    EarlContact.http.onreadystatechange=function() {
		    	if(http.readyState == 4) {
					EarlContact._onAjaxResponse(form, http.responseText, http.status);
					EarlContact._switchForm(form, false);
		    	}
		    }
		    EarlContact.http.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		    EarlContact.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		    EarlContact.http.send(str);
	    }
    }
}

EarlContact._onAjaxResponse = function(form, text, status) {
	if (status == 200) {
		var response = eval('(' + text + ')');
		if (response.err == 0) {
            var divSuccess = EarlContact._getMessageDiv(EarlContact.name, 'success');
            if (divSuccess)
            {
                divSuccess.style.display = "";
                divSuccess.innerHTML = response.message;
            }

            if (response.reset)
    			EarlContact._emptyForm(form);
			
			if (response.url)
				window.location = response.url;
		}
		else
		{
			var alerte = true;
            var divError = EarlContact._getMessageDiv(EarlContact.name, 'error');
            if (divError)
            {
                divError.style.display = "";
                divError.innerHTML = response.message;
                alerte = false;
            }

			EarlContact.errors = new Array();
			var item, j = 0;
			var result = false;
			for(item in response.messages)
			{
   				var elt = document.getElementById(EarlContact.name + '_' + item + '_error')
				if(elt)
	            {
				   alerte = false;
				   elt.innerHTML = response.messages[item];
				   elt.style.display = 'block';
	            }
	            
	            elt = document.getElementById(EarlContact.name + '_' + item);
	            
				if(elt)
				{		
                  	result = elt.className;
					elt.className= result + ' error';
					alerte = false;
				}

                EarlContact.errors[item] = result;
			}

          	if(alerte)
            {
				response.message = response.message.replace(/<br\/>/gi, '\n');
                alert(response.message);
            }
		}
	}
}

EarlContact._getMessageDiv = function(formName, type)
{
    var div = null;
    
    if (formName)
    {
        div = document.getElementById(formName + '_' + type);
    }

    if (!div)
    {
        div = document.getElementById(type);
    }

    return div;
}

EarlContact._serialize = function(form) {
    var str = "";
    var type = "";
    var elt = null;
    
    for (i=0; i<form.getElementsByTagName("input").length; i++) {
        elt =  form.getElementsByTagName("input")[i];
        type = elt.type;
    
        if (type == "text" || type == "password" || type == "hidden") {
           if (elt.name == '_form')
               EarlContact.name = elt.value;
           else
               str += elt.name + "=" + elt.value + "&";
           // set form name from input with name="_form"
        }

        if (type == "checkbox") {
           if (elt.checked) {
              str += elt.name + "=" + elt.value + "&";
           } else {
              str += elt.name + "=&";
           }
        }
        if (elt.type == "radio") {
           if (elt.checked) {
              str += elt.name + "=" + elt.value + "&";
           }
        }  
    }

    for(i=0; i<form.getElementsByTagName("select").length; i++)
    {
        elt =  form.getElementsByTagName("select")[i];
        for (var j=0; j<elt.options.length; ++j) 
		{
			if (elt.options[j].selected) 
			{
				str += elt.name + "=" + elt.options[j].value + '&';
				if (elt.name == '_form')
				{
					EarlContact.name = elt.options[j].value;
				}
	  		}
		}
    }

    for (i=0; i<form.getElementsByTagName("textarea").length; i++) {
        elt =  form.getElementsByTagName("textarea")[i];
        
        str += elt.name + "=" + elt.value + "&"; 
    }
    
    if (EarlContact.name == '')
    {
        if (form.id)
        {
            EarlContact.name = form.id;
        }
        else     
        if (form.name)
        {
            EarlContact.name = form.name;
        }
        else
        {
            alert('form must have a name attribute');
        }
    }
    str += '_form=' + EarlContact.name + "&";

    return str; 
}

EarlContact._emptyForm = function(form) {
    var type = "";
	
    for (i=0; i<form.getElementsByTagName("input").length; i++) {
        type = form.getElementsByTagName("input")[i].type;
    
        if (type == "text" || type == "password" || type == "hidden") {
        	form.getElementsByTagName("input")[i].value = "";
        }
    }
    for (i=0; i<form.getElementsByTagName("textarea").length; i++) {
        form.getElementsByTagName("textarea")[i].value = "";
    }
}
