$(document).ready(function() {
    $(':input.JS_require').initRequiredProduct();
    //produits
    $(":input.JS_quantite[name^='produit_']").change(function() {$(this).setMontant();});
    $(":input.JS_quantite[name^='produit_']").keyup(function() {$(this).setMontant();});
    //duplications
    $(":input.JS_quantite[name^='duplication_']").keyup(function() {$(this).setMontantDuplication();});    
    //Restitution de la commande
    $(":input.JS_restitution").change(function() {$(this).setMontantRestitution();});
    
    $(':input.JS_quantite').numeric();
});


/***
* Calcul le montant pour les différents médias
**/
jQuery.fn.setMontant = function() {
    this.each(function() {
        var champs = $(this);
        var valeur = $(this).val();
        //Si c'est un champs requis,         
        if(!isNaN(valeur)) {
            $.ajax({
                type: "POST",
                url: "ajax_getPrice.php",
                data: "champs="+$(this).attr('name'),
                success: function(msg){
                    champs.parents('tr').find('td > :input.JS_montant').val((valeur*msg).toFixed(2));
                }
            });
            //Si c'est un champs requis, peut-être qu'il libère l'accès aux champs dépendants
            champs.isRequiredProduct();
        }
        setTimeout("$(jQuery).recalculer()", 250);
    });
}

/***
* Initialisation des champs contraints
**/
jQuery.fn.initRequiredProduct = function() {
    this.each(function() {
        var champs = $(this);
        if(champs.hasClass('JS_require')) {
            // On va chercher quel champs est requis
            $.ajax({
                type: "POST",
                url: "ajax_getRequiredProduct.php",
                data: "champs="+champs.attr('name'),
                success: function(msg){
                    if(msg!= '') { //msg = numéro du champs requis.
                        var requiredProduct_val = $(":input.JS_quantite[name='produit_"+msg+"']").val();
                        if(requiredProduct_val <= 0) champs.enableReadOnly();
                        else champs.disableReadOnly();
                    }
                }
            });
        }
    });
}

jQuery.fn.isRequiredProduct = function() {
    this.each(function() {
        var champs = $(this);
        var val = champs.val();
        var concernedField = "";
        var reg=new RegExp("[ ,;]+", "g");
        var tableau = new Array();
        var count_tab;
        // On va chercher quels champs sont requis

        $.ajax({
            type: "POST",
            url: "ajax_isRequiredProduct.php",
            data: "champs="+champs.attr('name'),
            success: function(msg){
                tableau = msg.split(reg);
                count_tab = tableau.length;
                for (var i=0; i<count_tab; i++) {
                    concernedField = $("input[name='produit_"+tableau[i]+"']");
                    if(val > 0) concernedField.disableReadOnly();
                    else concernedField.enableReadOnly();
                }
            }
        });
    });
}

/***
* Gérance des champs requis
**/
jQuery.fn.enableReadOnly = function() {
    this.each(function() {
        var champs = $(this);
        var valeur = $(this).val();
        champs.val(0).attr('readonly', 'readonly');
        champs.parents('tr').find('td > :input.JS_montant').val(0);
    });
}
jQuery.fn.disableReadOnly = function() {
    this.each(function() {
        var champs = $(this);
        var valeur = $(this).val();
        champs.removeAttr('readonly');
        $.ajax({
            type: "POST",
            url: "ajax_getPrice.php",
            data: "champs="+champs.attr('name'),
            success: function(msg){
                champs.parents('tr').find('td > :input.JS_montant').val((valeur*msg).toFixed(2));
            }
        });
    });
}

/***
* Calcul le montant pour les duplications
**/
jQuery.fn.setMontantDuplication = function() {
    this.each(function() {
        var champs = $(this);
        var valeur = $(this).val();
        var totalDVD = $(":input[name='totalDVD']").val();
        //Si c'est un champs requis,         
        if(!isNaN(valeur)) {
            $.ajax({
                type: "POST",
                url: "ajax_getPriceDuplication.php",
                data: "champs="+$(this).attr('name'),
                success: function(msg){
                    champs.parents('tr').find('td > :input.JS_montant').val((valeur*msg*totalDVD).toFixed(2));
                }
            });
        }
        setTimeout("$(jQuery).recalculer()", 250);
    });
}

/***
* Calcul le montant pour la restitution de la commande
**/
jQuery.fn.setMontantRestitution = function() {
    this.each(function() {
        var champs = $(this);
        var valeur = $(this).val();
        if(!isNaN(valeur)) {
            $.ajax({
                type: "POST",
                url: "ajax_getPriceRestitution.php",
                data: "champs="+valeur,
                success: function(msg){
                    champs.parents('table').find('tr> td > :input.JS_montant').val(Number(msg).toFixed(2));
                }
            });
        }
        setTimeout("$(jQuery).recalculer()", 250);
    });
}

/***
* Recalcule le total du devis
**/
jQuery.fn.recalculer = function() {
    var total = 0;
    var add = 0;
    $(':input.JS_quantite').each(function() {
        if($(this).val()=='' || isNaN($(this).val()) || $(this).val() < 0) $(this).val(0);
    });
    
    $(':input.JS_montant').each(function() {
        if($(this).val()=='' || isNaN($(this).val()) || $(this).val() < 0) $(this).val(0);
        else {
            add = parseFloat($(this).val());       
            total = parseFloat(total)+add;
        }
    });   
    $(':input#totalTTC').val(Number(total).toFixed(2));    
}
