//Variables
var formulaire;
var nom;
var nomStatus;
var adresse;
var adresseStatus;
var CP;
var CPStatus;
var ville;
var villeStatus;
var net;
var netStatus;
var email;
var emailStatus;

//Prototypes
String.prototype.trim = new Function("return this.replace(/^\\s+|\\s+$/g,'')");
String.prototype.isEmpty = new Function("var x = this.trim(); if (x.length == 0) { return true; } else { return false; }");

//Requête XMLHttp
function cxo()
{
	var xhttp = null;
	try
	{
		xhttp = new ActiveXObject("Msxml2.XMLHTTP")
	}
	catch(e)
	{
		try
		{
			xhttp = new ActiveXObject("Microsoft.XMLHTTP")
		}
		catch (x)
		{
			xhttp = null
		};
	};
	if (!xhttp && typeof XMLHttpRequest != "undefined")
	{
		xhttp = new XMLHttpRequest()
	};
	return xhttp;
};

//Récupération de l'objet HTML
function de(n)
{
	return document.getElementById(n);
};

//Récupération de l'ensemble des objets HTML du formulaire
function cacheDom()
{
	formulaire = de('formulaire');
	nom = de('nom');
	nomStatus = de('nomStatus');
	adresse = de('adresse');
	adresseStatus = de('adresseStatus');
	CP = de('CP');
	CPStatus = de('CPStatus');
	ville = de('ville');
	villeStatus = de('villeStatus');
	net = de('net');
	netStatus = de('netStatus');
	email = de('email');
	emailStatus = de('emailStatus');
};

//Message de succes
function setSuccess(o, m)
{
	o.innerHTML = '<span class="success_msg">' + (m == null ? '&nbsp;' : m) + '</span>';
	o.className = 'success';
};

//Message d'erreur
function setError(o, m)
{
	o.innerHTML = '<span class="error_msg">' + (m == null ? '&nbsp;' : m) + '</span>';
	o.className = 'error';
};

//Prévérification
function doActions()
{
	nom.onkeyup();
	adresse.onkeyup();
	CP.onkeyup();
	ville.onkeyup();
	net.onkeyup();
	email.onkeyup();
};

//Initialisation de la vérification
function init() {
	cacheDom();
	nom.onkeyup = checkNom;
	adresse.onkeyup = checkAdresse;
	CP.onkeyup = checkCP;
	ville.onkeyup = checkVille;
	net.onkeyup = checkNet;
	email.onkeyup = checkMail;
	formulaire.onsubmit = checkForm;
}

//Vérification du formulaire
function checkForm()
{
	doActions();
	if (checkNom() && checkAdresse() && checkCP() && checkVille() && checkNet() && checkMail())
	{
		return true;
	}
	else
	{
		alert("Formulaire invalide !");
		return false;
	};
};

//Nom
function checkNom()
{
	if (!nom.value.isEmpty())
	{
		setSuccess(nomStatus);
		return true;
	}
	else
	{
		setError(nomStatus, 'Nom obligatoire');
		return false;
	};
};

//Adresse
function checkAdresse()
{
	if (!adresse.value.isEmpty())
	{
		setSuccess(adresseStatus);
		return true;
	}
	else
	{
		setError(adresseStatus, 'Adresse obligatoire');
		return false;
	};
};

//Code Postal
function checkCP()
{
	if ((CP.value.trim().length == 5)&&(checkCP_text(CP.value)))
	{
		setSuccess(CPStatus);
		return true;
	}
	else
	{
		if (CP.value.trim().length == 0)
		{
			setError(CPStatus, 'Code Postal obligatoire');
		}
		else if (!checkCP_text(CP.value))
		{
			setError(CPStatus, 'Caractères invalides');
		}
		else if ((CP.value.trim().length != 5)&&(checkCP_text(CP.value)))
		{
			setError(CPStatus, 'il vous faut 5 chiffres');
		};
		return false;
	};
};
//Code Postal (caractères)
function checkCP_text(CP)
{
	var filter = /^([0-9])+\s?$/;
	if (filter.test(CP))
	{
		return true;
	}
	else
	{
		return false;
	};
};

//Ville
function checkVille()
{
	if (!ville.value.isEmpty())
	{
		setSuccess(villeStatus);
		return true;
	}
	else
	{
		setError(villeStatus, 'Ville obligatoire');
		return false;
	};
};

//Internet
function checkNet()
{
	if (!net.value.isEmpty())
	{
		setSuccess(netStatus);
		return true;
	}
	else
	{
		setError(netStatus, 'Site Internet obligatoire');
		return false;
	};
};

//Email
function checkMail()
{
	var filter = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(email))
	{
		setSuccess(emailStatus);
		alert('to');
		return true;
	}
	else
	{
		if (email.value.isEmpty())
		{
			setError(emailStatus, 'Mail obligatoire');
		}
		else
		{
			if (filter.test(email.value))
			{
				setSuccess(emailStatus);
				return true;
			}
			else
			{
				setError(emailStatus, 'Mail invalide');
				return false;
			};
		};
		return false;
	};
};