// JavaScript Document
function RegisterPage() {
    this.tarifs = new Array();
    this.totalFacture = 0;

    $(function() {
        $(".calendrier").datePicker({
            startDate:'01/01/1996'
        });
        $("[name='nomProprio']").focus();
        $("#typeExpo").bind("change", function(e) {
            g_page.onTypeExpoChange(e)
        });
        $("#lieuExpo").bind("change", function(e) {
            g_page.onLieuExpoChange(e)
        });
        $("#registerForm").bind("submit", function(e) {
            return g_page.callBank();
        });
    });
}

RegisterPage.EXPO_NATIONALE = 1;
RegisterPage.CLASSE_CHAMPION = 1;
RegisterPage.CLASSE_OUVERTE = 2;
RegisterPage.CLASSE_INTER = 3;
RegisterPage.CLASSE_JEUNE = 4;
RegisterPage.CLASSE_BEBE = 5;
RegisterPage.CLASSE_VETERAN = 6;
RegisterPage.CLASSE_BDC = 7;
RegisterPage.CLASSE_VENERABLE = 8;
RegisterPage.PRIX_C1 = 1;
RegisterPage.PRIX_C2 = 2;
RegisterPage.PRIX_C3 = 3;
RegisterPage.PRIX_BB = 4;
RegisterPage.PRIX_BC = 5;
RegisterPage.PRIX_VT = 6;
RegisterPage.PRIX_VN = 7;

/**
 * On vérifie rapidement les données avant de transmettre la requête au serveur. Si tout va bien, celui-ci redirigera
 * le client vers le site de paiement sécurisé
 */
RegisterPage.prototype.callBank = function() {
    if($("#listeChiens tbody tr").length < 2) {
        alert("Aucun chien n'a été inscrit");
        return false;
    }
    
    var msg = "Vous allez quitter la page d'inscription et être redirigé vers le module de paiement en ligne.\n";
    msg += "Confirmez-vous la demande ?";
    if(!confirm(msg)) return false;
    return true;
}

/**
 * Contrôle rapide : si les champs obligatoires ne sont pas renseignés, on émet un message d'alerte
 */
RegisterPage.prototype.checkForm = function() {
    var ok = true;
    $("#registerForm td.mandatory").each(function() {
        if($("input", this).val() == "") {
            $(this).addClass("dataKO");
            ok = false;
        }
        else {
            $(this).removeClass("dataKO");
        }
    });

    if(!ok) {
        alert("Il manque des champs obligatoires.\nVeuillez vérifier vos saisies");
        return false;
    }
    else {
        return true;
    }
}

RegisterPage.prototype.deleteRow = function(btn) {
    if(!confirm("Vous allez supprimer une inscription. Confirmez-vous ?")) return false;
    this.processRemoveRow($(btn).parent().parent());
    return true;
}

/**
 * @param int typeExpo Type d'exposition (nationale, régionale)
 * @param int classeChien
 * @param it rang Utile pour les classes Champion, Jeune etc.
 * @param bool adh true => tarif adhérent
 * @return float Tarif pour ce chien, false en cas d'erreur
 */
RegisterPage.prototype.getTarif = function(typeExpo, classeChien, rang, adh) {
    var typePrix;
    if(this.isCasseCouilles(classeChien)) {
        if(rang == 1) {
            typePrix = RegisterPage.PRIX_C1;
        }
        else if(rang == 2) {
            typePrix = RegisterPage.PRIX_C2;
        }
        else {
            typePrix = RegisterPage.PRIX_C3;
        }
    }
    else if(classeChien == RegisterPage.CLASSE_BEBE) {
        typePrix = RegisterPage.PRIX_BB;
    }
    else if(classeChien == RegisterPage.CLASSE_BDC) {
        typePrix = RegisterPage.PRIX_BC;
    }
    else if(classeChien == RegisterPage.CLASSE_VENERABLE) {
        typePrix = RegisterPage.PRIX_VN;
    }
    else if(classeChien == RegisterPage.CLASSE_VETERAN) {
        typePrix = RegisterPage.PRIX_VT;
    }
    else {
        alert("Classe de chien inconnu : " + classeChien);
        return false;
    }

    for(i = 0; i < this.tarifs.length; ++ i) {
        if(this.tarifs[i].typeExpo == typeExpo && this.tarifs[i].typePrix == typePrix) {
            if(this.tarifs[i].actif) {
                // On a le bon tarif
                return (adh == 1 ? this.tarifs[i].prixAdherent : this.tarifs[i].prixNonAdherent);
            }
            else {
                alert("Cette classe de chien n'est pas admise à participer à ce type d'expositions");
                return false;
            }
        }
    }

    alert("Tarif introuvable pour ce chien : " + typeExpo + ", " + classeChien + ", " + rang + ", " + adh + ", " + typePrix);
    return false;
}

RegisterPage.prototype.isCasseCouilles = function(classeChien) {
    return (classeChien == RegisterPage.CLASSE_CHAMPION || classeChien == RegisterPage.CLASSE_INTER ||
        classeChien == RegisterPage.CLASSE_JEUNE || classeChien == RegisterPage.CLASSE_OUVERTE);
}

/**
 * Si on choisit une expo régionale, le select "type expositions" est mis sur "régionales".
 * Si on choisit une expo nationale, le select "type expositions" est mis sur "nationales".
 * @param jQuery.Event e Evénement déclenché par le select "lieux expositions"
 */
RegisterPage.prototype.onLieuExpoChange = function(e) {
    var selTypes = $("#typeExpo")[0];
    if($("#lieuExpo")[0].selectedIndex == 0) {
        selTypes.selectedIndex = 0;
    }
    else {
        selTypes.selectedIndex = 1;
    }
}

/**
 * Si on est sur des expos nationales, le select "lieux expositions" est désactivé et la ligne 0 sélectionnée
 * Si on est sur des régionales, le select "lieux expositions" est actif et la ligne 1 sélectionnée par défaut
 * @param jQuery.Event e Evénement déclenché par le select "types expositions"
 */
RegisterPage.prototype.onTypeExpoChange = function(e) {
    var opt = $(":selected", e.target)[0];
    var selLieux = $("#lieuExpo")[0];
    if(opt.value == RegisterPage.EXPO_NATIONALE) {
        selLieux.selectedIndex = 0;
    }
    else {
        selLieux.selectedIndex = 1;
    }
}

/**
 * Il faut recalculer les tarifs quand on enlève une ligne
 * @param jQuery jqrow Ligne à retirer
 */
RegisterPage.prototype.processRemoveRow = function(jqrow) {
    this.totalFacture -= parseFloat($(".prixChien", jqrow).text());
    var classeChien = $("[name='classeChien[]']", jqrow).val();
    jqrow.remove();

    // Remise à jour des prix des autres chiens champions etc. pour cette exposition
    var rang = 0;
    var me = this;
    if(this.isCasseCouilles(classeChien)) {
        // Si le chien est de classe champion etc. il faut trouver son rang par exposition...
        var idExpo = $("[name='idExpo[]']", jqrow).val();
        $("#listeChiens input[name='classeChien[]']").each(function() {
            // pour chaque ligne, si elle correspond à un chien champion etc. pour cette exposition,
            // on recalcule le prix
            if(me.isCasseCouilles($(this).val())) {
                var td = $(this).parent();
                var expo = $("[name='idExpo[]']", td).val();
                if(expo == idExpo) {
                    ++ rang;
                    var typeExpo = $("[name='typeExpo[]']", td).val();
                    var isAdh = $("[name='isAdh[]']", td).val();
                    var tarif = me.getTarif(typeExpo, classeChien, rang, isAdh);
                    var oldTarif = $(".prixChien", td.parent()).text();
                    $(".prixChien", td.parent()).text(tarif);
                    me.totalFacture -= parseFloat(oldTarif);
                    me.totalFacture += parseFloat(tarif);
                }
            }
        });
    }

    $("#totalEuros").text("" + this.totalFacture);
}

/**
 * Ajoute un chien à la liste des inscrits, met à jour les prix
 */
RegisterPage.prototype.registerDog = function() {
    if(!this.checkForm()) {
        return false;
    }

    // Vérifications
    if($("#lieuExpo").val() < 1) {
        alert("Vous devez sélectionner une exposition valide pour pouvoir inscrire un chien");
        $("#lieuExpo").focus();
        return false;
    }

    if($("#classeChien").val() == RegisterPage.CLASSE_CHAMPION) {
        alert("Pièce justificative à joindre (dans la liste au bas du formulaire)");
    }

    // On ajoute une ligne au tableau "liste des chiens inscrits"
    var data = $("#registerForm").serialize();
    var me = this;
    var newRow = $(".listeChiens tr:last").after("<tr></tr>").next().load('inscription/fragment.php', data,
        function() {
            // Quand on charge la nouvelle ligne...
            var typeExpo = $("[name='typeExpo[]']", newRow).val();
            var classeChien = $("[name='classeChien[]']", newRow).val();
            var idExpo = $("[name='idExpo[]']", newRow).val();
            var isAdh = $("[name='isAdh[]']", newRow).val();
            var rang = 0;
            var deleteRow = false;
            if(me.isCasseCouilles(classeChien)) {
                // Si le chien est de classe champion etc. il faut trouver son rang par exposition...
                $("#listeChiens input[name='classeChien[]']").each(function() {
                    // pour chaque ligne, si elle correspond à un chien champion etc. pour cette exposition,
                    // on augmente le rang
                    if(me.isCasseCouilles($(this).val())) {
                        var expo = $("[name='idExpo[]']", $(this).parent()).val();
                        if(expo == idExpo) {
                            ++ rang;
                        }
                    }
                });
            }

            var tarif = me.getTarif(typeExpo, classeChien, rang, isAdh);
            if(tarif == false) {
                deleteRow = true;
            }
            else {
                me.totalFacture += tarif;
            }
            
            $(".prixChien", newRow).text("" + tarif);
            $("#totalEuros").text("" + me.totalFacture);

            if(deleteRow) {
                newRow.remove();
                return false;
            }
            
            return true;
        });

    // On vide les champs et on repositionne le curseur
    var dn = $("[name='naissanceChien_']").val();
    $(".dog input[type='text']").val("");
    $("[name='naissanceChien_']").val(dn);
    $("[name='classeChien_']").val("0").change();
    $("[name='justifChien_']").val("");
    $("#nomChien").focus();
    return true;
}

RegisterPage.prototype.updateRow = function(btn) {
    var row = $(btn).parent().parent();
    
    // On recopie les champs dans le formulaire avant de supprimer la ligne
    $("[name='nomChien_']").val($("[name='nomChien[]']", row).val());
    $("[name='affixeChien_']").val($("[name='affixeChien[]']", row).val());
    $("[name='sexeChien_']").val($("[name='sexeChien[]']", row).val());
    $("[name='naissanceChien_']").val($("[name='naissanceChien[]']", row).val());
    $("[name='LOFChien_']").val($("[name='LOFChien[]']", row).val());
    var idx = parseInt($("[name='immatTypeChien[]']", row).val()) - 1;
    $("[name='immatTypeChien_']")[idx].checked = true;
    $("[name='immatChien_']").val($("[name='immatChien[]']", row).val());
    $("[name='classeChien_']").val($("[name='classeChien[]']", row).val());
    $("[name='justifChien_']").val($("[name='justifChien[]']", row).val());
    idx = parseInt($("[name='confirm[]']", row).val()) - 1;
    $("[name='confirm_']")[idx].checked = true;
    $("[name='nomProd_']").val($("[name='nomProd[]']", row).val());
    $("[name='prenomProd_']").val($("[name='prenomProd[]']", row).val());
    $("[name='nomPere_']").val($("[name='nomPere[]']", row).val());
    $("[name='LOFPere_']").val($("[name='LOFPere[]']", row).val());
    $("[name='nomMere_']").val($("[name='nomMere[]']", row).val());
    $("[name='LOFMere_']").val($("[name='LOFMere[]']", row).val());
    $("[name='typeExpo_']").val($("[name='typeExpo[]']", row).val());
    $("[name='idExpo_']").val($("[name='idExpo[]']", row).val());
    this.processRemoveRow(row);
}

