function ValiderAbonnement()
{
	var valide = true;
	if (!ValiderStringNonVide('prenom', 'erreurPrenom'))
		valide = false;
	if (!ValiderStringNonVide('nom', 'erreurNom'))
		valide = false;
	if (!ValiderStringNonVide('adresse', 'erreurAdresse'))
		valide = false;
	if (!ValiderStringNonVide('ville', 'erreurVille'))
		valide = false;
	if (!ValiderStringNonVide('province', 'erreurProvince'))
		valide = false;
	if (!ValiderCourriel('email_correspondance', 'erreurCourriel', false))
		valide = false;
	if (!ValiderFrais('frais5sous', 'erreurFrais'))
		valide = false;
	if (!ValiderStringNonVide('numero_carte', 'erreurCarteCredit'))
		valide = false;
	if (!ValiderNumeroCarteCredit('numero_carte', 'erreurCarteCredit'))
		valide = false;
	if (!ValiderStringNonVide('expiration', 'erreurCarteCreditExpiration'))
		valide = false;
		
	if (!valide)
		document.getElementById('erreurFormulaire').innerHTML = "Veuillez corriger les erreurs avant de transmettre votre formulaire";
	return valide;
}

function ValiderStringNonVide(p_object, erreur) {
	if (!EstStringNonVide(document.getElementById(p_object).value)) {
		document.getElementById(erreur).style.position = "relative";
		document.getElementById(erreur).innerHTML = "Vous devez remplir le champ obligatoire";
		return false;
	} else {
		document.getElementById(erreur).style.position = "absolute";
		document.getElementById(erreur).innerHTML = "";
	}
	return true;
}

function ValiderCourriel(p_object, erreur, permettreNull) {
	var valeur = document.getElementById(p_object).value;
	var valide = true;
	if (valeur == "") {
		if (!permettreNull)
			valide = false;
	}
	if (!valeur == "" && !EstCourrielValide(valeur))
		valide = false;
	if (!valide) {
		document.getElementById(erreur).style.position = "relative";
		document.getElementById(erreur).innerHTML = "Vous devez entrer un courriel valide";
		return false;
	} else {
		document.getElementById(erreur).style.position = "absolute";
		document.getElementById(erreur).innerHTML = "";
	}
	return true;
}

function ValiderNumeroCarteCredit(p_object, erreur) {
	var valeur = document.getElementById(p_object).value;
	if (!EstNumeroCarteCreditValide(valeur)) {
		document.getElementById(erreur).style.position = "relative";
		document.getElementById(erreur).innerHTML = "Vous devez entrer un numéro de carte valide";
		return false;
	}
	else {
		document.getElementById(erreur).style.position = "absolute";
		document.getElementById(erreur).innerHTML = "";
		return true;
	}
}

function ValiderFrais(p_object, erreur) {
	if(!CheckBoxChecked(p_object)) {
		document.getElementById(erreur).style.position = "relative";
		document.getElementById(erreur).innerHTML = "Vous devez cocher cette case";
		return false;		
	}
	else {
		document.getElementById(erreur).style.position = "absolute";
		document.getElementById(erreur).innerHTML = "";
		return true;	
	}
}

/*****
 * Fonctions de validation de valeur
 */
function CheckBoxChecked(p_object) {
	return (document.getElementById(p_object).checked);	
}

function EstNumeroCarteCreditValide(p_valeur) {
	var numero = String(p_valeur);
	numero = numero.replace(/\s/g, '');
	return (numero.match(/^[0-9]{16}$/) != null);
}

function EstStringNonVide(p_valeur) {
	if (p_valeur == null)
		return false;
	if (p_valeur.length < 1)
		return false;
	return true;
}

function EstCourrielValide(valeur) {
	if (valeur.length == 0) {
		return false;
	}
	// TLD checking turned off by default
	var checkTLD=0;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|fm|tv)$/;
	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=valeur.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
		}
	}
	if (user.match(userPat)==null) {
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
			}
		}
		return true;
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
		}
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	return true;
}

/*****
 * Autres fonctions
 */

function AfficherErreur(erreur, message) {
	document.getElementById(erreur).style.position = "relative";
	document.getElementById(erreur).innerHTML = message;
}

function RetirerErreur(p_erreur) {
	document.getElementById(p_erreur).style.position = "absolute";
	document.getElementById(p_erreur).innerHTML = '';
}
