var EarlContact = {}

EarlContact.http = false;
EarlContact.name = '';
EarlContact.errors = new Array();
EarlContact.callbacks = new Array();
EarlContact.step = null;
EarlContact.session = null;
EarlContact.nbSubmit=0;
EarlContact.currentNb=1;

EarlContact.onResponse = function(form, fn) {
    this._createCallback(form, fn, 'response');
}

EarlContact.onSuccess = function(form, fn) {
    this._createCallback(form, fn, 'success');
}

EarlContact.onError = function(form, fn) {
    this._createCallback(form, fn, 'error');
}

EarlContact.onStep = function(form, fn) {
    this._createCallback(form, fn, 'step');
}

EarlContact._createCallback = function(form, fn, type) {

    if (typeof EarlContact.callbacks[form] == 'undefined') {
        EarlContact.callbacks[form] = new Array();
    }
    
    EarlContact.callbacks[form][type] = fn;
}

EarlContact._call = function(form, type, param) {
    if (typeof EarlContact.callbacks[form] == 'undefined') {
        return false;
    }
    
    if (typeof EarlContact.callbacks[form][type] == 'undefined') {
        return false;
    }
    
    return EarlContact.callbacks[form][type](param);
}

EarlContact.submit = function(form) {
	if(document.getElementById('inscriptionVisite_paramVisite') != null){
		this._setParamVisite();
	}else{
		nbSubmit=-1;
	}
    // disable submit button (enable is done in asynchrone function)
    this._switchForm(form, true);
    // hide succces & error messages
    this._hideMessages(form);
    // serialize form values
    EarlContact.name = '';
    var str = this._serialize(form);
    // send values
    this._ajax(form, str);
    
    return false;
}

EarlContact._setParamVisite = function() {

	if(this.nbSubmit ==0 ){
		document.getElementById('inscriptionVisite_paramVisite').value ="";
		var o =0;
		for (i=1;i<=document.getElementById('nbVisite').value;i++){
			if(document.getElementById(i).checked){
					o++;
			}
			
		}
		this.nbSubmit = o; 
	}
		var p=0;
		document.getElementById('inscriptionVisite_paramVisite').value ="";
		for (i=1;i<=document.getElementById('nbVisite').value;i++){
			if(document.getElementById(i).checked){
			p++;
					if(p == this.currentNb){
						var idJour = document.getElementById('jourId'+i).value;
						var jourDt = document.getElementById('jour'+idJour).innerHTML;
						var nbPers  =document.getElementById('personnes'+i).value;
						var visite =document.getElementById('visite'+i).innerHTML;
						var horaire = document.getElementById(i).value;
						var chaine="|Visite n=°"+p+" | "+
						jourDt+ ";"+ horaire + " ; "+nbPers+"personnes ; "+visite;
						chaine = chaine.replace(new RegExp("<.[^>]*>", "gi" ),' ');
						document.getElementById('inscriptionVisite_paramVisite').value= chaine;
					}
			}
		}
		this.currentNb++;
	
}
/*
 **  Replace a token in a string
 **    s  string to be processed
 **    t  token to be found and removed
 **    u  token to be inserted
 **  returns new String
 */
EarlContact.str_replace2 = function(SRs, SRt, SRu) {

	  var SRRi = SRs.indexOf(SRt);
	  var SRRr = '';
	  if (SRRi == -1) return SRs;
	  SRRr += SRs.substring(0,SRRi) + SRu;
	  if ( SRRi + SRt.length < SRs.length)
	    SRRr += str_replace2(SRs.substring(SRRi + SRt.length, SRs.length), SRt, SRu);
	  return SRRr;
	}

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";
    }
    
    displayAlert.init(0);    
}

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

    if (typeof EarlContact.step == 'number')
    	str += '&_step=' + EarlContact.step;

    if (typeof EarlContact.session == 'string')
    	str += '&_session=' + EarlContact.session;
    
    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 result = EarlContact._call(this.name, 'response', text);
        
        if (typeof result == 'string') {
            text = result;
        }else if (result == true) {
            text = false;
        }
        
        if (text)
        {
            var response = eval('(' + text + ')');
            if (response.err == 0) {
                result = EarlContact._call(this.name, 'success', response);
                if (result != true) {
                	
                    var divSuccess = EarlContact._getMessageDiv(EarlContact.name, 'success');
                    if (divSuccess) {
                        divSuccess.style.display = "";
                        divSuccess.innerHTML = response.message;
                    }
        
                  
                    
                    if (response.url) {
                        if (response.url == "#") {
                            window.location.reload();
                        } else {
							
							if(this.nbSubmit==-1){
									  if (response.reset) {
											EarlContact._emptyForm(form);
										}
								    window.location = response.url;
									
							}else{
								if(this.currentNb >0 && this.currentNb < this.nbSubmit+1){
									EarlContact.submit(form);
								}else{
									  if (response.reset) {
		
										EarlContact._emptyForm(form);
									}
									window.location = response.url;
								}
							}
                        }
                    }
                }
            }
            else
            {
                result = EarlContact._call(this.name, 'error', response);
                if (result != true) {
	            	this._displayError(response.message, response.messages);
                }
            }
        }
    }
}

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 = "";
    }
}

EarlContact.step = function(formId, step, session)
{
    var form = document.getElementById(formId);
    
    if (form)
    {
        var url = form.action;
        
        if (!url || url == "#")
            url = "contact/form/submit";    
        
        var lastSlash = url.lastIndexOf('/');
        url = url.substring(0, lastSlash) + '/step';
        
        this._serialize(form);
        
        
        var str = '_form=' + this.name;
        if (typeof(session) == "undefined") {
        	session = 'anonymous';
        }
        	
        str += '&_session=' + session;
        this.session = session;
        
        if (typeof(step) == "number") {
            str += '&_step=' + step;
            this.step = step;
        }
     
        if( typeof(CrossXHR) == 'function' )
        {
            request = new CrossXHR();
            request.onreadystatechange = function() {
                if(request.readyState == 4) {
                    request.responseText = request.responseText.replace(/\n/gi, "");
                    EarlContact._onStepAjaxResponse(form, request.responseText, request.status);
                }
            }
            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._onStepAjaxResponse(form, http.responseText, http.status);
                    }
                }
                EarlContact.http.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                EarlContact.http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
                EarlContact.http.send(str);
            }
        }        
        
    }
    else
    {
        alert('form ' + formId + ' not found.');
    }
}

EarlContact._onStepAjaxResponse = function(form, text, status) {
    if (status == 200) {
        
        if (text) {
            var response = eval('(' + text + ')');
            if (response.err == 0) {
                var fields = response.fields;
                var field,type;

                for(field in fields) {

                    var elts = document.getElementsByName(field);
                    if (elts && elts.length) {
                        for(elt in elts) { 
                            if (elts[elt].form == form) {
                                elt = elts[elt];
                                break;
                            }
                        }
                        
                        type = null;
                        if (typeof elt == "object") {
                            type = elt.type;
                        }

                        if (type == "text" || type == "password" || type == "hidden") {
                            elt.value = fields[field];
                        }
                        
                        if (type == "textarea") {
                        	elt.innerHTLM = fields[field];
                        }
                        
                        if (type == "file") {
                        	elt.type = "text";
                        	elt.value = fields[field];
                        }
    
                        if (type == "checkbox" || type == "radio") {
                            if (fields[field]) {
                                elt.checked = "checked";
                            }
                            else {
                                elt.checked = "";
                            }
                        }
                        
                        if (type=="select-one") {
                            for (var j=0; j<elt.options.length; ++j) {
                                elt.options[j].selected = "";
                                if (elt.options[j].value == fields[field])
                                {
                                    elt.options[j].selected = "selected";
                                }
                            }
                        }
                    }
                }
            }
            else
            {
            	this._displayError(response.message, response.messages);
            }
            EarlContact._call(EarlContact.name, 'step', response);
        }
    }
}

EarlContact.initFile = function(formId) {
	/**
	 * Init upload
	 */
	var upload = $("input.file");
	
	if (upload.length) {
		
	    var form = document.getElementById(formId);
	    this._serialize(form);
	    
	    if (form) {
	        var url = form.action;
	        
	        if (!url || url == "#")
	            url = "contact/form/submit";
	        
	        var lastSlash = url.lastIndexOf('/');
	        url = url.substring(0, lastSlash) + '/upload';
	        
			if (typeof AjaxUpload != 'undefined') {
				
				var fileElt;
				for(var i=0; i < upload.length; i++) {
					fileElt = upload[i];
					new AjaxUpload(fileElt, {
						action: url + '?_form=' + this.name,
						name: fileElt.name,
						onSubmit: function(file, ext){
							this._button.disabled = 'disabled';
							EarlContact._hideMessages(form);
							EarlContact._switchForm(form, 'disabled')
						},
						onComplete: function(file, text){
							this._button.disabled = '';
							EarlContact._switchForm(form, '')
							var response = eval('(' + text + ')');
				            if (response.err == 0) {
				            	this._button.value = response.message;
				            }else{
				            	EarlContact._displayError(response.message, response.messages);
				            }
						}
					});
				}
			} else {
				alert('Please include ajaxupload.3.5.js and jquery-1.3.2+ to handle file upload.');
			}
	    }
	    else
	    {
	        alert('form ' + formId + ' not found.');
	    }
	}
}


EarlContact._displayError = function(message, messages)
{
    var alerte = true;
    var divError = EarlContact._getMessageDiv(EarlContact.name, 'error');
    if (divError) {
        divError.style.display = "";
        divError.innerHTML = message;
        alerte = false;
    }

    EarlContact.errors = new Array();
    var item, j = 0;
    var result = false;
    for(item in messages) {
        var elt = document.getElementById(EarlContact.name + '_' + item + '_error')
        if(elt) {
           alerte = false;
           elt.innerHTML = 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;
    }
    displayAlert.init(1);
    if(alerte) {
        message = message.replace(/<br\/>/gi, '\n');
        alert(message);
    }
}
