var Maintenant = new Date;
var anneeDerniere = Maintenant.getFullYear()-1;

/*
    0 : facultatif (1) ou non (0)
    1 : libellé du champ
    2 : type du champ (texte|nombre|textenombre|codepostal|phone|email)
    3 : idChamp duquel il dépend (devient obligatoire si ce champ est rempli)
*/
var champs = new Array(
    // onglet 1
    "civilite",
        new Array(
        "0",                        // facultatif (1) ou non (0)
        "civilit&eacute; de l'emprunteur", // descriptif du champ
        "texte",                    // type du champ
        ""),                        // dépend de...
    "coCivilite",
        new Array(
        "1",
        "civilit&eacute; du co-emprunteur",
        "texte",
        ""),
    "nom",
        new Array(
        "0",
        "nom de l'emprunteur",
        "texte",
        ""),
    "coNom",
        new Array(
        "1",
        "nom du co-emprunteur",
        "texte",
        "coCivilite"),
    "prenom",
        new Array(
        "0",
        "pr&eacute;nom de l'emprunteur",
        "texte",
        ""),
    "coPrenom",
        new Array(
        "1",
        "pr&eacute;nom du co-emprunteur",
        "texte",
        "coCivilite"),
    "email",
        new Array(
        "0",
        "e-mail de l'emprunteur",
        "email",
        ""),
    "jourNaissance",
        new Array(
        "1",
        "jour de naissance de l'emprunteur",
        "nombre",
        ""),
    "moisNaissance",
        new Array(
        "1",
        "mois de naissance de l'emprunteur",
        "nombre",
        ""),
    "anneeNaissance",
        new Array(
        "1",
        "ann&eacute;e de naissance de l'emprunteur",
        "nombre",
        ""),
    "coJourNaissance",
        new Array(
        "1",
        "jour de naissance du co-emprunteur",
        "nombre",
        "coCivilite"),
    "coMoisNaissance",
        new Array(
        "1",
        "mois de naissance du co-emprunteur",
        "nombre",
        "coCivilite"),
    "coAnneeNaissance",
        new Array(
        "1",
        "ann&eacute;e de naissance du co-emprunteur",
        "nombre",
        "coCivilite"),
	"nbEnfantsACharge",
        new Array(
        "1",
        "nombre d'enfant(s) &agrave; charge",
        "nombre",
        ""),
    "revenus",
        new Array(
        "1",
        "revenus de l'emprunteur",
        "nombre",
        ""),
    "coRevenus",
        new Array(
        "1",
        "revenus du co-emprunteur",
        "nombre",
        "coCivilite"),		
    "charges",
        new Array(
        "1",
        "charges de l'emprunteur",
        "nombre",
        ""),
    "coCharges",
        new Array(
        "1",
        "charges du co-emprunteur",
        "nombre",
        "coCivilite"),
	"bienImmobilier",
        new Array(
        "1",
        "etes-vous propri&eacute;taire d&rsquo;un bien immobilier ?",
        "texte",
        ""),/*
	"bienImmobilier2",
        new Array(
        "1",
        "etes-vous propri&eacute;taire d&rsquo;un bien immobilier ?",
        "texte",
        ""),	*/
	"valeurBien",
        new Array(
        "1",
        "estimation de la valeur du bien",
        "nombre",
        ""),
	"montantMensualite",
        new Array(
        "1",
        "montant de la mensualit&eacute; souhait&eacute",
        "nombre",
        ""),
    "dureeRemboursement",
        new Array(
        "1",
        "dur&eacute;e de remboursement souhait&eacute;e",
        "textenombre",
        ""),		
	"montantReserve",
        new Array(
        "1",
        "montant de la r&eacute;serve d&rsquo;argent souhait&eacute;e",
        "nombre",
        ""),
	"telDomicile",
        new Array(
        "0",
        "num&eacute;ro de t&eacute;l&eacute;phone (t&eacute;l. 1)",
        "phone",
        ""),
    "commentaire",
        new Array(
        "1",
        "laissez-nous un commentaire",
        "",
        "")		     
);



// extrait les données d'un champ
/* clés du tableau retourné :
    0 : facultatif (1) ou non (0)
    1 : libellé du champ
    2 : type du champ (cf type_ok)
    3 : idChamp duquel il dépend
*/
function extrait_donnees(idChamp)
{
    for (i = 0; i < champs.length; i++) {
        if (champs[i] == idChamp) {
            return (champs[i+1]);
        }
    }

    return false;
}



// fonction de vérification de champ en temps réel
// (affiche une image en conséquence)
function verifChamp(idChamp)
{
    var champ   = document.getElementById(idChamp);
    var donnees = extrait_donnees(idChamp);

    if (donnees != 0) {

        var image  = document.getElementById('picto_'+idChamp);
        var erreur = erreur_champ(champ, donnees);

        if (image) {
            switch (erreur) {
                case 1 : // champ ok
                    image.src = "images/formulaire-picto-ok.gif";
                    image.style.visibility = "visible";
                    break;

                case 2 : // mauvais type
                    image.src = "images/formulaire-picto-format.gif";
                    image.style.visibility = "visible";
                    break;

                case 3 : // champ obligatoire vide
                    image.src = "images/formulaire-picto-vide.gif";
                    image.style.visibility = "visible";
                    break;

                default :
                    image.style.visibility = "hidden";
            }
        }

        return erreur;
    }
    return 0;

}



// fonction de vérification de date (idem que vérifChamp mais sur 3 champs date)
function verifDate(idJour, idMois, idAnnee, idImage)
{
    var erreurJour  = verifChamp(idJour);
    var erreurMois  = verifChamp(idMois);
    var erreurAnnee = verifChamp(idAnnee);
    var image       = document.getElementById('picto_'+idImage);

    if (image) {
        if (erreurJour == 3 || erreurMois == 3 || erreurAnnee == 3) {
            image.src = "images/formulaire-picto-vide.gif";
            image.style.visibility = "visible";
            return 3;

        } else if (erreurJour == 2 || erreurMois == 2 || erreurAnnee == 2) {
            image.src = "images/formulaire-picto-format.gif";
            image.style.visibility = "visible";
            return 2;

        } else if (erreurJour == 1 || erreurMois == 1 || erreurAnnee == 1) {
            image.src = "images/formulaire-picto-ok.gif";
            image.style.visibility = "visible";
            return 1;
        }
    }

    return 0;
}



// fonction de recherche de type d'erreur sur un champ
/* entrée :
        champ   : objet de type HTMLObject
        donnees : tableau dont les clés sont les suivantes :
                    0 : facultatif (1) ou non (0)
                    1 : libellé du champ
                    2 : type du champ
                    3 : idChamp duquel il dépend

sortie :
        0 = champ facultatif vide
        1 = champ obligatoire ok
        2 = type non respecté
        3 = champ obligatoire vide
*/
function erreur_champ(champ, donnees)
{
    if (donnees[3] !== "") { // dépend d'un autre champ
        var champParent   = document.getElementById(donnees[3]);
        var donneesParent = extrait_donnees(donnees[3]);

        if (donneesParent !== false) {
            var erreur = erreur_champ(champParent, donneesParent);

            if (is_null(champ)) {
                if (erreur == 0)
                    return 0;
                else
                    return 3;
            }
        }

    } else if (is_null(champ)) {
        if (donnees[0] == 0) // champ obligatoire
            return 3;
        else
            return 0;
    }

    if (type_ok(champ, donnees[2]))
        return 1;
    else
        return 2;
}



// vérifie si un champ est nul ou non
// entrée : HTMLObject
function is_null(champ)
{
    var valeur = valeur_champ(champ);
   
    if (valeur == "" || valeur.length == 0 || valeur == " ")
        return 1;
    else
        return 0;
}



// extrait la valeur d'un champ
// entrée : HTMLObject
function valeur_champ(champ) {

    var valeur = "";

    if (champ.type == "text") {
        valeur = champ.value;
    } else if (champ.type == "select-one") {
        valeur = champ.options[champ.selectedIndex].value;
    } else {
        valeur = champ.text;
    }

    return valeur;
}



// vérifie que le champ est du bon type
// entrée : HTMLObject, string
function type_ok(champ, typeChamp) {

    var valeur = valeur_champ(champ);

    switch (typeChamp) {
        case "nombre" :
            Number(valeur);
            var expr = new RegExp("^[0-9]+$","gi");
            return expr.test(valeur);
            break;

        case "texte" :
            String(valeur);
            var expr = new RegExp("^[a-zA-Z\-\ 'àâäãçéèêëìîïòôöõùûüñ\%]+$","gi");
            return expr.test(valeur);
            break;

        case "textenombre" :
            String(valeur);
            var expr = new RegExp("^[0-9a-zA-Z\-\ \+'àâäãçéèêëìîïòôöõùûüñ\.\+\%]+$","gi");
            return expr.test(valeur);
            break;

        case "phone" :
            String(valeur);
            var expr = new RegExp("^[0-9\ \-\.]+$","gi");
            return expr.test(valeur);
            break;

        case "email" :
            String(valeur);
            var expr=/^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?![-\d])[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
            return ((valeur.match(expr) == valeur) && (valeur.substr(valeur.lastIndexOf("@")).length<=256));
            break;

    }

}

function verifRadioBouton(idBouton1,idBouton2,idImage)
{
 
    var image       = document.getElementById('picto_'+idImage);

    if (image) {
        if(document.getElementById(idBouton1).checked || document.getElementById(idBouton2).checked) {
            image.src = "images/formulaire-picto-ok.gif";
            image.style.visibility = "visible";
            return 1;
        }else {
            image.src = "images/formulaire-picto-vide.gif";
            image.style.visibility = "visible";
            return 3;
        }

    }
 

    return 0;
}

// fonction de vérification globale lors du changement d'onglet
function verifOnglet(noOnglet, ongletSuivant) {

    if(ongletSuivant<noOnglet&&ongletSuivant!=0)
    {
        imageOnglet(noOnglet,0);
        imageOnglet(ongletSuivant,1);
        changeOnglet(ongletSuivant);
        return;
    }
    switch (noOnglet) {
		case 1 :
            // champs onglet 1
            var champsOnglet = new Array("civilite", "coCivilite", "nom", "coNom", "prenom",
            "coPrenom", "email", /*"coEmail",*/ "jourNaissance", "moisNaissance", "anneeNaissance",
            "coJourNaissance", "coMoisNaissance", "coAnneeNaissance",
            "nbEnfantsACharge","revenus","coRevenus","charges","coCharges",
			/*"bienImmobilier1","bienImmobilier2",*/"valeurBien","montantMensualite","dureeRemboursement",
			"montantReserve","momentRappel","heureRappel","telDomicile","telBureau"/*,"commentaire"*/);
             
            break;

        default :
            var champsOnglet = new Array();
    }


    if (champsOnglet.length > 0) {

        var erreur = new Array();
        var alerte = new Array();

        for ( n=0; n < champsOnglet.length; n++) {

            
            var noErreur = verifChamp(champsOnglet[n]);
            var valeurs  = extrait_donnees(champsOnglet[n]);

         

            switch (noErreur) {
                case 2 : // mauvais type
                    alerte.push(valeurs[1]);
                    break;

                case 3 : // champ obligatoire vide
                    erreur.push(valeurs[1]);
                    break;
            }

            if (noOnglet == 1) {
                switch(champsOnglet[n]) {

                    case 'anneeNaissance' :
                        verifDate('jourNaissance','moisNaissance','anneeNaissance','dateNaissance');
                        break;

                    case 'coAnneeNaissance' :
                        verifDate('coJourNaissance','coMoisNaissance','coAnneeNaissance','coDateNaissance');
                        break;
	
                }
            }
        }
        //en dehors de la boucle si l'onglet est 1
        if (noOnglet == 1) {
                
                var noErreur=verifRadioBouton('bienImmobilier1','bienImmobilier2','bienImmobilier');
                var valeurs  = extrait_donnees('bienImmobilier');
               
                switch (noErreur) {
                case 2 : // mauvais type
                    alerte.push(valeurs[1]);
                    break;

                case 3 : // champ obligatoire vide
                    erreur.push(valeurs[1]);
                    break;
            }
            }


        div = document.getElementById("message_erreur");

        if (erreur.length == 0 && alerte.length == 0) {

            div.style.visibility = "hidden";

            if (ongletSuivant == 0) {
                document.getElementById('formulaire').submit();
            } else {
                imageOnglet(noOnglet,0);
                imageOnglet(ongletSuivant,1);
                changeOnglet(ongletSuivant);
            }

        } else {

            var textErreur = new String;
            var textAlerte = new String;

            if (erreur.length >0 && alerte.length == 0) {
                textErreur  = "<img src=\"images/formulaire-erreur-haut.gif\" width=\"285\" height=\"15\" alt=\"\" />\n";
                textErreur += "<p>Les champs suivants sont obligatoires :</p>\n";
                textErreur += "<ul>";
                for (i=0; i < erreur.length; i++)
                    textErreur += "<li>"+erreur[i]+"</li>";
                textErreur += "</ul>";
                textErreur += "<img src=\"images/formulaire-erreur-bas.gif\" width=\"285\" height=\"600\" alt=\"\" style=\"vertical-align:bottom\" />";
            }
			
            if (alerte.length >0 && erreur.length == 0) {
                textAlerte  = "<img src=\"images/formulaire-erreur-haut.gif\" width=\"285\" height=\"15\" alt=\"\" />\n";
                textAlerte += "<p>Les champs suivants ne sont pas au format attendu :</p>\n";
                textAlerte += "<ul>";
                for (i=0; i < alerte.length; i++)
                    textAlerte += "<li>"+alerte[i]+"</li>";
                textAlerte += "</ul>";
                textAlerte += "<img src=\"images/formulaire-erreur-bas.gif\" width=\"285\" height=\"600\" alt=\"\" style=\"vertical-align:bottom\" />\n";
            }
			
			if (erreur.length >0 && alerte.length > 0) {
                textErreur  = "<img src=\"images/formulaire-erreur-haut.gif\" width=\"285\" height=\"15\" alt=\"\" />\n";
                textErreur += "<p>Les champs suivants sont obligatoires :</p>\n";
                textErreur += "<ul>";
                for (i=0; i < erreur.length; i++)
                	textErreur += "<li>"+erreur[i]+"</li>";
                textErreur += "</ul>";
                textErreur += "<img src=\"images/formulaire-erreur-bas-court.gif\" width=\"285\" height=\"15\" alt=\"\" style=\"vertical-align:bottom\" />\n";
			    textAlerte  = "<img src=\"images/formulaire-erreur-haut.gif\" width=\"285\" height=\"15\" alt=\"\" />\n";
                textAlerte += "<p>Les champs suivants ne sont pas au format attendu :</p>\n";
                textAlerte += "<ul>";
                for (i=0; i < alerte.length; i++)
                    textAlerte += "<li>"+alerte[i]+"</li>";
                textAlerte += "</ul>";
                textAlerte += "<img src=\"images/formulaire-erreur-bas.gif\" width=\"285\" height=\"600\" alt=\"\" style=\"vertical-align:bottom\" />\n";
            }
			
            div.innerHTML = textErreur+textAlerte;
            div.style.visibility = "visible";
            window.location = "#haut_page";
        }
    }
}



// fonction de changement d'onglet
// masque tous les onglets et affiche l'onglet "id"
function changeOnglet(id) {
	
    for(var i=1; i<=1; i++) {
        // masque les onglet
        document.getElementById("formulaire_tableau_"+i).style.display = "none";
    }
    // affiche l'onglet choisi
    document.getElementById("formulaire_tableau_"+id).style.display = "block";
    window.location = "index.php#haut_page";
} 

// change l'image d'un onglet (valide)
// id : identifiant de l'onglet
// on : image de l'onget (1=on, 0=off)
function imageOnglet(id, on) {
    if (id > 0 && id < 2) {
        if (on == 1)
            document.getElementById("onglet"+id).src = "images/formulaire-onglet"+id+"-on.gif";
        else
            document.getElementById("onglet"+id).src = "images/formulaire-onglet"+id+"-off.gif";
    }
}

// affichage des infobulles
function afficher_infobulle(info,etat)
{
	var object = 'infobulle_'+info;
	
	if (document.layers && document.layers[object])
	{ 
		//document.layers[object].visibility = etat;
		document.layers[object].display = etat;
	} 
	else if (document.all)
	{ 
		//document.all[object].style.visibility = etat;
		document.all[object].style.display = etat;
	}
	else if (document.getElementById) 
	{
		//document.getElementById(object).style.visibility = etat; 
		document.getElementById(object).style.display = etat;
	} 
}



var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- .";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++) {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function trim(s) {
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
	var bracket=3
	strPhone=trim(strPhone)
	if(strPhone.indexOf("+")>1) return false
	if(strPhone.indexOf("-")!=-1)bracket=bracket+1
	if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false
	var brchr=strPhone.indexOf("(")
	if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false
	if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

