/* ########## */
function formPlus() {
	// récupérer le nom de domaine.
	var dum = window.location.hostname;
	// Si le DNS ne correspond pas à domaine, sortir
	if(!dum.match(domaine)) {
		return false;
	}

	/* Cette fonction, initialement pour IE, provoque le changement de couleur des éléments de formulaires lors du survol et du focus */
		var f = document.getElementsByTagName('form');
		if(f) {
			var fEl = getBy('input', 'select', 'textarea');
			for(var i = 0, len = fEl.length; i < len; i++) {
				if(fEl[i] != 'hidden') {
					addEvent(fEl[i], 'mouseover', formPlusOver);
					addEvent(fEl[i], 'focus', formPlusOver);
					addEvent(fEl[i], 'mouseout', formPlusOut);
					addEvent(fEl[i], 'blur', formPlusOut);
				}
			}
		}
};
function formPlusOver() {
	switch(this.type) {
		case 'submit':
		case 'reset':
			this.className = 'SubmitHover';
			break;
		default:
			this.className = 'InputHover';
	}
};
function formPlusOut() {
	this.className = null;
};
/* ########## */
function endVerifForm(f, erreur) {
	var champs = f.getElementsByTagName('input');
	for (var i = 0, len = (champs.length); i < len; i++) {
		if(champs[i].type != 'hidden' && champs[i].type != 'submit' && champs[i].type != 'reset') {
			champs[i].style.backgroundColor = f.goodColor.value;
		}
	}
	var champs = f.getElementsByTagName('select');
	for (var i = 0, len = champs.length; i < len; i++) {
		champs[i].style.backgroundColor = f.goodColor.value;
	}
	var champs = f.getElementsByTagName('textarea');
	for (var i = 0, len = champs.length; i < len; i++) {
		champs[i].style.backgroundColor = f.goodColor.value;
	}
	
	for (var i = 0, len = erreur.length; i < len; i++) {
		erreur[i].style.backgroundColor = f.badColor.value;
	}
	
	if(erreur.length) {
		eval("f." + erreur[0].name + ".focus()");
	}
};
/* ########## */
function champsRequis(f) {
	var RequisArray = new Object();
	
	var Labels = f.getElementsByTagName('label');
	for(var i = 0, len = Labels.length; i < len; i++) {
		if(Labels[i].innerHTML.search(/\*/) != -1) {
			RequisArray[Labels[i].htmlFor] = Labels[i].innerHTML.replace(/<\/[a-zA-Z0-9]*>|<[a-zA-Z0-9 =\'\"_\-\/]*>/g, '');
		}
	}
	return RequisArray;
};
/* ########## */
function isNotEmail(email, requis, lang) {
	var emailStr = email.value;
	if((requis == 0) && (emailStr == "")) {
		return false;
	}
	
	var checkTLD = 1;
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = '\\(\\)><@,;:\\\\\\\"\\.\\[\\]';
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = emailStr.match(emailPat);
	
	if (matchArray == null) {
		if(lang == 'fr') {
			erreur = "V\u00E9rifiez la pr\u00E9sence de @ et .'";
		} else {
			erreur = "Email address seems incorrect (check @ and .'s)";
		}
		return erreur;
	}
	var user = matchArray[1];
	var domain = matchArray[2];
	
	for (var i = 0; i < user.length; i++) {
		if (user.charCodeAt(i) > 127) {
			if(lang == 'fr') {
				erreur = "Ce nom d\u0027utilisateur contient des caract\u00EAres interdits.";
			} else {
				erreur = "This username contains invalid characters.";
			}
			return erreur;
		}
	}
	for (var i = 0; i < domain.length; i++) {
		if (domain.charCodeAt(i) > 127) {
			if(lang == 'fr') {
				erreur = "Ce nom de domaine contient des carract\u008EAres interdits.";
			} else {
				erreur = "This domain name contains invalid characters.";
			}
			return erreur;
		}
	}
	
	if (user.match(userPat) == null) {
		if(lang == 'fr') {
			erreur = "Le NomUtilisateur n\u0027appara\u00EEt pas valide.";
		} else {
			erreur = "The username doesn't seem to be valid.";
		}
		return erreur;
	}
	
	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null) {
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
				if(lang == 'fr') {
					erreur = "Cette adresse IP n\u0027appara\u00EEt pas valide.";
				} else {
					erreur = "Destination IP address is invalid!";
				}
				return erreur;
			}
		}
		return false;
	}
	
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	for (var i = 0; i < len; i++) {
		if (domArr[i].search(atomPat)==-1) {
			if(lang == 'fr') {
				erreur = "Le nom de domaine n\u0027appara\u00EEt pas valide.";
			} else {
				erreur = "The domain name does not seem to be valid.";
			}
			return erreur;
		}
	}
	
	if (checkTLD && domArr[domArr.length-1].length != 2 && domArr[domArr.length-1].search(knownDomsPat) == -1) {
		if(lang == 'fr') {
			erreur = "L\u0027adresse doit se terminer par un domaine l\u00E9gal ou par un code pays.";
		} else {
		 erreur = "The address must end in a well-known domain or two letter " + "country.";
		}
		return erreur;
	}
	
	if (len < 2) {
		if(lang == 'fr') {
			erreur = "Il manque le nom d'h\u00F4te dans l\u0027adresse.";
		} else {
			erreur = "This address is missing a hostname!";
		}
		return erreur;
	}
	
	return false;
};
/* ########## */
function isUrl(value) {
   var RExp = /^((http(s?)|ftp):\/\/)?([\w\-]+\.)+([\w\-]+)(\/[\w\-\~\/\s]+)*(\/(([\w\-]+)(\.[\w]+)*)?(#\w+)?(\?.+)?)?$/;
   return (value.search(RExp) != -1) ? true : false;
};
/* ########## */
function isTel(num) {
	num = num.replace(/\s|\(|\)|\[|\]|\+|-|\/|\,|\./g, '');
	if(num == '' || isNaN(num)) {
		return false;
	}
	return true;
};
/* ########## */
function isZip(zip) {
	var Pat = /^([A-Z]+\-)?[\d]{5}$/;
	return (zip.search(Pat) != -1) ? true : false;
};
/* ########## */
function nombre(Obj) {
	var Nb = Obj.value.replace(',', '.').replace(/\s/g, '');
	if(isNaN(Nb)) {
		alert("Ce n\u0027est pas un nombre...");
		Obj.focus();
	}
};
function isNombre(Obj) {
	var Nb = Obj.value.replace(',', '.').replace(/\s/g, '');
	if(isNaN(Nb)) {
		return false;
	}
	Obj.value = Nb;
	return true;
};
/* ########## */
function formatNb(Obj, Entier) {
	Entier = (Entier == undefined) ? 0 : Entier;
	var chaine = Obj.value;
	if(Entier == '1') {
		Obj.value = chaine.replace(/\s|,|\./g, '');
		return;
	}
	chaine = chaine.replace(/\s/g, '');
	Obj.value = chaine.replace(/,/g, '.');
};
/* ########## */
function formatPrix(Obj, Dec) {
	Dec = (Dec == undefined) ? 2 : Dec;
	if(isNombre(Obj)) {
		Obj.value = parseFloat(Obj.value).toFixed(Dec);
		return true;
	}
	return false;
};
/* ########## */
function CheckDate(d) {
	if(d.length != 10) {
		alert("Il y a manifestement un probl\u00E8me avec la date\n=> " + d + " ?!?\nLe format attendu est jj/mm/aaaa ou jj.mm.aaaa");
		return false;
	}
	var amin = 1850; // année mini
	var amax = 2500; // année maxi
	var j = (d.substring(0, 2));
	var m = (d.substring(3, 5));
	var a = (d.substring(6, 10));
	var ok = true;
	if ( ((isNaN(j)) || (j < 1) || (j > 31)) && (ok == true) ) {
		alert("Le jour n\u0027est pas correct.");
		ok = false;
	}
	if ( ((isNaN(m)) || (m < 1) || (m > 12)) && (ok == true) ) {
		alert("Le mois n\u0027est pas correct,\nou il y a une erreur dans le champ pr\u00E9c\u00E9dent.");
		ok = false;
	}
	if ( ((isNaN(a)) || (a < amin) || (a > amax)) && (ok == true) ) {
		alert("L\u0027ann\u008Ee n\u0027est pas correcte\nou il y a une erreur dans les champs pr\u00E9c\u00E9dents.");
		ok = false;
	}
	if (ok) {
		var d2 = new Date(a, m-1, j);
		var j2 = d2.getDate();
		var m2 = d2.getMonth()+1;
		var a2 = d2.getFullYear();
		if ( (j != j2) || (m != m2) || (a != a2) ) {
			alert("Il y a manifestement un probl\u00E8me avec la date...\n=> "+ d +" ?!? => incoh\u00E9rence");
			return false;
		}
		ok = d2;
	}
		
	return ok;
};
