/* declaration des messages d'erreur */
var validationErrorMessage = new Object();
validationErrorMessage['obligatoire']='Veuillez renseigner ce champ';
validationErrorMessage['numeric']='Veuillez ne saisir que des nombres sans virgule (0 si besoin)';
validationErrorMessage['email']='Veuillez saisir une adresse mail correcte (ex: nom@domain.com)';
validationErrorMessage['telephone']='Veuillez saisir un numéro de téléphone composé de 10 chiffres sans espace ni ponctuation';
validationErrorMessage['nom']='Veuillez saisir votre nom. Il ne doit pas contenir de chiffre et faire 2 caractères minimum';
validationErrorMessage['prenom']='Veuillez saisir votre prénom. Il ne doit pas contenir de chiffre et faire 2 caractères minimum';
validationErrorMessage['pattern']='Pattern incorrect';
validationErrorMessage['decimal'] = 'Veuillez saisir un nombre et/ou remplacer la virgule (,) par un point (.) et ne preciser que 2 chiffres derriere (0 si besoin)';


/* declaration des traitements */
var validationFunctions = new Object();
validationFunctions["obligatoire"] = isRequired;
validationFunctions["pattern"] = isPattern;
validationFunctions["numeric"] = isnumeric;
validationFunctions["email"] = isEmail;
validationFunctions["date"] = isDate;
validationFunctions["telephone"] = isTelephone;
validationFunctions["nom"] = isNom;
validationFunctions["prenom"] = isNom;
validationFunctions["decimal"] = isdecimal;


/* fonctions de traitement */
function isRequired(formField) {
	switch (formField.type) {
		case 'text':
		case 'textarea':
		case 'select-one':
			if (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;
	}	
}

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,"[0-9]{5}") && !isPattern(formField,"97(.*)");
}

function isnumeric(formField) {
	return isPattern(formField,"\\d+");
}

function isEmail(formField) {
	//return isPattern(formField,"[a-z\d]+((\.|-|_)[a-z\d]+)*@((?![-\d])[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}")
	var reg = /^[\w.-]+@[\w.-]+\.\w{1,4}$/
        var reg2 = /[.@]{2,}/
        var result = ((reg.exec(formField.value)!=null) && (reg2.exec(formField.value)==null))
        //alert(result);
        return result;
}

function emptyFunction() {
	return true;
}

function isDate(formField) {
	return isPattern(formField,"[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})");
}

function isTelephone(formField) {
	if(formField.value=="0000000000") return false;
	return isPattern(formField,"[0-9]{10}");
}

function isNom(formField) {
	if(formField.value.length<2) return false;
	var code = /[0-9]/
        var result = ((code.exec(formField.value)==null))
        return(result);
}

function isdecimal(formField) {
	return isPattern(formField,"\\d+[.]?\\d{0,2}");
}


/* script de bridage */
var W3CDOM = document.createElement && document.getElementsByTagName;

function validateForms() {
	if (!W3CDOM) return;
	var forms = document.forms;
	for (var i=0;i<forms.length;i++) {
		forms[i].onsubmit = validate;
	}
}

//addEventSimple(window,'load',validateForms);
function validate(formulaire) {
	var els = formulaire;
	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;
			}
		}
	}
	//alert('erreur : '+validForm);
	if ((!validForm)&&(document.getElementById('div_message_erreur')))
	{
		document.getElementById('div_message_erreur').innerHTML = "<p>Certains champs obligatoires n'ont pas &eacute;t&eacute; compl&eacute;t&eacute;s ou comportent des erreurs.</p>";
		document.getElementById('div_message_erreur').style.display = 'block'; 
	}
	return validForm;
}

function writeError(obj,message) {
	obj.className += ' errorMessage';
	/* ATTENTION AUX BUG QD EVENT HANDLER onchange PARTAGE AVEC UN ELEMENT DU FORM */
	//obj.onchange = removeError;
	obj.onfocus = 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 removeAllErrors() {
	this.className = this.className.replace(/errorMessage/,'');
	this.parentNode.removeChild(this.errorMessage);
	this.errorMessage = null;
	this.parentNode.errorMessage = null;
}

function removeError() {
	this.className = this.className.replace(/errorMessage/,'');
	if (this.errorMessage) {
		this.parentNode.removeChild(this.errorMessage);
		this.errorMessage = null;
		this.parentNode.errorMessage = null;
	}
	/* ATTENTION AUX BUG QD EVENT HANDLER onchange PARTAGE AVEC UN ELEMENT DU FORM */
	//this.onchange = null;
	this.onfocus = null;
}

/* FIN BRIDAGE */



/* POST AJAX */
function makeRequest_rapide(url,form) {
	var httpRequest = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		httpRequest = new XMLHttpRequest();
		if (httpRequest.overrideMimeType) { httpRequest.overrideMimeType('text/xml'); }
	}
	else if (window.ActiveXObject) { // IE
		try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e) {
			try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP");	}
			catch (e) {}
		}
	}

    if (!httpRequest) {
        alert('Abandon :( Impossible de créer une instance XMLHTTP');
        return false;
    }
    httpRequest.onreadystatechange = function()
    {
	    if (httpRequest.readyState == 4) 
	    {
	        if (httpRequest.status == 200) 
	        {
				document.getElementById('loading_form_rapide').style.display="none";
				document.getElementById('resultat_form_rapide').style.display="block";
				result=httpRequest.responseText;
				document.getElementById('retour_form_rapide').innerHTML=result;
	    	}
	    	else { alert('Un problème est survenu avec la requête.'); }
	    }
    };
    httpRequest.open('POST', '/includes/'+url, true);
	document.getElementById('form_rapide').style.display = "none";
	document.getElementById('loading_form_rapide').style.display = "block";
	var data=get(form);
	httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    httpRequest.setRequestHeader("Content-length", data.length);
    httpRequest.setRequestHeader("Connection", "close");
    httpRequest.send(data);
    window.scrollTo(0,0);
}

function get(form)
{
	var getstr = "";
	var refererstr = "";
	var form = document.getElementById(form);
	var elements = form.elements;
	for (i=0; i<elements.length; i++)
	{
		if (elements[i].tagName == "INPUT")
		{
			if (elements[i].type == "text") { getstr += elements[i].name + "=" + encodeURI(elements[i].value) + "&"; }
			if (elements[i].type == "hidden")
			{ 
				if (elements[i].name == "http_referer")
				{
					refererstr=elements[i].value.replace(/&/g,"_");
					getstr += elements[i].name + "=" + encodeURI(refererstr) + "&";
				}
				else { getstr += elements[i].name + "=" + encodeURI(elements[i].value) + "&"; }
			}
			if (elements[i].type == "checkbox")
			{
				if (elements[i].checked) { getstr += elements[i].name + "=" + encodeURI(elements[i].value + "&"); }
				else { getstr += elements[i].name + "=" + "&"; }
			}
			if (elements[i].type == "radio")
			{
				if (elements[i].checked) { getstr += elements[i].name + "=" + encodeURI(elements[i].value) + "&"; }
			}
		}   
		if (elements[i].tagName == "SELECT")
		{
			var sel = elements[i];
			getstr += sel.name + "=" + encodeURI(sel.options[sel.selectedIndex].value) + "&";
		}
	}
	return getstr;
}
   


var navigateur = navigator.appName;
var version=9;
if (navigator.appVersion.indexOf("MSIE")!=-1)
{
	temp=navigator.appVersion.split("MSIE");
	version=parseFloat(temp[1]);
}

function show_ssmenu(layer,montrer)
{
	var calque=document.getElementById('layer_'+layer);
	var bt_menu=document.getElementById(layer);
	var container=document.getElementById('container');
	
	if (montrer==1)
	{
		calque.style.display="block";
		gauche=bt_menu.offsetLeft;
		largeur=bt_menu.offsetWidth;
		gauche_container=container.offsetLeft;
		position_calque=gauche+gauche_container;
		calque.style.left=position_calque+"px";
		calque.style.width=largeur+"px";
		bt_menu.className="active";
		if((layer=="guide")&&(version<7)) { hideList(2); }
	}
	else
	{
		calque.style.display="none"; 
		bt_menu.className="";
		if((layer=="guide")&&(version<7)) { showList(2); }
	}
}

function showList(nb_select) {
	if (document.getElementsByTagName('select').length >0)
	{
		for(i=0;i<nb_select;i++) { document.getElementsByTagName('select')[i].style.visibility='visible'; }
	}
}
function hideList(nb_select) {
	if (document.getElementsByTagName('select').length >0)
	{
		for(i=0;i<nb_select;i++) { document.getElementsByTagName('select')[i].style.visibility='hidden'; }
	}
}

function showhide(div)
{
	var d=document.getElementById(div);
	if(d.style.display=='none') { d.style.display='block'; }
	else { d.style.display='none'; }
}


/* HOLLOWMAN */
function abracadabra(div)
{
	document.getElementById(div).style.display='none';
}


/* SCRIPT MAJUSCULES */

//---------------------------------------------------------------------------------------
function remplacecar(doc) {
var text = doc;
    text = replace(text,unescape('%C0'),'A');
    text = replace(text,unescape('%C1'),'A');
    text = replace(text,unescape('%C2'),'A');
    text = replace(text,unescape('%C3'),'A');
    text = replace(text,unescape('%C4'),'A');
    text = replace(text,unescape('%C5'),'A');
    text = replace(text,unescape('%C6'),'E');
    text = replace(text,unescape('%C7'),'C');
    text = replace(text,unescape('%C8'),'E');
    text = replace(text,unescape('%C9'),'E');
    text = replace(text,unescape('%CA'),'E');
    text = replace(text,unescape('%CB'),'E');
    text = replace(text,unescape('%CC'),'I');
    text = replace(text,unescape('%CD'),'I');
    text = replace(text,unescape('%CE'),'I');
    text = replace(text,unescape('%CF'),'I');
    text = replace(text,unescape('%D0'),'D');
    text = replace(text,unescape('%D1'),'N');
    text = replace(text,unescape('%D2'),'O');
    text = replace(text,unescape('%D3'),'O');
    text = replace(text,unescape('%D4'),'O');
    text = replace(text,unescape('%D5'),'O');
    text = replace(text,unescape('%D6'),'O');
    text = replace(text,unescape('%D7'),'O');
    text = replace(text,unescape('%D8'),'O');
    text = replace(text,unescape('%D9'),'U');
    text = replace(text,unescape('%DA'),'U');
    text = replace(text,unescape('%DB'),'U');
    text = replace(text,unescape('%DC'),'U');
    text = replace(text,unescape('%DD'),'Y');
    text = replace(text,unescape('%DE'),'P');
    text = replace(text,unescape('%DF'),'B');
    text = replace(text,unescape('%E0'),'a');
    text = replace(text,unescape('%E1'),'a');
    text = replace(text,unescape('%E2'),'a');
    text = replace(text,unescape('%E3'),'a');
    text = replace(text,unescape('%E4'),'a');
    text = replace(text,unescape('%E5'),'a');
    text = replace(text,unescape('%E6'),'e');
    text = replace(text,unescape('%E7'),'c');
    text = replace(text,unescape('%E8'),'e');
    text = replace(text,unescape('%E9'),'e');
    text = replace(text,unescape('%EA'),'e');
    text = replace(text,unescape('%EB'),'e');
    text = replace(text,unescape('%EC'),'i');
    text = replace(text,unescape('%ED'),'i');
    text = replace(text,unescape('%EE'),'i');
    text = replace(text,unescape('%EF'),'i');
    text = replace(text,unescape('%F0'),'&');
    text = replace(text,unescape('%F1'),'n');
    text = replace(text,unescape('%F2'),'o');
    text = replace(text,unescape('%F3'),'o');
    text = replace(text,unescape('%F4'),'o');
    text = replace(text,unescape('%F5'),'o');
    text = replace(text,unescape('%F6'),'o');
    text = replace(text,unescape('%F7'),'o');
    text = replace(text,unescape('%F8'),'o');
    text = replace(text,unescape('%F9'),'u');
    text = replace(text,unescape('%FA'),'u');
    text = replace(text,unescape('%FB'),'u');
    text = replace(text,unescape('%FC'),'u');
    text = replace(text,unescape('%FD'),'y');
    text = replace(text,unescape('%FE'),'p');
    text = replace(text,unescape('%FF'),'y');
    text = replace(text,unescape('%27'),' ');
    doc = text;
return doc;
}

function replace(Value, Text, By) {
if (Value.length<=0) return Value;
var re = new RegExp(Text,"g");
return Value.replace(re, By);
}

function suppblancs(strText) {
// suppression des blancs en tête de texte     
while (strText.substring(0,1) == ' ')
        strText = strText.substring(1, strText.length);  
// suppression des blancs en fin de texte    
while (strText.substring(strText.length-1,strText.length) == ' ')
        strText = strText.substring(0, strText.length-1);
return strText;
}

function capitalize(object) {
	var doc = remplacecar(object.value);
	doc = suppblancs(doc);
	object.value = doc.toUpperCase();
}
/* fin captialize */