var verifQasTimer;


// ----------------------------
// ! ///// START EVENT AND HIGHLIGHTING FUNCTIONS //////////
// ----------------------------

// ----------------------------
// ! ///// register form events //////////
// ----------------------------
function startRegister() {
    tracker55.fc("Authentification/Creervotrecompte");
    jQuery("#registerButton").addClass("disabled");
    jQuery("#register").show("blind", { direction: "vertical" }, 800, function() {
        jQuery("#register select").show();
    });
    jQuery(this).blur();
    jQuery(this).unbind("click", startRegister);
}

// ----------------------------
// ! ///// highlighting form blocks //////////
// ----------------------------
function highlightForm() {
    jQuery(".checkoutColumn").each(function(i) {
        jQuery(this).bind("mousedown", function() {
            jQuery(".checkoutColumn").removeClass("currentItem");
            jQuery(this).addClass("currentItem");
            if (jQuery(this).attr("id") == "identification") {
                if (jQuery("#registerButton").hasClass("disabled")) {
                    jQuery("#registerButton").removeClass("disabled");
                    jQuery("#register").hide("blind", { direction: "vertical" }, 800, function() {
                        jQuery("#register select").hide();
                    });
                    jQuery(".newAdress #differenteAdresseNon").attr("checked", "checked");
                    jQuery("#shippingBlock").hide();
                    jQuery("#registerButton").bind("click", startRegister);
                }
            }

        });
    });
}

// ----------------------------
// ! ///// initializing form //////////
// ----------------------------
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

function initForm() {
    jQuery(".register #register").hide();
    //jQuery(".register #register .validation .button").addClass("disabled");
    var action = getUrlVars()["action"];

    if (action != null && action != "" && action == "forgotPass") {
        jQuery("#forgotPass").show();
        jQuery("#login").hide();
    } else {
        jQuery("#forgotPass").hide();
        jQuery("#login").show();
    }

    jQuery(".register #shippingBlock").hide();
    jQuery(".register #register select").hide();
    jQuery("#register input[name=civilite]").attr("checked", "");
    $("#suggestEmail").hide();
    //init enter key for password input and recover password
    triggerClick(jQuery("#checkoutPass"), jQuery("#checkoutLogin"));
    triggerClick(jQuery("#mdpOublie"), jQuery("#requestPass"));
    triggerClick(jQuery("#cryptogrammeCultura"), jQuery(".validCultura"));
    triggerClick(jQuery("#cryptogrammeIllicado"), jQuery(".validIllicado"));

     jQuery("#pays").bind("change", function(e) {
        if (jQuery("#pays").val() != "1") {
           if (jQuery(".ville input#ville").length ==0)
             {
                jQuery(".ville select#ville").remove();
                var newInput = jQuery("<input id='ville' name='ville' type='text' class='registerData'/>");//<em>Veuillez indiquer votre ville</em>
                newInput.bind("blur", checkRegisterForm)
                .bind("keyup", { objArr : [{ zipId: "#cdp", countryId: "#pays" }]}, inputDirectCheck);
                jQuery(".ville").append(newInput);   
             }
              jQuery("#ville").triggerHandler("keyup");//simulate inputDirectCheck 
        } 
        else {
            if (jQuery(".ville select#ville").length == 0)
            {
                jQuery(".ville input#ville").remove();
                var newSelectEl = jQuery("<select id='ville' name='ville' class='registerData'></select>");
                newSelectEl.bind("blur", checkRegisterForm).bind("change", qasCityChange);
                jQuery(".ville").append(newSelectEl);
            }
            jQuery("#ville").triggerHandler("blur");//simulate checkRegisterForm
            jQuery("#cdp").triggerHandler("keyup");//simulate pressing key on zipcode, if 5 chars existed, villeLivraison is filled by ajax
        }
    });//.bind("change", { phone: jQuery("#telfixe") }, checkPhone);
     
     jQuery("select#villeLivraison, select#ville").bind("change", qasCityChange);
     jQuery("#paysLivraison").bind("change", function() {
            if (jQuery("#paysLivraison").val() != "1") {
               if (jQuery(".villeLivraison input#villeLivraison").length ==0)
                 {
                    jQuery(".villeLivraison select#villeLivraison").remove();
                    var newInput = jQuery("<input id='villeLivraison' name='villeLivraison' type='text' class='registerData registerShippingData'/>"); //<em>Veuillez indiquer votre ville</em>
                    newInput.bind("blur", checkRegisterForm)
                    .bind("keyup", { objArr : [{ zipId: "#cdpLivraison", countryId: "#paysLivraison" }]}, inputDirectCheck);
                    jQuery(".villeLivraison").append(newInput);
                 }
                 jQuery("#villeLivraison").triggerHandler("keyup");//simulate inputDirectCheck 
            } 
            else {
                if (jQuery(".villeLivraison select#villeLivraison").length == 0)
                {
                    jQuery(".villeLivraison input#villeLivraison").remove();
                    var newSelectEl = jQuery("<select id='villeLivraison' name='villeLivraison' class='registerData registerShippingData'></select>");
                    newSelectEl.bind("blur", checkRegisterForm).bind("change", qasCityChange);
                    jQuery(".villeLivraison").append(newSelectEl);
                }
                jQuery("#villeLivraison").triggerHandler("blur");//simulate checkRegisterForm
                jQuery("#cdpLivraison").triggerHandler("keyup");//simulate pressing key on zipcode, if 5 chars existed, villeLivraison is filled by ajax
            }
        });//.bind("change", { phone: jQuery("#telfixeLivraison") }, checkPhone);
 
      //les modifications annulent les suggestions et le forceValide de 1
        jQuery("#cdpLivraison, #adresseLivraison, #complementAdresseLivraison").bind("change", function() { 
            if($("#suggestAdressLivraison").is(':visible')) { 
                jQuery("#forceValideLivraison").val(0); 
                $("#suggestAdressLivraison").hide("slow");
             } 
         });

        jQuery("#cdp, #adresse, #complementAdresse").bind("change", function() { 
            if($("#suggestAdress").is(':visible')) { 
                jQuery("#forceValide").val(0); 
                $("#suggestAdress").hide("slow");
                } 
         });

    // gestion du bloc de l'adresse de livraison
    jQuery(".newAdress input").each(function(i) {
        jQuery(this).bind("click", function() {
            if (jQuery(this).attr("value") == "1") {
                disableForm();
                jQuery("#shippingBlock input, #shippingBlock select").bind("blur", checkShippingData);
                //jQuery("#villeLivraison").bind("keyup", { objArr : [{ zipId: "#cdpLivraison", countryId: "#paysLivraison" }]}, inputDirectCheck);
                jQuery("#shippingBlock input:not('.suggestAdress')").bind("keyup", { objArr : [{ zipId: "#cdpLivraison", countryId: "#paysLivraison" }]}, inputDirectCheck);

                jQuery("#shippingBlock").show("blind", { direction: "vertical" }, 800, function() {
                    jQuery("#register select").show();
                });
            } else {
                jQuery("#shippingBlock p").removeClass("mandatory") .removeClass("correct").removeClass("mandatoryCdp").removeClass("correctCdp");
                
                 if (jQuery("#register [class^=mandatory]").length == 0)
                    jQuery("#register .errorMsg").fadeOut(500);
                jQuery("#shippingBlock :text").val("");
                jQuery("#shippingBlock :radio, #shippingBlock :checkbox").removeAttr("checked");
                jQuery("#shippingBlock em").hide();
                
                if (jQuery("#register p[class*=correct]").length >= 9) {
                    enableForm();
                }

                jQuery("#shippingBlock").hide("blind", { direction: "vertical" }, 800);
            }
        });
    });

    //highlighting current form
    highlightForm();
}

function qasCityChange(){
    var classSuffixe = jQuery(this).attr('id').indexOf('Livraison')>-1?'Livraison':'';
    //les modifications annulent les suggestions et le forceValide de 1
    if($("#suggestAdress"+classSuffixe).is(':visible')) { 
            jQuery("#forceValide"+classSuffixe).val(0); 
            $("#suggestAdress"+classSuffixe).hide("slow");
     } 
     $("#adresse"+classSuffixe).trigger("keyup");//si formu. d'adresse ok, lance la verif qas
}


// Mot de passe oublie
function showPassLayer() {
    jQuery("#login, #login button").fadeOut(500, function() {
        jQuery("#forgotPass, #forgotPass button").fadeIn(500);
    });
    jQuery(this).blur();
    return false;
}
function hidePassLayer() {
    jQuery("#forgotPass, #forgotPass button").fadeOut(500, function() {
        jQuery("#login, #login button").fadeIn(500);
    });
    jQuery(this).blur();
    return false;
}
function showInfoLayer() {
    jQuery("#forgotPass, #forgotPass button").fadeOut(500, function() {
        jQuery("#info").fadeIn(500);
    });
    //jQuery(this).blur();
    return false;
}
function hideInfoLayer() {
    jQuery("#info").fadeOut(500, function() {
        jQuery("#login, #login button").fadeIn(500);
    });
    //jQuery(this).blur();
    return false;
}

/* END EVENT AND HIGHLIGHTING FUNCTIONS /////////////////////////////// */



/* START AJAX FUNCTIONS /////////////////////////////// */


// Registering functions		

/* START ////////// USER REGISTRATION PROCESS */
function startRegisterProcess() {

    /* START ///////////// BILLING INFO */
    // data arrays
    var registerData = []; // general data array
    var gender = [];
    var misc = [];
    var birthdate = [];
    var sms = [];

    // handling gender //
    var genderData = jQuery("#register input[name=civilite]").each(function(i) {
        if (jQuery(this).is(":checked")) {
            gender.push(jQuery(this).val());
        }
    });
    // --- //

    // handling misc data (personal data, email, password, adress related data) //
    var miscData = jQuery(".registerData").each(function(i) {
        misc.push(jQuery(this).val());
    });
    // --- //

    // handling birthdate //
    var birthdateData = jQuery("select[class*=ddnInput]").each(function(i) {
        birthdate.push(jQuery(this).val());
    });
    var newBirthDate = birthdate[2] + birthdate[1] + birthdate[0];
    // --- //

    // handling SMS sends //
    if (jQuery("#suiviSms").is(":checked")) {
        sms.push("1");
    } else {
        sms.push("0");
    }
    // --- //

    /* END ///////////// BILLING INFO */



    /* START ///////////// SHIPPING INFO */

    // handling send of shipping info //

    // data arrays
    var sendShippingInfo = [];
    var genderShipping = [];
    var miscShipping = [];
    var smsShipping = [];

    // If new shipping info, return 1
    var shippingInfo = jQuery("#register input[name=differenteAdresse]").each(function(i) {
        if (jQuery(this).is(":checked")) {
            sendShippingInfo.push(jQuery(this).val());
        }
    });

    // handling shipping gender //
    var genderShippingData = jQuery("#register input[name=civiliteLivraison]").each(function(i) {
        if (jQuery(this).is(":checked")) {
            genderShipping.push(jQuery(this).val());
        }
    });
    // --- //

    // handling shipping misc data (personal data, email, password, adress related data) //
    var miscShippingData = jQuery("#shippingBlock .registerShippingData").each(function(i) {
        miscShipping.push(jQuery(this).val());
    });
    // --- //

    // handling SMS sends //
    if (jQuery("#suiviSmsLivraison").is(":checked")) {
        smsShipping.push("1");
    } else {
        smsShipping.push("0");
    }
    // --- //
    /* END ///////////// SHIPPING INFO */


    // Generating data array //
    registerData.push(gender, misc, newBirthDate, sms, sendShippingInfo, genderShipping, miscShipping, smsShipping);

    // Generating XML Output
    var registerXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"register\" id=\"" + loginInscriptDebugg + "\"><personaldata><gender><![CDATA[" + registerData[0][0] + "]]></gender><name><![CDATA[" + registerData[1][0] + "]]></name><firstname><![CDATA[" + registerData[1][1] + "]]></firstname><birthdate><![CDATA[" + registerData[2] + "]]></birthdate><email><![CDATA[" + registerData[1][5] + "]]></email><password><![CDATA[" + registerData[1][6] + "]]></password></personaldata><billinginfo><adress><![CDATA[" + registerData[1][8] + "]]></adress><detailadress><![CDATA[" + registerData[1][9] + "]]></detailadress><zipcode><![CDATA[" + registerData[1][11] + "]]></zipcode><city><![CDATA[" + registerData[1][12] + "]]></city><country><![CDATA[" + registerData[1][10] + "]]></country><phone><![CDATA[" + registerData[1][13] + "]]></phone><mobilephone><number><![CDATA[" + registerData[1][14] + "]]></number><sms><![CDATA[" + registerData[3][0] + "]]></sms></mobilephone></billinginfo><shippinginfo><newinfo><![CDATA[" + registerData[4][0] + "]]></newinfo><gender><![CDATA[" + registerData[5][0] + "]]></gender><name><![CDATA[" + registerData[6][0] + "]]></name><firstname><![CDATA[" + registerData[6][1] + "]]></firstname><adress><![CDATA[" + registerData[6][2] + "]]></adress><detailadress><![CDATA[" + registerData[6][3] + "]]></detailadress><zipcode><![CDATA[" + registerData[6][5] + "]]></zipcode><city><![CDATA[" + registerData[6][6] + "]]></city><country><![CDATA[" + registerData[6][4] + "]]></country><phone><![CDATA[" + registerData[6][7] + "]]></phone><mobilephone><number><![CDATA[" + registerData[6][8] + "]]></number><sms><![CDATA[" + registerData[7][0] + "]]></sms></mobilephone><adressname><![CDATA[" + registerData[6][9] + "]]></adressname></shippinginfo></data>";


    // Launching ajax request

    /// JSON Format expected from server ///
    /*
    {
    register: {
    value: "1"
    }
    }
    */

    function createAlert() {
        jQuery("#register .errorMsg:first").fadeOut("slow", function() {
            jQuery(this).remove();
        });
    }

    $.ajax({
        url: checkoutNameService,
        data: registerXMLOutput,
        beforeSend: function() { },
        success: function(data) {
            switch (data.register.value) {
                case "0":
                    jQuery("#register fieldset h4").after("<div class=\"errorMsg\"><p>Nous sommes désolés, une erreur est survenue. Merci de réessayer dans quelques instants.</p></div>");
                    jQuery("#register .errorMsg:first").show("highlight", {}, 500);
                    setTimeout(createAlert, 3000);

                    tracker55.d = "/Creationcompte/echec";
                    tracker55.doTheJob();
                    break;
                case "2": //email used
                    jQuery("#register fieldset h4").after("<div class=\"errorMsg\"><p>Un compte Cultura existe déjà avec cette adresse mail</p></div>");
                    jQuery("#register .errorMsg:first").show("highlight", {}, 500);
                    setTimeout(createAlert, 3000);

                    tracker55.d = "/Creationcompte/echec";
                    tracker55.doTheJob();
                    break;
                case "1":
                    tracker55.d = "/Creationcompte/succes";
                    tracker55.y = "member";
                    tracker55.doTheJob();

                    document.location.href = checkoutRedirectUrl;
                    break;
                default:
                    break;
            }
            // on masque le loader
        },
        complete: function() {
            //on rajoute des events si besoin
        },
        error: function(theRequest, errorType, exceptionObject) { }
    });
    jQuery(this).blur();
    return false;
}

/* END ////////// USER REGISTRATION PROCESS */



/* START ////////// LOGIN PROCESS */

function startLogin() {
    // data array
    var identifiants = [];
    identifiants = jQuery("#login input").each(function(i) {
        identifiants.push(jQuery(this).val());
    });

    // Generating XML Output
    var loginXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"login\" id=\"" + loginInscriptDebugg + "\"><email><![CDATA[" + identifiants[0].value + "]]></email><password><![CDATA[" + identifiants[1].value + "]]></password></data>";


    // Launching ajax request

    /// JSON Format expected from server ///
    /*
    {
    login: {
    value: "1"
    }
    }
    */

    $.ajax({
        url: checkoutNameService,
        data: loginXMLOutput,
        beforeSend: function() { },
        success: function(data) {
            jQuery("#login fieldset").removeClass("error");
            jQuery(".errorMsg").remove();
            jQuery("#login .loginBlock").removeClass("mandatory");
            switch (data.login.value) {
                case "0":
                    tracker55.d = "/Authentification/echec";
                    tracker55.doTheJob();

                    showErrorLogin("mailError", mailError);
                    jQuery("#login #checkoutEmail").parent().addClass("mandatory");
                    break;
                case "1":

                    tracker55.d = "/Authentification/echec";
                    tracker55.doTheJob();

                    showErrorLogin("passError", passError);
                    jQuery("#login #checkoutPass").parent().addClass("mandatory");
                    break;
                case "2":

                    tracker55.d = "/Authentification/succes";
                    tracker55.doTheJob();

                    document.location.href = checkoutRedirectUrl;
                    break;
                default:
                    break;
            }
        },
        complete: function() { },
        error: function(theRequest, errorType, exceptionObject) { }
    });
    jQuery("#checkoutLogin").blur();
    return false;
}

/* END ////////// LOGIN PROCESS */


/* START ////////// LOST PASSWORD PROCESS */

function startRecoverPass() {
    // data array
    var passData = [];
    passData.push(jQuery("#mdpOublie").val());

    // Generating XML Output
    var passXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"sendpassword\" id=\"" + loginInscriptDebugg + "\"><email><![CDATA[" + passData[0] + "]]></email></data>";


    // Launching ajax request

    /// JSON Format expected from server ///
    /*
    {
    sendpassword: {
    value: "1"
    }
    }
    */

    $.ajax({
        url: checkoutNameService,
        data: passXMLOutput,
        beforeSend: function() { },
        success: function(data) {
            switch (data.sendpassword.value) {
                case "0":
                    // error display
                    showErrorPass("mailError", mailError);
                    break;
                case "1":
                    showInfoLayer();
                    setTimeout(hideInfoLayer, 3000);
                    break;
                default:
                    break;
            }
        },
        complete: function() { },
        error: function(theRequest, errorType, exceptionObject) { }
    });
    jQuery("#requestPass").blur();
    return false;
}

/* END ////////// LOGIN PROCESS */


/* END AJAX FUNCTIONS /////////////////////////////// */


/* START ERROR HANDLING FUNCTIONS /////////////////////////////// */
function showErrorLogin(errorType, msg) {
    jQuery("#login fieldset").addClass("error");
    if (jQuery("#login fieldset .errorMsg").length == 0) {
        jQuery("#login fieldset").prepend("<div class=\"errorMsg\"><p>Votre formulaire comporte quelques erreurs, veuillez vérifier les champs saisis suivants :</p><ul><li class=\"" + errorType + "\">" + msg + "</li></ul></div>");
    } else {
        if (jQuery("#login fieldset .errorMsg ." + errorType).length == 0) {
            jQuery("#login fieldset .errorMsg ul").append("<li class=\"" + errorType + "\">" + msg + "</li>");
        }

    }
    jQuery("#login fieldset .errorMsg").show("highlight", {}, 500);
}

function hideErrorLogin(errorType) {
    jQuery("#login fieldset").removeClass("error");
    jQuery("#login fieldset .errorMsg ul ." + errorType).remove();
    if (jQuery("#login fieldset .errorMsg ul li").length == 0) {
        jQuery("#login fieldset .errorMsg").remove();
    }
}

function showErrorPass(errorType, msg) {
    jQuery("#forgotPass fieldset").addClass("error");
    if (jQuery("#forgotPass fieldset .errorMsg").length == 0) {
        jQuery("#forgotPass fieldset").prepend("<div class=\"errorMsg\"><p>Votre formulaire comporte quelques erreurs, veuillez vérifier les champs saisis suivants :</p><ul><li class=\"" + errorType + "\">" + msg + "</li></ul></div>");
    } else {
        if (jQuery("#forgotPass fieldset .errorMsg ." + errorType).length == 0) {
            jQuery("#forgotPass fieldset .errorMsg ul").append("<li class=\"" + errorType + "\">" + msg + "</li>");
        }
    }
    jQuery("#forgotPass fieldset .errorMsg").show("highlight", {}, 500);
}

function hideErrorPass(errorType) {
    jQuery("#forgotPass fieldset").removeClass("error");
    jQuery("#forgotPass fieldset .errorMsg").remove();
}


// handling generic events on form items
function initError() {
    disableForm();
    jQuery("#register input[name^=civilite]").click(function() {
        hideError(this, ["mandatory", "correct"]);
    });
    checkRegisterForm();
}


// checking login fields

// Error messages
var mailError = "E-mail incorrect : Entrez de nouveau votre adresse e-mail.";
var passError = "Votre mot de passe n'est pas valide. Merci de le saisir de nouveau.";

function checkLoginForm() {

    jQuery("#login .loginBlock input").each(function(i) {

        switch (jQuery(this).attr("name")) {
            case "checkoutEmail":
                if (jQuery.trim(jQuery(this).val()).length > 0) {
                    var regexp = new RegExp(/^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$/);
                    if (!jQuery(this).val().match(regexp)) {
                        jQuery(this).parent().addClass("mandatory");
                        showErrorLogin("mailError", mailError);
                    } else {
                        jQuery(this).parent().removeClass("mandatory");
                        hideErrorLogin("mailError");
                    }
                } else {
                    jQuery(this).parent().addClass("mandatory");
                    showErrorLogin("mailError", mailError);
                }
                break;
            case "checkoutPass":
                if (jQuery.trim(jQuery(this).val()).length > 0) {
                    jQuery(this).parent().removeClass("mandatory");
                    hideErrorLogin("passError");
                } else {
                    jQuery(this).parent().addClass("mandatory");
                    showErrorLogin("passError", passError);
                }
                break;
        }
    });
    if (jQuery("#login fieldset .errorMsg").length == 0) {
        startLogin();
    }
    jQuery(this).blur();
    return false;
}

// checking recover pass field
function recoverPassForm() {

    jQuery("#forgotPass .loginBlock input").each(function(i) {

        switch (jQuery(this).attr("name")) {
            case "mdpOublie":
                if (jQuery.trim(jQuery(this).val()).length > 0) {
                    var regexp = new RegExp(/^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$/);
                    if (!jQuery(this).val().match(regexp)) {
                        jQuery(this).parent().addClass("mandatory");
                        showErrorPass("mailError", mailError);
                    } else {
                        jQuery(this).parent().removeClass("mandatory");
                        hideErrorPass("mailError");
                    }
                } else {
                    jQuery(this).parent().addClass("mandatory");
                    showErrorPass("mailError", mailError);
                }
                break;
        }
    });
    if (jQuery("#forgotPass fieldset .errorMsg").length == 0) {
        startRecoverPass();
    }
    jQuery(this).blur();
    return false;
}

//format Qas Adress (adress + complement d adress)
function formatQasAdress(param, adress, adressComp) {

    var tabAdress = new Array();
    var tab = param.split(" ");
    var count = 0;
    var maxLengthLit =  $("#"+adress).attr('maxlength');
    if(maxLengthLit ==null || isNaN(maxLengthLit) || (parseInt(maxLengthLit)<=0))
        maxLength = 30;
    else
        maxLength = parseInt(maxLengthLit);
    tabAdress[0] = "";
    tabAdress[1] = "";
    for (var i = 0; i < tab.length; i++) {
        count = count + tab[i].length + 1; //+1 pour l'espace entre les mots
        if (count < maxLength) {
            tabAdress[0] = tabAdress[0] + tab[i] + " ";
        }
        else {
            tabAdress[1] = tabAdress[1] + tab[i] + " ";
        }
    }
    if(jQuery.trim(tabAdress[1]).length == 0)
        tabAdress[0] = jQuery.trim(tabAdress[0]);
    $("#"+adress).val(tabAdress[0]);

    var tmp = $("#"+adressComp).val();
    if (jQuery.trim(tabAdress[1]).length > 0) {
        if (tmp != "" && jQuery.trim(tabAdress[1].toLowerCase()) != jQuery.trim(tmp.toLowerCase())) {
             $("#"+adressComp).val(jQuery.trim(tabAdress[1] + ", " + tmp));
        }
        else {
             $("#"+adressComp).val(jQuery.trim(tabAdress[1])); 
        }
    }
    return false;
}



// checking register fields
function checkRegisterForm() {
    if(jQuery(this).attr("name")!=null)
    // checking personal data and billing fields
    if (jQuery(this).hasClass("registerData")) {

        // declaring radio buttons status
        var checked = false;

        // checking input fields
        if (jQuery(this).attr("type") == "text" || jQuery(this).attr("type") == "password") {
            // checking radio buttons
            jQuery("#register input[name=civilite]").each(function(i) {
                if (jQuery(this).is(":checked")) {
                    checked = true;
                } else {
                    checked = false;
                }
            });
            if (checked == true) {
                hideError(jQuery("#register input[name=civilite]:eq(0)"), ["mandatory", "correct"]);
            } else if (checked == false && jQuery("#register .civilite").attr("class") == "civilite") {
                showError(jQuery("#register input[name=civilite]:eq(0)"), ["mandatory", "correct"]);
            }
            // text fields
            if (jQuery.trim(jQuery(this).val()).length == 0) {
                switch (jQuery(this).attr("name")) {
                    case "cdp":                      
                        showError(this, ["mandatoryCdp", "correctCdp"]);
                        break;
                    case "complementAdresse":
                    case "complementAdresseLivraison":
                    case "telfixe":
                    case "telmobile":
                        // do nothing
                        break;
                    case "ville":
                    case "villeLivraison":;
                        showError(this, ["mandatory", "correct"]);
                        break;
                    case "adresse":
                    case "adresseLivraison":
                         jQuery(this).siblings('em').text("Veuillez indiquer votre adresse");
                         showError(this, ["mandatory", "correct"]);
                    break;
                    default:
                        showError(this, ["mandatory", "correct"]);
                        break;
                }
            } 
            else {
                switch (jQuery(this).attr("name")) {

                    // email 
                    case "email":

                        var email = jQuery(this);
                        if (email.val() != $("#hiddenEmail").val()) {
                             email.parent().addClass("loading");
                            // Generating XML Output
                            var emailXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"usenewemail\" id=\"" + loginInscriptDebugg + "\"><email><![CDATA[" + email.val() + "]]></email></data>";

                            $("#hiddenEmail").val(email.val());
                            // Launching ajax request
                            $.ajax({
                                url: checkoutNameService,
                                data: emailXMLOutput,
                                beforeSend: function() { },
                                success: function(data) {
                                    switch (data.usenewemail.value) {
                                        // existing mail address     
                                        case "0":
                                            email.siblings("em").html("Un compte Cultura existe déjà avec cette adresse mail");
                                            showError(email, ["mandatory", "correct"]);
                                            break;
                                        // mail address libre     
                                        case "1":
                                            $.ajax({
                                                url: checkoutNameService,
                                                data: emailXMLOutput.replace("usenewemail", "verifQasEmail"),
                                                beforeSend: function() { },
                                                success: function(data) {
                                                    switch (data.verifQasEmail.value) {
                                                     
                                                        case "0": 
                                                            email.siblings("em").html("Email non valide");
                                                             // correct email with suggest    
                                                            if (data.suggests) {
                                                                $("#suggestEmail").fadeIn(1500).html(data.suggests);
                                                                jQuery("#suggestEmail input[type=radio]").bind('click', function() { 
                                                                   jQuery('#email').val(this.value).trigger('blur');
                                                                   if($("#hiddenEmail").val() == this.value)//user chose its own address in the list
                                                                    hideError(email, ["mandatory", "correct"]);
                                                                   $("#hiddenEmail").val(this.value);
                                                                   jQuery("#suggestEmail").hide("slow");  
                                                                 });

                                                                jQuery("#suggestEmail span.emailVal").bind('mouseover', function() { this.style.color = '#457DBB' })
                                                                .bind('mouseout', function() { this.style.color = '#505050' })
                                                                .bind('click', function() {   
                                                                    jQuery(this).prev().trigger("click"); 
                                                                 });
                                                            }
                                                            else {
                                                                email.siblings("em").html("Email non valide");
                                                             }
                                                            break;
                                                        // mail address ok     
                                                        case "1":
                                                            hideError(email, ["mandatory", "correct"]);
                                                            $("#suggestEmail").hide("slow");
                                                            break;
                                                        default:
                                                            break;
                                                    }
                                                },
                                                complete: function() {
                                                    email.parent().removeClass("loading");
                                                },
                                                error: function(theRequest, errorType, exceptionObject) { }
                                            });
                                            $("#suggestEmail").hide("slow");
                                             break;
                                        default:
                                            break;
                                    }
                                },
                                complete: function() {
                                   email.parent().removeClass("loading");
                                },
                                error: function(theRequest, errorType, exceptionObject) { }
                            });

                        }
                        else {
                            
                        }


                        break;

                    // zip code 
                    case "cdp":
                    case "cdpLivraison":
                        var classSuffixe = jQuery(this).attr("name").replace('cdp','');
                        if (jQuery("#pays"+classSuffixe).val() == "1") {
                            var myZip = jQuery(this).val();
                            if (isNaN(myZip) || myZip < 01000 || myZip > 97000 || myZip.length != 5) {
                                jQuery(this).parent().find('em').html("Code postal incorrect");
                                showError(this, ["mandatoryCdp", "correctCdp"]);
                            }
                            else {
                                var QASXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"getQasCity\" id=\"" + loginInscriptDebugg + "\"><zipcode><![CDATA[" + myZip + "]]></zipcode></data>";
                                jQuery(this).data('processing','1').parent().removeClass('correctCdp').removeClass('mandatoryCdp').addClass("loading");
                                
                                $.ajax({
                                    url: checkoutNameService,
                                    data: QASXMLOutput,
                                    beforeSend: function() {
                                        if(jQuery("#ville"+classSuffixe).data('zip') == null || jQuery("#ville"+classSuffixe).data('zip') != myZip)
                                            jQuery("#ville"+classSuffixe).data('zip',myZip);
                                         else
                                            return false;//prevent from repetitive task
                                       },
                                    success: function(data) {
                                        switch (data.getQasCity.value) {
                                            // city not found
                                            case "0":
                                                //unbind
                                                showError(jQuery('#cdp'+classSuffixe), ["mandatoryCdp", "correctCdp"]);
                                                jQuery("#ville"+classSuffixe).empty('');
                                                break;
                                            // city found
                                            case "1":
                                                hideError(jQuery("#cdp"+classSuffixe), ["mandatoryCdp", "correctCdp"]);
                                                jQuery("#ville"+classSuffixe).html(data.suggests);
                                                hideError(jQuery("#ville"+classSuffixe), ["mandatory", "correct"]);
                                                hideError(jQuery('#cdp'+classSuffixe), ["mandatoryCdp", "correctCdp"]);
                                                break;
                                            default:
                                                break;
                                        }
                                    },
                                    complete: function() {
                                       jQuery("#cdp"+classSuffixe).data('processing','0').parent().removeClass("loading");
                                       $("#adresse"+classSuffixe).trigger("keyup");//si formu. d'adresse ok, lance la verif qas
                                    },
                                    error: function(theRequest, errorType, exceptionObject) { }
                                });
                                	hideError(this,["mandatoryCdp","correctCdp"]);
                            }
                        } else {
                            hideError(this, ["mandatoryCdp", "correctCdp"]);
                        }
                        jQuery("select[name=pays"+classSuffixe+"]").bind("change", { zip: jQuery("#cdp"+classSuffixe) }, checkZip);
                        break;
                    // password 
                    case "password":
                        if (jQuery.trim(jQuery(this).val()).length < 6) {
                            showError(this, ["mandatory", "correct"]);
                        } else {
                            hideError(this, ["mandatory", "correct"]);
                        }
                        break;
                    // confirm password 
                    case "confirmPassword":
                        if (jQuery(this).val() != jQuery("input[name=password]").val()) {
                            showError(this, ["mandatory", "correct"]);
                        } else {
                            hideError(this, ["mandatory", "correct"]);
                        }
                        break;

                    // detail address 
                    case "complementAdresse":
                    case "complementAdresseLivraison":
                        // do nothing
                        break;
                    // phone 
                    case "telfixe":
                        // wiped out on 20081121 together with part of inputDirectCheck
                        /*if((isNaN(jQuery(this).val()) || (jQuery("#pays").val() == "1" && jQuery(this).val().length != 10) || (jQuery("#pays").val() != "1" && jQuery(this).val().length < 2)) && jQuery(this).parent().attr("class") != "mandatory"){
                        showError(this, ["mandatory", "correct"]);
                        }else{
                        hideError(this, ["mandatory", "correct"]);
                        }
                        ;*/
                        //do nothing
                        break;
                    case "villeLivraison":
                    case "ville":
                        hideError(this, ["mandatory", "correct"]);
                        break;
                        
                    // mobile phone 
                    case "telmobile":
                        // do nothing
                        break;
                        
                   case "adresse":
                   case "adresseLivraison":
                    hideError(this, ["mandatory", "correct"]);
                    jQuery(this).trigger("keyup");//si formu. d'adresse ok, lance la verif qas
                   break;   
                    // generic check 
                    default:
                        hideError(this, ["mandatory", "correct"]);
                        break;
                }
            }
        }
    }
    if (jQuery("#register input:checked[name=differenteAdresse]").val() == "0") {
        //console.log("ligne 1 manquant: "+jQuery("#register .mandatory").length+" < 9?, ok :"+jQuery("#register p[class*=correct]").length);
       //console.log("isQasAjaxProcessing()" +isQasAjaxProcessing());
        if (jQuery("#register .mandatory").length > 0 || jQuery("#register p[class*=correct]").length < 9 || isQasAjaxProcessing()) {
            disableForm();
        } else {
               //console.log("activation1 début");
            enableForm();
              //console.log("activation1 fin");
        }
    } else {
            //console.log("ligne 2 manquant: "+jQuery("#register .mandatory").length+" < 15 ?, ok :"+jQuery("#register p[class*=correct]").length);
            //console.log("isQasAjaxProcessing : "+isQasAjaxProcessing());
        if (jQuery("#register .mandatory").length > 0 || jQuery("#register p[class*=correct]").length < 15 || isQasAjaxProcessing()) {
            disableForm();
        } else {
              //console.log("activation2 début");
            enableForm();
              //console.log("activation2 fin");
        }
    }
}

//return if zipCode or adress are checking via QAS
function isQasAjaxProcessing()
{
    var v_return = false;
     jQuery("#adresse, #adresseLivraison, #cdp, #cdpLivraison").each(function(){
        if(jQuery(this).data('processing') != null && !isNaN(jQuery(this).data('processing')) && parseInt(jQuery(this).data('processing')) == 1)
         {
            v_return = true;
            return false; //we break;
         }
    });
    return v_return;
}

// checking direct input (for further changes in fields)
// some parts wiped out on 20081121 together with some of checkRegisterForm (to enable phone validation again, don't forget to increment length!)
function inputDirectCheck(obj) {
    var el = this;
    var parentClass = jQuery(el).parent().attr("class");
    if (jQuery.trim(jQuery(el).val()).length == 0 || jQuery(el).attr("name") == "email") {

         if (parentClass != null && (parentClass.indexOf("correct") > -1 || parentClass.indexOf("mandatory") > -1)) {
            if (parentClass.indexOf("correct") > -1 && (jQuery(el).attr("name") != "telfixe" && jQuery(el).attr("name") != "telfixeLivraison")) {
                if (jQuery(el).parent().hasClass("correct")) {
                    showPopinError(el, ["mandatory", "correct"]);
                } else {
                    showPopinError(el, ["mandatoryCdp", "correctCdp"]);
                }
            }
        }
    }
    else if (parentClass != null  && (jQuery(el).attr("name") == "ville" || jQuery(el).attr("name") == "villeLivraison"))
    {
        if(jQuery.trim(jQuery(el).val()).length > 0) {
            if (parentClass.indexOf("mandatory") > -1)
                showError(el, ["mandatory", "correct"]);
        }
        else  if (parentClass.indexOf("correct") < 0)
            hideError(el, ["mandatory", "correct"]);
    }
    
    if(obj != null && parentClass != null && obj.data.objArr != null) {
		for(var zipInd = 0;zipInd < obj.data.objArr.length; zipInd++)
		{
			var paramCheck = obj.data.objArr[zipInd];
			if(jQuery(el).attr("id") == paramCheck.zipId.replace('#',''))
			{
				if (parseInt($(paramCheck.countryId).val()) == 1) {
					var myZip = $(paramCheck.zipId).val();
					if (!isNaN(myZip) && myZip >= 01000 && myZip <= 97000 && myZip.length == 5) 
					   $(paramCheck.zipId).trigger('blur');//qas ajax
					else
					    showError(el, ["mandatoryCdp", "correctCdp"]);
				 }
			}
		}
    }
        
    //////////---------------------------///////////
    /*if(jQuery(this).attr("name") == "telfixe" && (isNaN(jQuery(this).val()) || (jQuery("#pays").val() == "1" && jQuery(this).val().length != 10) || (jQuery("#pays").val() != "1" && jQuery(this).val().length < 2))){
    if(jQuery(this).parent().attr("class") != "mandatory"){
    showError(this, ["mandatory", "correct"]);
    }			
    }else if(jQuery(this).attr("name") == "telfixeLivraison" && (isNaN(jQuery(this).val()) || (jQuery("#paysLivraison").val() == "1" && jQuery(this).val().length != 10) || (jQuery("#paysLivraison").val() != "1" && jQuery(this).val().length < 2))){
    if(jQuery(this).parent().attr("class") != "mandatory"){
    showError(this, ["mandatory", "correct"]);
    }
    }else{
    hideError(this, ["mandatory", "correct"]);
    enableForm();
    }*/
    //////////---------------------------///////////
    if (jQuery("#register input:checked[name=differenteAdresse]").val() == "0") {
        if (jQuery("#register .mandatory").length > 0 || jQuery("#register p[@class*=correct]").length < 9) {
            disableForm();
        } else {
            // enabling hitting enter for form submission
            triggerClick(jQuery(this), jQuery("#poursuivre"));
        }
    }
    else {
        if (jQuery("#register .mandatory").length > 0 || jQuery("#register p[@class*=correct]").length < 15) {
            disableForm();
        }
        else {
            triggerClick(jQuery(this), jQuery("#poursuivre"));
            // enabling hitting enter for form submission
            /*jQuery(this).keypress(function(e){
            if(e.keyCode == 13) {
            if(jQuery(this).attr("name") == "telfixe"){
            jQuery("#poursuivre").trigger("click");
            }
            if(jQuery(this).attr("name") == "telfixeLivraison"){
            jQuery("#poursuivre").trigger("click");
            }
            }
            });*/
        }
    }
    //si action sur un des champs d'adresse de facturation
    if(jQuery(el).attr("name") == 'ville' || jQuery(el).attr("name") == 'adresse'  || jQuery(el).attr("name") == 'cdp' || jQuery(el).attr("name") == 'pays' || jQuery(el).attr("name") == 'complementAdresse')
    { 
        //les modifications annulent les suggestions et le forceValide de 1
       jQuery('#forceValide').val(0); 
       if($("#suggestAdress").is(":visible")) { $("#suggestAdress").hide("slow"); }
      
     if(verifQasTimer != null) clearTimeout(verifQasTimer);

     verifQasTimer = setTimeout(function(){
         
    if (jQuery("#adresse").parents('p:first').hasClass("correct") && jQuery("#cdp").parents('p:first').hasClass("correctCdp") && parseInt(jQuery('#forceValide').val()) == 0 && jQuery.trim(jQuery("#ville option:selected").text()).length >0 && jQuery("#pays").val() == "1") {


        if (jQuery.trim($("#lastAdresse").val()) == jQuery.trim(jQuery("#adresse").val())
            && ($("#lastAdresse").data('qasCityChoice') == null || $("#lastAdresse").data('qasCityChoice') == $("#ville").val())
            && ($("#lastAdresse").data('qasComplementAdresseChoice') == null || $("#lastAdresse").data('qasComplementAdresseChoice') == $("#complementAdresse").val())
            && ($("#lastAdresse").data('qasCdpChoice') == null ||  $("#lastAdresse").data('qasCdpChoice') == $("#cdp").val())
        ) {
         jQuery('#forceValide').val(1);
       }

         jQuery("#adresse").data('processing','1').parent().removeClass('correct').removeClass('mandatory').addClass("loading");
         disableForm();
         var verifQasAdress = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"verifQasAdress\" id=\"" + loginInscriptDebugg + "\"><adress><![CDATA[" + jQuery("#adresse").val() + "]]></adress><detailadress><![CDATA[" + jQuery("#complementAdresse").val() + "]]></detailadress><zipcode><![CDATA[" + jQuery("#cdp").val() + "]]></zipcode><city><![CDATA[" + jQuery("#ville option:selected").text() + "]]></city><country><![CDATA[" + jQuery.trim(jQuery('#pays option:selected').text()) + "]]></country><force>"
         +jQuery('#forceValide').val()+"</force></data>";

        //Appel fonction pour verifier l'adresse de facturation via QAS//
        $.ajax({
            url: checkoutNameService,
            data: verifQasAdress,
            beforeSend: function() { },
            success: function(data) {
                switch (data.verifQasAdress.value) {
                    // existing address                           
                    case "0":
                        jQuery('#forceValide').val(1);
                         hideError($("#adresse"), ["loading", "correct"]);
                        //unbind
                        if (data.suggests) {
                            $("#suggestAdress").fadeIn(1500).html(data.suggests);
                            jQuery("div[id^=labelsuggest] span").bind('mouseover', function() { this.style.color = '#457DBB' })
                            .bind('mouseout', function() { this.style.color = '#505050' })
                            .bind('click', function() { jQuery(this).prev().trigger("click"); });
                           
                              jQuery("div[id^=labelsuggest] input[type=radio]").bind('click', function() {
                                $(this).unbind('click');
                                var suggestedAddr = $(this).nextAll('input[id^="suggAdresse"]').val();
                                formatQasAdress(suggestedAddr, 'adresse', 'complementAdresse');
                               
                                var cdp = $(this).nextAll('input[id^="suggZipcode"]').val();
                                var city = jQuery("#ville option:selected").text();
                                var result = $(this).nextAll('input[id^="city"]').val();
                                
                                jQuery('#cdp').val(cdp);
                                jQuery("#ville").data('zip', cdp);
                               
		                        if (jQuery.trim(result) != jQuery.trim(city)) {
		                            $("#ville option:selected").removeAttr("selected"); //remove any selected items
		                            if($("#ville option[@value='" + result + "']") != null)
		                            {
			                            $("#ville option[@value='" + result + "']").attr("selected", "selected");
			                        }
			                        else
			                        {
			                           $("#ville").html("<option value='" + result + "' selected>" + result + "</option>");
			                        }
		                        }
                                $('#forceValide').val(0);
                                refreshLastAddressData({type:'',qasAdresseChoice :$('#adresse').val(),
                                    qasCityChoice:city, qasComplementAdresseChoice:$("#complementAdresse").val(),
                                    qasCdpChoice :jQuery('#cdp').val() 
                                 });            
                                $("#suggestAdress").hide("slow");
                            });
                            jQuery("#adresse").bind("change", function() { jQuery("#forceValide").val(0); inputDirectCheck(); });
                            jQuery("#cdp").bind("change", function() { jQuery("#forceValide").val(0); inputDirectCheck(); });
                        }
                        break;

                    case "1":
                        //unbind
                        if (data.suggests) {
                           jQuery('#forceValide').val(1);
                           jQuery($("#adresse")).siblings('em').text("Votre attention est requise");
                           showError($("#adresse"), ["mandatory", "correct"]);
                            $("#suggestNum").show("slow").html(data.suggests).find("select").focus();
                            jQuery("#suggestNum select").bind('change', function() { 
                                var tmp = $('#adresse').val();
                                $('#adresse').val(this.options[this.selectedIndex].value + ' ' + tmp).trigger("keyup");//si formu. d'adresse ok, lance la verif qas
                                hideError($("#adresse"), ["mandatory", "correct"]);
                                $("#suggestNum").hide("slow"); 
                                jQuery('#forceValide').val(0); 
                                checkRegisterForm();
                             });
                            jQuery("#adresse").bind("change", function() { jQuery("#forceValide").val(0); inputDirectCheck(); });
                            jQuery("#cdp").bind("change", function() { jQuery("#forceValide").val(0); inputDirectCheck(); })
                        }
                        break;
                    // adresse incorrecte
                    case "3":
                        jQuery('#forceValide').val(0);
                        hideError($("#adresse"), ["loading", "correct"]);
                        //unbind
                        if (data.suggests) {
                            $("#suggestAdress").fadeIn(1500).html(data.suggests);
                            jQuery($("#adresse")).siblings('em').text("Cette adresse semble incorrecte");
                            showError($("#adresse"), ["mandatory", "correct"]);
                        }
                        break;

                    // address ok                          
                    case "2":
                        $("#suggestAdress").hide("slow");
                        $("#suggestNum").hide("slow");
                         jQuery('#forceValide').val(1);
                         hideError($("#adresse"), ["loading", "correct"]);
                        break;
                    default:
                        break;
                }
            },
            complete: function() {
                jQuery("#adresse").data('processing','0');//.parent().removeClass("loading");
                checkRegisterForm();//gestion du bouton de soumission à réactiver si ok
            },
            error: function(theRequest, errorType, exceptionObject) { }
        });
        }
        } 
        ,500);
    }
    //si action sur un des champs d'adresse de livraison
    else  if(jQuery(el).attr("name") == 'villeLivraison' || jQuery(el).attr("name") == 'adresseLivraison'  || jQuery(el).attr("name") == 'cdpLivraison' || jQuery(el).attr("name") == 'paysLivraison' || jQuery(el).attr("name") == 'complementAdresseLivraison')
    {
        //les modifications annulent les suggestions et le forceValide de 1
       jQuery('#forceValideLivraison').val(0); 
       if($("#suggestAdressLivraison").is(":visible")) { $("#suggestAdressLivraison").hide("slow"); }
       
     if(verifQasTimer != null) clearTimeout(verifQasTimer);

     verifQasTimer = setTimeout(function(){                
     //verification de l'adresse de livraison si identique via QAS 
     if (jQuery("#adresseLivraison").parents('p:first').hasClass("correct") && jQuery("#cdpLivraison").parents('p:first').hasClass("correctCdp") && parseInt(jQuery('#forceValideLivraison').val()) == 0 && jQuery.trim(jQuery("#villeLivraison option:selected").text()).length >0 && jQuery("#paysLivraison").val() == "1") {
 
      if (jQuery.trim($("#lastAdresseLivraison").val()) == jQuery.trim(jQuery("#adresseLivraison").val())
            && ($("#lastAdresseLivraison").data('qasCityChoice') == null || $("#lastAdresseLivraison").data('qasCityChoice') == $("#villeLivraison").val())
            && ($("#lastAdresseLivraison").data('qasComplementAdresseChoice') == null || $("#lastAdresseLivraison").data('qasComplementAdresseChoice') == $("#complementAdresseLivraison").val())
            && ($("#lastAdresseLivraison").data('qasCdpChoice') == null ||  $("#lastAdresseLivraison").data('qasCdpChoice') == $("#cdpLivraison").val())
        ) {
         jQuery('#forceValideLivraison').val(1);
       }
        jQuery("#adresseLivraison").data('processing','1').parent().removeClass('correct').removeClass('mandatory').addClass("loading");
        disableForm();
        var verifQasAdress = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"verifQasAdress\" id=\"" + loginInscriptDebugg + "\"><adress><![CDATA[" + jQuery("#adresseLivraison").val() + "]]></adress><detailadress><![CDATA[" + jQuery("#complementAdresseLivraison").val() + "]]></detailadress><zipcode><![CDATA[" + jQuery("#cdpLivraison").val() + "]]></zipcode><city><![CDATA[" + jQuery("#villeLivraison option:selected").text() + "]]></city><country><![CDATA[" + jQuery.trim(jQuery("#paysLivraison option:selected").text()) + "]]></country><force>"
        + jQuery('#forceValideLivraison').val()+"</force></data>";

        //Appel fonction pour verifier l'adresse de livraison via QAS//
        $.ajax({
            url: checkoutNameService,
            data: verifQasAdress,
            beforeSend: function() { },
            success: function(data) {
                switch (data.verifQasAdress.value) {
                    // existing address                    
                    case "0":
                        jQuery('#forceValideLivraison').val(1);
                        hideError($("#adresseLivraison"), ["loading", "correct"]);              
                        if (data.suggests) {

                            $("#suggestAdressLivraison").fadeIn(1500).html(data.suggests);
                            jQuery("#suggestAdressLivraison div[id^=labelsuggest] span").bind('mouseover', function() { this.style.color = '#457DBB' })
                            .bind('mouseout', function() { this.style.color = '#505050' })
                            .bind('click', function() { jQuery(this).prev().trigger("click"); });
                            
                            jQuery("#suggestAdressLivraison div[id^=labelsuggest] input[type=radio]").bind('click', function() {
                                $(this).unbind('click');
                                var suggestedAddr = $(this).nextAll('input[id^="suggAdresse"]').val();
                                formatQasAdress(suggestedAddr, 'adresseLivraison', 'complementAdresseLivraison');
                               
                                var cdp = $(this).nextAll('input[id^="suggZipcode"]').val();
                                var city = jQuery("#villeLivraison option:selected").text();
                                var result = $(this).nextAll('input[id^="city"]').val();
                                   
                                jQuery('#cdpLivraison').val(cdp);
                                jQuery("#villeLivraison").data('zip', cdp);
                                var city = jQuery("#villeLivraison option:selected").text();
                                var result = $(this).nextAll('input[id^="city"]').val();

		                        if (jQuery.trim(result) != jQuery.trim(city)) {
		                            $("#villeLivraison option:selected").removeAttr("selected"); //remove any selected items
		                            if($("#villeLivraison option[@value='" + result + "']") != null)
		                            {
			                            $("#villeLivraison option[@value='" + result + "']").attr("selected", "selected");
			                        }
			                        else
			                        {
			                           $("#villeLivraison").html("<option value='" + result + "' selected>" + result + "</option>");
			                        }
		                        }
                                jQuery('#forceValideLivraison').val(0);
                                refreshLastAddressData({type:'Livraison',qasAdresseChoice :$('#adresseLivraison').val(),
                                    qasCityChoice:city, qasComplementAdresseChoice:$("#complementAdresseLivraison").val(),
                                    qasCdpChoice :jQuery('#cdpLivraison').val() 
                                 });
                                $("#suggestAdressLivraison").hide("slow");
                            });
                            jQuery("#adresseLivraison").bind("change", function() { jQuery("#forceValideLivraison").val(0); inputDirectCheck(); });
                            jQuery("#cdpLivraison").bind("change", function() { jQuery("#forceValideLivraison").val(0); inputDirectCheck(); });
                            
                        }
                        break;

                    case "1":
                        //unbind
                        if (data.suggests) {
                            jQuery($("#adresseLivraison")).siblings('em').text("Votre attention est requise");
                            showError($("#adresseLivraison"), ["mandatory", "correct"]);
                            jQuery('#forceValideLivraison').val(1);
                            $("#suggestNumLivraison").show("slow");
                            $("#suggestNumLivraison").html(data.suggests);
                            jQuery("#suggestNumLivraison select").bind('change', function() { 
                                hideError($("#adresseLivraison"), ["mandatory", "correct"]);
                                var tmp = $('#adresseLivraison').val(); 
                                $('#adresseLivraison').val(this.options[this.selectedIndex].value + ' ' + tmp).trigger("keyup"); 
                               
                                $("#suggestNumLivraison").hide("slow"); 
                                jQuery('#forceValideLivraison').val(0);
                                checkRegisterForm();
                            });
                            jQuery("#adresseLivraison").bind("change", function() { jQuery("#forceValideLivraison").val(0); inputDirectCheck(); });
                            jQuery("#cdpLivraison").bind("change", function() { jQuery("#forceValideLivraison").val(0); inputDirectCheck(); });
                        }
                        break;
                    //adresse incorrecte
                    case "3":
                        jQuery('#forceValideLivraison').val(0);
                        hideError($("#adresseLivraison"), ["loading", "correct"]);
                        //unbind
                        if (data.suggests) {
                            $("#suggestAdressLivraison").fadeIn(1500).html(data.suggests);
                            jQuery($("#adresseLivraison")).siblings('em').text("Cette adresse semble incorrecte");
                            showError($("#adresseLivraison"), ["mandatory", "correct"]);
                        }
                        break;

                    // address ok                   
                    case "2":
                        $("#suggestAdressLivraison").hide("slow");
                        $("#suggestNumLivraison").hide("slow");
                         jQuery('#forceValideLivraison').val(1);
                         hideError($("#adresseLivraison"), ["loading", "correct"]);
                        break;
                    default:
                        break;
                }
            },
            complete: function() {
                jQuery("#adresseLivraison").data('processing','0');//.parent().removeClass("loading");
                checkRegisterForm();//gestion du bouton de soumission à réactiver si ok
            },
            error: function(theRequest, errorType, exceptionObject) { }
        });
        }
        } 
        ,500);
    }
    ///////// fin QAS 
    
}


function refreshLastAddressData(p)
{
    if(p.type!= null) {                          
        if(p.qasAdresseChoice != null)          
           $("#lastAdresse"+p.type).val(p.qasAdresseChoice);    
        if(p.qasCityChoice != null)                  
           $("#lastAdresse"+p.type).data('qasCityChoice',p.qasCityChoice);
        if(p.qasComplementAdresseChoice != null)  
           $("#lastAdresse"+p.type).data('qasComplementAdresseChoice', p.qasComplementAdresseChoice);
        if(p.qasCdpChoice != null)  
           $("#lastAdresse"+p.type).data('qasCdpChoice',p.qasCdpChoice); 
    }
 }  

//checking shipping data
function checkShippingData() {
    // disabling form submission
    //disableForm();

    // checking personal data and billing fields
    if (jQuery(this).hasClass("registerShippingData")) {

        // declaring radio buttons status
        var checked = false;

        // checking input fields
        if (jQuery(this).attr("type") == "text") {
            // checking radio buttons
            jQuery("#shippingBlock input[name=civiliteLivraison]").each(function(i) {
                if (jQuery(this).is(":checked")) {
                    checked = true;
                } else {
                    checked = false;
                }
            });
            if (checked == true) {
                hideError(jQuery("#shippingBlock input[name=civiliteLivraison]:eq(0)"), ["mandatory", "correct"]);
            } else if (checked == false && jQuery("#shippingBlock .civilite").attr("class") == "civilite") {
                showError(jQuery("#shippingBlock input[name=civiliteLivraison]:eq(0)"), ["mandatory", "correct"]);
            }
            //

            // text fields
            if (jQuery.trim(jQuery(this).val()).length == 0) {
                switch (jQuery(this).attr("name")) {
                    // zip code 
                    case "cdpLivraison":
                        showError(this, ["mandatoryCdp", "correctCdp"]);
                        break;
                    // detail address 
                    case "complementAdresseLivraison":
                        // do nothing
                        break;
                    // home phone 
                    case "telfixeLivraison":
                        // do nothing
                        break;
                    // mobile phone 
                    case "telmobileLivraison":
                        // do nothing
                        break;
                    // shipping address label 
                    case "intituleAdresseLivraison":
                        // do nothing
                        break;
                    case "adresseLivraison":
                         jQuery(this).siblings('em').text("Veuillez indiquer votre adresse de livraison");
                         showError(this, ["mandatory", "correct"]);
                    break;
                    default:
                        showError(this, ["mandatory", "correct"]);
                        break;
                }
            } else if (jQuery.trim(jQuery(this).val()).length > 0) {
                switch (jQuery(this).attr("name")) {

                    // code postal
                    case "cdpLivraison":
                        if (jQuery("#paysLivraison").val() == "1") {
                            var myZip = jQuery(this).val();
                            if (isNaN(myZip) || myZip < 01000 || myZip > 97000 || myZip.length != 5) {
                                jQuery(this).parent().find('em').html("Code postal incorrect");
                                showError(this, ["mandatoryCdp", "correctCdp"]);
                            } else {
                                jQuery(this).data('processing','1').parent().removeClass('correctCdp').removeClass('mandatoryCdp').addClass("loading");
                                var QASXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"getQasCity\" id=\"" + loginInscriptDebugg + "\"><zipcode><![CDATA[" + myZip + "]]></zipcode></data>";
    
                                $.ajax({
                                    url: checkoutNameService,
                                    data: QASXMLOutput,
                                    beforeSend: function() { 
                                    if(jQuery("#villeLivraison").data('zip') == null || jQuery("#villeLivraison").data('zip') != myZip)
                                            jQuery("#villeLivraison").data('zip',myZip);
                                         else
                                            return false;//prevent from repetitive task
                                    },
                                    success: function(data) {
                                        switch (data.getQasCity.value) {
                                            // city not found
                                            case "0":
                                                //unbind
                                                showError(jQuery("#cdpLivraison"), ["mandatoryCdp", "correctCdp"]);
                                                jQuery("#villeLivraison").empty('');
                                                break;
                                            // city found
                                            case "1":
                                                hideError(jQuery("#cdpLivraison"), ["mandatoryCdp", "correctCdp"]);
                                                jQuery("#villeLivraison").html(data.suggests);
                                                hideError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
                                                hideError(jQuery('#cdpLivraison'), ["mandatoryCdp", "correctCdp"]);
                                                break;
                                            default:
                                                break;
                                        }
                                    },
                                    complete: function() {
                                        jQuery("#cdpLivraison").data('processing','0').parent().removeClass("loading");
                                        $("#adresseLivraison").trigger("keyup");//si formu. d'adresse ok, lance la verif qas
                                    },
                                    error: function(theRequest, errorType, exceptionObject) { }
                                });
                                hideError(this, ["mandatoryCdp", "correctCdp"]);
                            }
                        }
                        else {
                            hideError(this, ["mandatoryCdp", "correctCdp"]);
                        }
                        jQuery("select[name=paysLivraison]").bind("change", { zip: jQuery("#cdpLivraison") }, checkZip);
                        break;

                    // detail address 
                    case "complementAdresseLivraison":
                        // do nothing
                        break;
                    // phone 
                    case "telfixeLivraison":
                        // wiped out on 20081121 together with part of inputDirectCheck
                        /*if(isNaN(jQuery(this).val()) || (jQuery("#paysLivraison").val() == "1" && jQuery(this).val().length != 10) || (jQuery("#paysLivraison").val() != "1" && jQuery(this).val().length < 2)){
                        showError(this, ["mandatory", "correct"]);
                        }else{
                        hideError(this, ["mandatory", "correct"]);
                        }
                        jQuery("select[name=paysLivraison]").bind("change", {phone:jQuery("#telfixeLivraison")},checkPhone);*/
                        // do nothing
                        break;
                    // mobile phone 
                    case "telmobileLivraison":
                        // do nothing
                        break;
                    // shipping address label 
                    case "intituleAdresseLivraison":
                        // do nothing
                        break;
                    // generic check 
                    default:
                        hideError(this, ["mandatory", "correct"]);
                        break;
                }
            } else {
               // hideError(this, ["mandatory", "correct"]);
            }
            //
       } else if (jQuery(this)[0].nodeName == "SELECT") { //select fields 
        
         if (jQuery.trim(jQuery(this).val()).length == 0) 
         {
            // checking select boxes
            switch (jQuery(this).attr("name")) {
                // shipping country
                case "paysLivraison":
                    //do nothing
                 break;
                case "villeLivraison":
                    showPopinError(this, ["mandatory", "correct"]);
                    break;
               default:break;
            }
          }
        }
    }

    //
    if (jQuery("#shippingBlock .mandatory").length > 0 || jQuery("#shippingBlock p[class*=correct]").length < 6) {
        disableForm();
    } else {
        checkRegisterForm();
    }
}

// checking zip onchange country
function checkZip(obj) {
    if (jQuery(this).val() == "1") {
        var myZip = obj.data.zip.val();
        if (isNaN(myZip) || myZip < 01000 || myZip > 97000 || myZip.length != 5) {
            showError(jQuery(obj.data.zip), ["mandatoryCdp", "correctCdp"]);
        } else {
            hideError(jQuery(obj.data.zip), ["mandatoryCdp", "correctCdp"]);
        }
    } else {
        hideError(jQuery(obj.data.zip), ["mandatoryCdp", "correctCdp"]);
    }
}

// checking phone onchange country
function checkPhone(obj) {
    var myPhone = obj.data.phone.val();
    if (jQuery(this).val() == "1") {
        if (isNaN(jQuery(myPhone)) || myPhone.length != 10) {
            showError(jQuery(obj.data.phone), ["mandatory", "correct"]);
        } else {
            hideError(jQuery(obj.data.phone), ["mandatory", "correct"]);
        }
    } else if (jQuery(this).val() != "1") {
        if (isNaN(myPhone) || myPhone.length < 2) {
            showError(jQuery(obj.data.phone), ["mandatory", "correct"]);
        } else {
            hideError(jQuery(obj.data.phone), ["mandatory", "correct"]);
        }
    }
}

// displaying error message
function showError(obj, status) {
    // showing main error box
    jQuery("#register .errorMsg").show("highlight", {}, 500);
    jQuery(obj).parent().removeClass(status[1]);
    jQuery(obj).parent().addClass(status[0]);
    jQuery(obj).siblings("em").show("highlight", {}, 500);
    disableForm();
}

// hiding error message
function hideError(obj, status) {
    jQuery(obj).parent().removeClass(status[0]);
    jQuery(obj).parent().addClass(status[1]);
    jQuery(obj).siblings("em").fadeOut(500);
    // hiding main error box
    if (jQuery("#register .mandatory").length == 0) {
        jQuery("#register .errorMsg").fadeOut(500);
    }
}

// disabling form submit
function disableForm() {
    jQuery(".register #register .validation .button").addClass("disabled");
    jQuery("#poursuivre").click(function() { return false; });
    jQuery("#poursuivre").unbind("click", startRegisterProcess);
}

function enableForm() {
    jQuery(".register #register .validation .button").removeClass("disabled");
    jQuery("#poursuivre").bind("click", startRegisterProcess);
}




/* CHECKING POPIN ADDRESS FORMS (shipping page) ///////////////////////////////// */
//checking shipping data
function checkPopinShippingData(param) {
    
    // checking personal data and billing fields
    if (jQuery(this).hasClass("shippingData")) {

        // declaring radio buttons status
        var checked = false;

        // checking input fields
        if (jQuery(this).attr("type") == "text") {
            // checking radio buttons
            jQuery("#shippingBlock input[name=civiliteLivraison]").each(function(i) {
                if (jQuery(this).is(":checked")) {
                    checked = true;
                } else {
                    checked = false;
                }
            });
            if (checked == true) {
                hidePopinError(jQuery("#shippingBlock input[name=civiliteLivraison]:eq(0)"), ["mandatory", "correct"]);
            } else if (checked == false && jQuery("#shippingBlock .civilite").attr("class") == "civilite") {
                showPopinError(jQuery("#shippingBlock input[name=civilite]:eq(0)"), ["mandatory", "correct"]);
            }
            //

            // text fields
            if (jQuery.trim(jQuery(this).val()).length == 0) {
                switch (jQuery(this).attr("name")) {
                    // zip code 
                    case "cdpLivraison":
                        showPopinError(this, ["mandatoryCdp", "correctCdp"]);
                        break;
                        
                    // detail address 
                    case "complementAdresseLivraison":
                    case "telmobileLivraison":
                    case "intituleAdresseLivraison":
                        // do nothing
                        break;
                    default:
                        showPopinError(this, ["mandatory", "correct"]);
                        break;
                }
            } else {
                switch (jQuery(this).attr("name")) {

                    // code postal 
                    case "cdpLivraison":
                        if (jQuery("#paysLivraison").val() == "1") {
                            var myZip = jQuery(this).val();
                            if (isNaN(myZip) || myZip < 01000 || myZip > 97000 || myZip.length != 5) {
                                jQuery(this).parent().find('em').html("Code postal incorrect");
                                showPopinError(this, ["mandatoryCdp", "correctCdp"]);
                            } else {
                                //get city with zipcode
                                var QASXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"getQasCity\" id=\"" + loginInscriptDebugg + "\"><zipcode><![CDATA[" + myZip + "]]></zipcode></data>";

                                $.ajax({
                                    url: checkoutNameService,
                                    data: QASXMLOutput,
                                    beforeSend: function() { },
                                    success: function(data) {
                                        switch (data.getQasCity.value) {
                                            // no city found     
                                            case "0":
                                                showError(jQuery("#cdpLivraison"), ["mandatoryCdp", "correctCdp"]);
                                                jQuery("#villeLivraison").empty();
                                                break;
                                            // city found
                                            case "1":
                                                jQuery("#villeLivraison").html(data.suggests);
                                                hideError(jQuery("#cdpLivraison"), ["mandatoryCdp", "correctCdp"]);
                                                hideError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
                                                break;
                                            default:
                                                break;
                                        }
                                    },
                                    complete: function() {
                                        //     hideError(this, ["mandatoryCdp", "correctCdp"]);
                                    },
                                    error: function(theRequest, errorType, exceptionObject) { }
                                });
                                	hidePopinError(this,["mandatoryCdp","correctCdp"]);
                            }
                        } else {
                            hidePopinError(this, ["mandatoryCdp", "correctCdp"]);
                        }
                        jQuery("select[name=paysLivraison]").bind("change", { zip: jQuery("#cdpLivraison") }, checkZip);
                        break;

                    // detail address 
                    case "complementAdresseLivraison":
                        // do nothing
                        break;
                    // phone 
                    case "telfixeLivraison":
                        if (isNaN(jQuery(this).val()) || (jQuery("#paysLivraison").val() == "1" && jQuery(this).val().length != 10) || (jQuery("#paysLivraison").val() != "1" && jQuery(this).val().length < 2)) {
                            showPopinError(this, ["mandatory", "correct"]);
                        } else {
                            hidePopinError(this, ["mandatory", "correct"]);
                        }
                        break;
                    // mobile phone 
                    case "telmobileLivraison":
                        // do nothing
                        break;
                    // shipping address label 
                    case "intituleAdresseLivraison":
                        // do nothing
                        break;
                    // generic check 
                    default:
                        hidePopinError(this, ["mandatory", "correct"]);
                        break;
                }
            }
            //
        } else if (jQuery(this)[0].nodeName == "SELECT") { //select fields 
        
         if (jQuery.trim(jQuery(this).val()).length == 0) 
         {
            // checking select boxes
            switch (jQuery(this).attr("name")) {
                // shipping country
                case "paysLivraison":
                   showError(this, ["mandatory", "correct"]);
                 break;
                case "villeLivraison":
                    showPopinError(this, ["mandatory", "correct"]);
                    break;
               default:break;
            }
          } else if(jQuery(this).attr("name") == "paysLivraison")
            {  
               hideError(this, ["mandatory", "correct"]);
            }
        }
    }

    //
    if (jQuery("#shippingBlock .mandatory").length > 0 || jQuery("#shippingBlock p[class*=correct]").length < 7) {
        disablePopinForm();
    } else {
        enablePopinForm(param.data.Guid, param.data.Action);
    }
}

// checking direct input (for further changes in fields)
function popinInputDirectCheck(obj) {
    var el = this;
    var parentClass = jQuery(el).parent().attr("class");

    if (parentClass != null && jQuery.trim(jQuery(el).val()).length == 0) {
        if ((parentClass.indexOf("correct") > -1 || parentClass.indexOf("mandatory") > -1)) {
            if (parentClass.indexOf("correct") > -1 && jQuery(el).attr("name") != "telfixeLivraison") {
                if (jQuery(el).parent().hasClass("correct")) {
                    showPopinError(el, ["mandatory", "correct"]);
                } else {
                    showPopinError(el, ["mandatoryCdp", "correctCdp"]);
                }
            }
            if (jQuery(".dialogArea .mandatory").length > 0 || jQuery(".dialogArea p[class*=correct]").length < 7) {
                disablePopinForm();
            }
        }
    } else if (parentClass != null && (jQuery.trim(jQuery(el).val()).length > 0) && parentClass.indexOf("correct") > -1 && jQuery(el).attr("name") == "telfixeLivraison") {
        var regexpTel = new RegExp(/^((\(\d{3,4}\)|\d{3,4}-)\d{4,9}(-\d{1,5}|\d{0}))|(\d{4,12})+$/);
        if (!jQuery(el).val().match(regexpTel)) {
            showPopinError(el, ["mandatory", "correct"]);
        }
        if (jQuery(".dialogArea .mandatory").length > 0 || jQuery(".dialogArea p[class*=correct]").length < 7) {
            disablePopinForm();
        }
    }

    if(obj != null && parentClass != null && obj.data.zipId != null && jQuery(el).attr("id") == obj.data.zipId.replace('#','')) {
        if (parseInt($(obj.data.countryId).val()) == 1) {
                var myZip = $(obj.data.zipId).val();
                if (!isNaN(myZip) && myZip >= 01000 && myZip <= 97000 && myZip.length == 5) 
                   $(obj.data.zipId).blur();//qas ajax
         } 
    }
}

// displaying error message
function showPopinError(obj, status) {
    // showing main error box
    jQuery("#register .errorMsg").show("highlight", {}, 500);
    jQuery(obj).parent().removeClass(status[1]);
    jQuery(obj).parent().addClass(status[0]);
    jQuery(obj).siblings("em").show("highlight", {}, 500);
    disablePopinForm();
}

// hiding error message
function hidePopinError(obj, status) {
    jQuery(obj).parent().removeClass(status[0]);
    jQuery(obj).parent().addClass(status[1]);
    jQuery(obj).siblings("em").fadeOut(500);
    // hiding main error box
    if (jQuery("#register .mandatory").length == 0) {
        jQuery("#register .errorMsg").fadeOut(500);
    }
}

// disabling form submit
function disablePopinForm() {
    jQuery("#register .validation .button").addClass("disabled");
    jQuery(".dialogArea #Valider").click(function() { return false; });
    jQuery(".dialogArea #Valider").unbind("click", newAddressProcess);
    jQuery(".dialogArea #Valider").unbind("click", submitUpdatedData);
}

function enablePopinForm(guid, action) {
    jQuery("#register .validation .button").removeClass("disabled");
    jQuery(".dialogArea #Valider").bind("click", { Guid: guid }, eval(action))
}








/* CHECKING POPIN ADDRESS FORMS (shipping page) ///////////////////////////////// */


/* END ERROR HANDLING FUNCTIONS /////////////////////////////// */



/* START CART EVENTS FUNCTIONS /////////////////////////////// */

// initializing cart
function initCart() {
    jQuery(".produits .giftBlock").hide();
    jQuery(".giftBlock .button").addClass("disabled");
    jQuery(".giftLink .supprGift").bind("click", resetGift);
    jQuery(".checkoutCartStatus").attr("value", "order");
}

// Updating order button//
function updateCart() {
    /*if(!jQuery(".ckeckoutCart").hasClass("reloadCart")){
    jQuery(".ckeckoutCart").fadeOut(500,function(){
    jQuery(this).addClass("reloadCart");
    jQuery(this).attr("value", "Recalculer mon panier");
    });
    jQuery(".ckeckoutCart").fadeIn(500);
			
    // update form action to send parameter for reloading cart or not
    var cartStatus = jQuery(".checkoutCartStatus").val();
    if(cartStatus == "order"){
    jQuery(".checkoutCartStatus").attr("value", "reload");
    }
    }else{
    jQuery(".ckeckoutCart").animate({ color: "#e9880d" }, 250).animate({ color: "#fff" }, 250);
			
    }*/
    // update form action to send parameter for reloading cart or not
    if (jQuery(".checkoutCartStatus").val() == "order") {
        jQuery(".checkoutCartStatus").attr("value", "reload");
        jQuery("#headerCart strong, .totalPrice label, .totalPrice strong").fadeOut(500);
        jQuery(".ckeckoutCart:not(.sumCart)").fadeOut(500, function() {
            jQuery(".ckeckoutCart:not(.sumCart)").addClass("disabled");
            jQuery(".ckeckoutCart:not(.sumCart)").click(function(event) {
                event.preventDefault();
            });
            jQuery(".ckeckoutCart").fadeIn(500);
        });
    }

}


// gift block related events //
function toggleGift() {
    jQuery(this.hash).toggle("blind", { direction: "vertical" }, 500);
    jQuery(this).toggleClass("active");
    jQuery(this).blur();
    return false;
}

function toggleGiftButton() {
    var parentBlock = jQuery(this).parents(".giftBlock");
    if (parentBlock.find("input").is(":checked")) {
        jQuery(parentBlock).find(".button").removeClass("disabled");
    } else {
        jQuery(parentBlock).find(".button").addClass("disabled");
    }
}
function toggleMsgButton() {
    var parentBlock = jQuery(this).parents(".giftBlock");
    if (jQuery(this).val() != "") {
        if (jQuery(this).val().length >= 250) {
            jQuery(this).val(jQuery(this).val().substring(0, 250));
        }
        jQuery(parentBlock).find(".button").removeClass("disabled");
    } else {
        jQuery(parentBlock).find(".button").addClass("disabled");
    }
}


function validGift() {
    var parentBlock = jQuery(this).parents(".giftBlock");
    if (parentBlock.find("input").is(":checked")) {
        parentBlock.prev().find(".giftLink").fadeOut(500, function() {
            jQuery(this).parents("dl").addClass("giftOk");
            jQuery(this).addClass("supprGift");
            jQuery(this).find(".btGift").toggleClass("active");
            jQuery(this).children(".btGift").hide();
            jQuery(this).append("Vous avez choisi un emballage cadeau pour ce produit<a href=\"/\" class=\"supprGift\">Supprimer</a>");
            jQuery(this).children(".supprGift").bind("click", resetGift);
            updateCart();
            jQuery(this).fadeIn(500);
        });
        parentBlock.hide("blind", { direction: "vertical" }, 500);
    }
    jQuery(this).blur();
    return false;
}

function validMsg() {
    var parentBlock = jQuery(this).parents(".giftBlock");
    if (jQuery.trim(parentBlock.find("textarea").val()).length > 0) {
        parentBlock.hide("blind", { direction: "vertical" }, 500);
    }
    jQuery(this).blur();
    return false;
}

function resetGift() {
    var parentBlock = jQuery(this).parents(".giftLink");
    parentBlock.parents("dl").next(".giftBlock").find("input").attr("checked", "");
    parentBlock.parents("dl").next(".giftBlock").find("textarea").attr("value", "");
    parentBlock.parents("dl").next(".giftBlock").find(".button").addClass("disabled");
    parentBlock.fadeOut(500, function() {
        var giftLink = jQuery(this).children(".btGift").clone();
        jQuery(this).empty();
        parentBlock.parents("dl").removeClass("giftOk");
        jQuery(this).removeClass("supprGift");
        jQuery(this).append(giftLink);
        jQuery(this).children(".btGift").show();
        jQuery(this).fadeIn(500);
        updateCart();
        jQuery(this).find(".btGift").bind("click", toggleGift);
    });
    jQuery(this).blur();
    return false;
}

// END gift block related events //	


// Handling Product quantity //

function productQuantity() {
    updateCart();
    var quantityInput = jQuery(this).siblings("input");
    var num = 1;
    if (jQuery(this).attr("class") == "quantityMore") {
        var moreQuantity = parseInt(quantityInput.val(), 0) + parseInt(num, 0);
        quantityInput.attr("value", moreQuantity);
    } else if (jQuery(this).attr("class") == "quantityLess") {
        var lessQuantity = parseInt(quantityInput.val(), 0) - parseInt(num, 0);
        if (parseInt(lessQuantity) >= 1) {
            quantityInput.attr("value", lessQuantity);
            jQuery(this).blur();
            return false;
        } else {
            jQuery(this).unbind("click", function() {
                jQuery(this).blur();
                return false;
            });
        }
    }
    jQuery(this).blur();
    return false;
}


// END Handling Product quantity //

// Handling Product deleting //
function eraseItemRow(event) {

    event.preventDefault();

    //remove LineItem
    var ProductGuid = jQuery(this).find(".produits input[type=hidden]").val();
    var xmlOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"deleteProductBasket\"><productguid><![CDATA[" + ProductGuid + "]]></productguid></data>";

    raiseEventOnBasket(cartNameService, xmlOutput);

    //manage avantage row addon
    var rowAnalyze = Math.round(jQuery("td.extraInfo.cartExtraInfo").attr("rowspan"));
    var myEvent = jQuery(this);

    jQuery(this).parents("tr").find("td, div").fadeOut(400);

    jQuery(this).parents("tr").fadeOut(500, function() {
       						 
        if (jQuery(this).attr("id") == "discountAddOn") {
           
            jQuery("td.extraInfo.cartExtraInfo").attr("rowspan", rowAnalyze - 1);
            // Modif Ben j
            jQuery(".discountStatus").val("0");
        }

        jQuery(".checkoutCartStatus").attr("value", "reload");
        jQuery(this).remove();
        //jQuery("form").submit();
       



        jQuery(this).blur();
    });
}
//

function raiseEventOnBasket(cartNameService, xmlOutput) {
    var basketArea = jQuery(".basketBox span");

    jQuery.ajax({
        url: cartNameService,
        data: xmlOutput,
        beforeSend: function(XMLHttpRequest) {
        },
        success: function(data, textStatus) {
            jQuery(basketArea).empty();
            jQuery(basketArea).append(data.TotalItems);
            jQuery(basketArea).parent().effect("pulsate", { times: 1 }, 500);

            /*Gestion du fond du panier selon la qté présente*/
            if (data.TotalItems > 0) {
                if (!jQuery(".basketBox").hasClass("highlight"))
                    jQuery(".basketBox").addClass("highlight");
            }
            else
                jQuery(".basketBox").removeClass("highlight");
        },
        complete: function(XMLHttpRequest, textStatus) {
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
        }
    });
}

/* END CART EVENTS FUNCTIONS /////////////////////////////// */



/* START SHIPPING MODE HANDLING /////////////////////////////// */

function initShipping() {
    //jQuery("#shippingMode input").attr("checked", "");
    jQuery("#addressReminder address[class]").hide();
    jQuery("#addressReminder select").next().show();
    /* reference zone value for address to handle page refreshing */
    zoneRef = jQuery("#addressReminder select").attr("class");
    jQuery("#addressReminder select").siblings("address").hide();
    jQuery("#addressReminder select").siblings("address").each(function(i) {
        if (jQuery(this).hasClass(jQuery("#addressReminder select").val())) {
            jQuery(this).show();
        }
    });

    triggerClick(jQuery("#shippingMode .relaisBlock #inputKiala"), jQuery("#shippingMode .relaisBlock #kialaRequest"));
    triggerClick(jQuery("#shippingMode .relaisBlock #inputSogep"), jQuery("#shippingMode .relaisBlock #sogepRequest"));
    triggerClick(jQuery("#shippingMode .relaisMagBlock #mag_relaisSearch"),jQuery("#shippingMode .relaisMagBlock #mag_btnSearch"));
    /* relais close link */
    jQuery("#shippingMode .relaisInner a.close").bind("click", function() {
        jQuery("#shippingMode .activateMode").removeAttr('style');
        jQuery("#shippingMode .relaisBlock, .relaisArea").fadeOut("normal");
        jQuery("#shippingMode .relaisMagBlock").parent().prev().show().prev().show();
        jQuery(this).blur();
        return false;
    });
	
	/*relais Magasin close link*/
     jQuery("#shippingMode .relaisMagInner a.close").bind("click", function() {
        jQuery("#shippingMode .relaisMagBlock, .relaisMagArea").fadeOut("normal");
        jQuery(this).blur();
        return false;
    });

	
    /* view all googleMap markers link */
    jQuery("#shippingMode .relaisBlock a.centerGMap").bind("click", function() {
        if (!v_GmapCanvas) return false;
        InitGMapCenter();
        HideGmapWindows();
        jQuery(this).removeClass('selected').blur();
        return false;
    });


    jQuery('#mag_relaisSearch').bind('focus',function(){
		jQuery('#mag_relaisSearch').val('');
	});	
	jQuery("#mag_btnSearch").bind("click", function() {
	
		if(jQuery.trim(jQuery('#mag_relaisSearch').val()).length>1 && jQuery('#mag_relaisSearch').val().indexOf('code postal')==-1)
		{    
            sendShortSearch(jQuery('#mag_relaisSearch').val());
		}
		else
            jQuery('#mag_relaisSearch').val('Saisissez une ville ou un code postal');
		return false;
	});	
	
    /* view default user relais link */
    bindDefaultRelaisAjax(true);
    /* sogep ajax search */
    bindSogepCity(true);
    /* kiala ajax search */
    bindKialaAjax(true);


    // open hours layer
    /*jQuery("#addressReminder #hoursLayer").hide();
    jQuery("#addressReminder #hoursLayer").prepend("<a href=\"#hoursLayer\" class=\"close\">fermer</a>");
    jQuery("#addressReminder #hoursLayer .close").click(function(){
    jQuery("#addressReminder #hoursLayer").fadeOut("normal");
    jQuery(this).blur();
    return false;
    });*/
}

function toggleShipping() {
    var v_modeLabel = jQuery(this).attr("id");
    jQuery("#shippingMode .activateMode").removeClass("activateMode").removeAttr('style');
    jQuery("#shippingMode .activate").removeClass("activate");
    jQuery(this).parents("tr").addClass("activate").next().removeAttr('style');

    if (jQuery(this).parents("td").prev('.labelLocation').length > 0) {
        jQuery(this).parents("td").prev('.labelLocation').addClass("activateMode")
        if (v_modeLabel.indexOf('relais') != -1)
            jQuery(this).parents("td").prev().css('border-bottom', '0px');
    } else {//chronopost
        jQuery(this).parents(":eq(1)").prevAll(".blankRow:first").next().find(".labelLocation").addClass("activateMode");
    }
    if (v_modeLabel.indexOf('relais') != -1) {
        if (jQuery(".relaisArea").hasClass('error')) {
            jQuery("#shippingMode .activate").next().find(".relaisBlock:first").find(".centerGMap").hide()
            .end().next().addClass('bottomCell');
        }
        jQuery("#shippingMode .relaisBlock, #shippingMode .relaisInner").show();
        jQuery(".relaisArea").show("fast", function() { initRelaisChooseEvents(v_modeLabel); });
        jQuery("#shippingMode .relaisMagBlock").parent().prev().hide().prev().hide();
    }
    else
    {
       jQuery("#shippingMode .relaisBlock, #shippingMode .relaisInner, .relaisArea").hide();
       jQuery("#shippingMode .relaisMagBlock").parent().prev().show().prev().show();
    }
    
    if (v_modeLabel == 'magasins') 
    {
        jQuery("#shippingMode .relaisMagBlock:not(.disabled), #shippingMode .relaisMagInner").show();
        jQuery(".relaisMagArea").show("fast", initRelaisMagChooseEvents);
    }
    else 
    {
        jQuery("#shippingMode .relaisMagBlock, .relaisMagArea").hide();
    }
    jQuery(this).blur();
}

/* Address changing */
function toggleAddress() {
    jQuery(this).siblings("address").hide();
    jQuery(this).siblings("address").each(function(i) {
        if (jQuery(this).hasClass(jQuery("#addressReminder select").val())) {
            jQuery(this).show();
            if (!jQuery(this).hasClass(zoneRef)) {
                var sentGuid = jQuery(this).attr("class").split(" ")[0];
                document.location.href = checkoutRedirectUrl + "?guid=" + sentGuid;
            }
        }
    });
    searchDefaultRelaisSecondProcess();
}

/* reseting relais zipCode input */
function resetInput() {
    var inputVal = "Code postal";
    if (jQuery(this).val() == inputVal)
        jQuery(this).val("");

    jQuery(this).blur(function() {
        if (jQuery.trim(jQuery(this).val()).length == 0) {
            jQuery(this).val(inputVal);
            jQuery(this).select();
        }
    });
}

/* highlighting shop address block */
function activeRelaisBlock(e) {
    if (!jQuery(this).hasClass('selected'))
        jQuery(this).addClass('selected').siblings().removeClass('selected');
    setCenterToRelais(jQuery(this));
    e.stopPropagation();
    jQuery(this).blur();
    return false;
}

/* modify kiala block */
function changeKiala() {
    jQuery("#shippingMode #kiala").trigger("click");
    jQuery(this).blur();
    return false;
}

/* toggling open hours block */
function showOpenHours() {
    jQuery(this.hash).fadeIn("slow");
    jQuery(this).blur();
    return false;
}

/* Ajax Relais Events */
function bindSogepAjax(active, doTrigger) {
    var v_el = jQuery("#shippingMode #sogepBlock #containerSogepCity #selectSogepCity");
    v_el.unbind("change").bind("change", active ? searchSogepRelaisProcess : function() { return false; });
    if (doTrigger)
        v_el.trigger("change");
}

function bindSogepCity(active) {
    jQuery("#shippingMode .relaisBlock #sogepRequest").unbind("click")
  .bind("click", active ? searchSogepCityProcess : function() { return false; });
}

function bindKialaAjax(active) {
    jQuery("#shippingMode .relaisBlock #kialaRequest").unbind("click")
  .bind("click", active ? searchKialaRelaisProcess : function() { return false; });
}

function bindDefaultRelaisAjax(active) {
    jQuery("#shippingMode .GMapToolsLink .myTopRelais").unbind("click")
  .bind('click', active ? searchDefaultRelaisProcess : function() { return false; });
}


/* START ////////// NEW ADDRESS CREATION PROCESS */

// Display Dialog box, depends on link reference
function createAddressPopin(parameters) {
    //get popin
    var myDialogURL = jQuery(this).attr("href");

    jQuery("#dialog").dialog({
        modal: true,
        resizable: false,
        draggable: true,
        autoOpen: false,
        width: "486px",
        overlay: {
            opacity: 0.7,
            background: "white"
        },
        title: parameters.data.Title,
        dialogClass: parameters.data.Theme,
        height: "auto",
        close: showhideSelect
    });

    //var myDialogURL = parameters.data.URL;
    jQuery("#dialog").load(myDialogURL, function() {
        // hiding search selectbox for IE6
        showhideSelect();
        jQuery("#dialog").dialog('open');

        jQuery("#register input[name^=civilite]").click(function() {
            hideError(this, ["mandatory", "correct"]);
        });
        
      jQuery("#paysLivraison").bind("change", function() {
            if (jQuery("#paysLivraison").val() != "1") {
               if (jQuery(".ville input#villeLivraison").length ==0)
                 {
                    jQuery(".ville select#villeLivraison").remove();
                    var newInput = jQuery("<input id='villeLivraison' name='villeLivraison' type='text' class='registerData shippingData'/>");//<em>Veuillez indiquer votre ville</em>
                    newInput.bind("blur", { Guid: "", Action: "newAddressProcess" }, checkPopinShippingData)
                    .bind("keyup", { zipId: "#cdpLivraison", countryId: "#paysLivraison" }, popinInputDirectCheck);
                    jQuery(".ville").append(newInput);
                 }
                 jQuery("#villeLivraison").triggerHandler("keyup");//simulate popinInputDirectCheck
            } 
            else {
                if (jQuery(".ville select#villeLivraison").length == 0)
                {
                    jQuery(".ville input#villeLivraison").remove();
                    var newSelectEl = jQuery("<select id='villeLivraison' name='villeLivraison' class='registerData shippingData' ></select>");
                   newSelectEl.bind("blur", { Guid: "", Action: "newAddressProcess" }, checkPopinShippingData);
                   jQuery(".ville").append(newSelectEl);
                }
                jQuery("#villeLivraison").triggerHandler("blur");//simulate checkPopinShippingData
                jQuery("#cdpLivraison").triggerHandler("keyup");//simulate pressing key on zipcode, if 5 chars existed, villeLivraison is filled by ajax
            }
        }).bind("change", { phone: jQuery("#telfixeLivraison") }, checkPhone);
                    

        jQuery(".ville input#villeLivraison").bind('blur', function() {
            if (jQuery(this).val().length == 0) {
                showError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
            } else {
                hideError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
            }
            jQuery(".ville input#villeLivraison").unbind();
        });
                        
        var transverseParam = { data: { Guid: "", Action: "newAddressProcess"} };
        checkPopinShippingData(transverseParam);
        // form check
        jQuery(".dialogArea input, .dialogArea select").bind("blur", { Action: "newAddressProcess" }, checkPopinShippingData);
        jQuery(".dialogArea input").bind("keyup", { zipId: "#cdpLivraison", countryId: "#paysLivraison" }, popinInputDirectCheck);
        
         //les modifications annulent les suggestions et le forceValide 1
        jQuery("#cdpLivraison, #adresseLivraison, #complementAdresseLivraison, #villeLivraison").bind("change", function() { 
            if($("#suggestAdress").is(':visible')) { 
                jQuery("#forceValide").val(0); 
                $("#suggestAdress").hide("slow");} 
         });
    });

    jQuery(this).blur();
    return false;
}

function newAddressProcess() {

    // on teste d'abord si l'intitulé de la nouvelle adresse est valide
    jQuery("#addressReminder select option").each(function(i) {
        if (jQuery(this).html().toLowerCase() == jQuery("input[name=intituleAdresseLivraison]").val().toLowerCase()) {
            //jQuery('.debugOutput code').append("erreur : l'intitulé de l'adresse est déjà existant" + "<br />");
            return false;
        } else {

            /* START ///////////// SHIPPING INFO */

            // on lance le processus de creation
            // data arrays
            var createAddressData = []; // general data array
            var gender = [];
            var misc = [];
            var sms = [];

            // handling gender //
            var genderData = jQuery("#shippingBlock input[name=civilite]").each(function(i) {
                if (jQuery(this).is(":checked")) {
                    gender.push(jQuery(this).val());
                }
            });
            // --- //

            // handling misc data (personal data, adress related data) //
            var miscData = jQuery(".shippingData").each(function(i) {
                misc.push(jQuery(this).val());
            });
            // --- //

            // handling SMS sends //
            if (jQuery("#suiviSmsLivraison").is(":checked")) {
                sms.push("1");
            } else {
                sms.push("0");
            };
            // --- //

            /* END ///////////// SHIPPING INFO */


            // Generating data array //
            createAddressData.push(gender, misc, sms);

            if (jQuery("#paysLivraison").val() != "1") {
                var tel = createAddressData[1][6];
                createAddressData[1][6] = jQuery("#villeLivraison").val();
                createAddressData[1][7] = tel;
            }

            // Generating XML Output
            var newAddressXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"createinfoaddress\" id=\"" + loginInscriptDebugg + "\"><shippinginfo><adressid><![CDATA[]]></adressid><gender><![CDATA[" + createAddressData[0][0] + "]]></gender><name><![CDATA[" + createAddressData[1][0] + "]]></name><firstname><![CDATA[" + createAddressData[1][1] + "]]></firstname><adress><![CDATA[" + createAddressData[1][2] + "]]></adress><detailadress><![CDATA[" + createAddressData[1][3] + "]]></detailadress><zipcode><![CDATA[" + createAddressData[1][5] + "]]></zipcode><city><![CDATA[" + createAddressData[1][6] + "]]></city><country><![CDATA[" + createAddressData[1][4] + "]]></country><phone><![CDATA[" + createAddressData[1][7] + "]]></phone><mobilephone><number><![CDATA[" + createAddressData[1][8] + "]]></number><sms><![CDATA[" + createAddressData[2][0] + "]]></sms></mobilephone><adressname><![CDATA[" + createAddressData[1][9] + "]]></adressname></shippinginfo></data>";

            if (jQuery.trim($("#lastAdresse").val()) == jQuery.trim(jQuery("#adresseLivraison").val()) || jQuery("#paysLivraison").val() != "1")
		        $('#forceValide').val(1);

             var verifQasAdress = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"verifQasAdress\" id=\"" + loginInscriptDebugg + "\"><adressid><![CDATA[]]></adressid><adress><![CDATA[" + createAddressData[1][2] + "]]></adress><detailadress><![CDATA[" + createAddressData[1][3] + "]]></detailadress><zipcode><![CDATA[" + createAddressData[1][5] + "]]></zipcode><city><![CDATA[" + jQuery("select[name=villeLivraison] option[value=" + createAddressData[1][6] + "]").html() + "]]></city><country><![CDATA[" + jQuery.trim(jQuery("select[name=paysLivraison] option[value=" + createAddressData[1][4] + "]").html()) + "]]></country><force>"
             +$('#forceValide').val()+"</force></data>";

            popinQasCheckNSetAdresseProcess({QasXMLOutput : verifQasAdress, AddUpdateXMLOutput : newAddressXMLOutput, Guid : '', dataArray : createAddressData });
       
            jQuery(this).blur();
            return false;
        }
    });
}

/* END ////////// NEW ADDRESS CREATION PROCESS */

/* START ////////// popinQasCheckNSetAdresse PROCESS */

function popinQasCheckNSetAdresseProcess(parameters) {

             var addressData = parameters.dataArray;
             //Appel fonction pour verifier l'adresse saisie via QAS//
            $.ajax({
                url: checkoutNameService,
                data: parameters.QasXMLOutput,
                beforeSend: function() { },
                success: function(data) {
                    switch (data.verifQasAdress.value) {
                        // existing address                
                        case "0":
                            $('#forceValide').val(1);
                            //unbind
                            if (data.suggests) {

                                $("#suggestAdress").fadeIn(1500).html(data.suggests);
                                jQuery("div[id^=labelsuggest] span").bind('mouseover', function() { this.style.color = '#457DBB' })
                                    .bind('mouseout', function() { this.style.color = '#505050' })
                                    .bind('click', function() { jQuery(this).prev().trigger("click"); });
                            
			                    jQuery("div[id^=labelsuggest] input[type=radio]").bind('click', function() {
			                        $(this).unbind('click');
			                        var suggestedAddr = $(this).nextAll('input[id^="suggAdresse"]').val();
                                    formatQasAdress(suggestedAddr, 'adresseLivraison', 'complementAdresseLivraison');
                                    $("#lastAdresse").val(suggestedAddr);
                                    jQuery('#cdpLivraison').val($(this).nextAll('input[id^="suggZipcode"]').val());
                                    
			                        var city = jQuery("#villeLivraison option:selected").text();
			                        var result = $(this).nextAll('input[id^="city"]').val();
			                        if (jQuery.trim(result) != jQuery.trim(city)) {
			                            $("#villeLivraison option:selected").removeAttr("selected"); //remove any selected items
			                            if($("#villeLivraison option[@value='" + result + "']") != null)
			                            {
				                            $("#villeLivraison option[@value='" + result + "']").attr("selected", "selected");
				                        }
				                        else
				                        {
				                           $("#villeLivraison").html("<option value='" + result + "' selected>" + result + "</option>");
				                        }
			                        }
			                        
			                       $('#forceValide').val(0);
			                       $("#suggestAdress").hide("slow");
			                    });
                            }
                            return false;
                            break;

                        case "1":
                            //unbind
                            if (data.suggests) {
                                 $('#forceValide').val(1);
                                 $("#suggestNum").show("slow").html(data.suggests).find("select").focus();
                                 jQuery("#suggestNum select").bind('change', function() { 
				                        var tmp = $('#adresseLivraison').val();
				                        $('#adresseLivraison').val(this.options[this.selectedIndex].value + ' ' + tmp); 
				                        $("#suggestNum").hide("slow"); 
                                        jQuery('#forceValide').val(0); 
                                 });

                            }
                            return false;
                            break;

                        case "3":
                            $('#forceValide').val(0);
                            //unbind
                            if (data.suggests)
                                $("#suggestAdress").fadeIn(1500).html(data.suggests);
                            return false;
                            break;


                        // address ok               
                        case "2":

                            $("#suggestAdress").hide("slow");
                            $("#suggestNum").hide("slow");
////                            jQuery('#forceValide').val(1);
////                            hideError($("#adresse"), ["loading", "correct"]);

                            // Launching ajax request
                                /// create JSON Format expected from server ///
                                /*
                                {
         
                                createAddress: {
                                value: "",
                                guid: "",
                                zone: ""
                                }
                                }
                                */     
                                
                                 /// update JSON Format expected from server ///
                                /*
                                updateAddress {
                                address: {
                                value: "",
                                shippinginfo: {
                                adressname: "",
                                addressid: "",
                                gender: "",
                                name: "",
                                firstname: "",
                                adress: "",
                                detailadress: "",
                                zipcode: "",
                                city: "",
                                country: "",
                                phone: "",
                                mobilephone: {
                                mobilenumber: "",
                                sms: ""
                                }
                                }
                                }
                                }
                                */
  
                            $.ajax({
                                url: checkoutNameService,
                                data: parameters.AddUpdateXMLOutput,
                                beforeSend: function() { },
                                success: function(data) {
                                    var resultData =  parameters.Guid != '' ?  data.updateAddress : data.createAddress;

                                    switch (resultData.value) {
                                        case "0":
                                            var checkoudRedirectUrlBis = "Authentification.aspx?ReturnUrl=Shipping.aspx";
                                            jQuery('#shippingBlock fieldset:first').html("<p class='error'>Veuillez vous identifier :<br/><br/> vous allez être redirigé dans 4 secondes vers la page d'identification. <a href='" + checkoudRedirectUrlBis + "' title='Cliquez ici pour s'authentifier maintenant' target='_self'>Cliquez ici pour s'authentifier maintenant</a></p>");
                                            window.setTimeout(function() { document.location.href = checkoudRedirectUrlBis }, '4000');
                                            break;
                                        case "-1":
                                            jQuery('#shippingBlock fieldset:first').html("<p class='error'>Nous sommes désolés, une erreur est survenue, <br/><br/>veuillez <a href='Shipping.aspx' target='_self' title='Veuillez cliquer ici'>relancer cette page</a> et réessayer votre nouvelle adresse souhaitée.</p>")
                                            break;
                                        case "1":
                                            // Getting country label
                       
                                            var country = jQuery("select[name=paysLivraison] option[value=" + addressData[1][4] + "]").html();
                                            var city = addressData[1][4] == 1 ? jQuery("select[name=villeLivraison] option[value=" + addressData[1][6] + "]").html()
                                                        : jQuery("input#villeLivraison").val();
                                            jQuery("#dialog").empty().dialog('close');
                                            if(parameters.Guid != '')//update
                                            {
                                                 if (zoneRef != resultData.zone) { 
                                                    document.location.href = checkoutRedirectUrl + "?guid=" + parameters.Guid;
                                                 }
                                                 else {
                                                    jQuery("select[name=adressList] option[value=" + parameters.Guid + "]").html(addressData[1][9]);
                                                    jQuery("#addressReminder address[class*=" + parameters.Guid + "]").empty();
                                                    jQuery("#addressReminder address[class*=" + parameters.Guid + "]").append("<strong>" + addressData[1][1] + " " + addressData[1][0] + "</strong>" + addressData[1][2] + (addressData[1][3] != "" ? "<br />" + addressData[1][3]:"") +  "<br />" + addressData[1][5] + " " + city + "<br />" + country);
                                                }
                                            }
                                            else
                                            {
                                                if (zoneRef != resultData.zone) {
                                                    document.location.href = checkoutRedirectUrl + "?guid=" + resultData.guid;
                                                 }
                                                else {
                                                    jQuery("select[name=adressList]").append("<option value=\"" + resultData.guid + "\" selected=\"selected\" class=\"" + resultData.zone + "\">" + addressData[1][9] + "</option>");
                                                    jQuery("select[name=adressList]").siblings("address").hide();
                                                    jQuery(".addressAction").before("<address class=\"" + resultData.guid + " " + resultData.zone + "\"><strong>" + addressData[1][1] + " " + addressData[1][0] + "</strong>" + addressData[1][2] 
                                                    + (addressData[1][3] != "" ? "<br />" + addressData[1][3]:"") + "<br />" + addressData[1][5] + " " + city + "<br />" + country + "</address>");
                                                }
                                            }
                                          
                                            break;
                                        default:
                                            break;
                                    }
                                },
                                complete: function() {
                                    //on rajoute des events si besoin
                                },
                                error: function(theRequest, errorType, exceptionObject) { }
                            });

                            break;
                        default:
                            break;
                    }
                },
                complete: function() {

                },
                error: function(theRequest, errorType, exceptionObject) { }
            });
}

/* END ////////// popinQasCheckNSetAdresse PROCESS */

/* START ////////// UPDATE ADDRESS PROCESS */

function updateAddressProcess(parameters) {

    // recuperation du GUID de l'adresse
    var addressGUID = jQuery("#addressReminder select").val();
  
    //get popin
    var myDialogURL = jQuery(this).attr("href");

    // Generating XML Output
    var getInfoXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"getinfoaddress\" id=\"" + loginInscriptDebugg + "\"><shippinginfo><adressid><![CDATA[" + addressGUID + "]]></adressid></shippinginfo></data>";


    // Launching ajax request

    /// JSON Format expected from server ///
    /*
    {
    address: {
    value: "",
    shippinginfo: {
    adressname: "",
    addressid: "",
    gender: "",
    name: "",
    firstname: "",
    adress: "",
    detailadress: "",
    zipcode: "",
    city: "",
    country: "",
    phone: "",
    mobilephone: {
    mobilenumber: "",
    sms: ""
    }
    }
    }
    }
    */

    $.ajax({
        url: checkoutNameService,
        data: getInfoXMLOutput,
        success: function(data) {
            switch (data.address.value) {
                case "0":
                    break;
                case "1":
                    // popin launch
                    jQuery("#dialog").dialog({
                        modal: true,
                        resizable: false,
                        draggable: true,
                        autoOpen: false,
                        width: "486px",
                        overlay: {
                            opacity: 0.7,
                            background: "white"
                        },
                        title: "Modifier une de vos adresses de livraison",
                        dialogClass: "style1",
                        height: "auto",
                        close: showhideSelect
                    });
                    
                     // getting address GUID
                     var addressGuid = data.address.shippinginfo.addressid;
                     var transverseParamAction = "submitUpdatedData";
                        
                    jQuery("#dialog").load(myDialogURL, function() {
                        // hiding search selectbox for IE6
                        showhideSelect();
                        jQuery("#dialog").dialog('open');
                        // populating popin form fields
                        populatePopinForm(data);
                        
                         jQuery("#register input[name^=civilite]").click(function() {
                            hidePopinError(this, ["mandatory", "correct"]);
                        });
                        
                        if(jQuery(".dirtyAddressDesc:visible").length > 0){
                            jQuery("#paysLivraison").prepend("<option value='' disabled=\"disabled\">Pays à changer ("+jQuery("#addressReminder address[class*=" + data.address.shippinginfo.addressid + "]").find('.country').text()+")</option>").val('');
                            showError(jQuery("#paysLivraison"), ["mandatory", "correct"]);
	                     }
	                     else if(data.address.shippinginfo.country != jQuery("#paysLivraison").val())
	                     {
	                        //invalid saved country, the default countryid 1 was preselected
	                         jQuery("##paysLivraison").prepend("<option value='' disabled=\"disabled\"></option>").val('');
	                         showError(jQuery("#paysLivraison"), ["mandatory", "correct"]);
	                     }
			                     
                        // testing fields validity on popin loading
                        jQuery(".dialogArea input, .dialogArea select").each(function(i) {
                            if (jQuery.trim(jQuery(this).val()).length > 0) {
                                switch (jQuery(this).attr("name")) {
                                    case "cdpLivraison":
                                        hideError(this, ["mandatoryCdp", "correctCdp"]);
                                        break;
                                    case "paysLivraison":
                                    case "complementAdresseLivraison":
                                    case "telmobileLivraison":
                                    case "suiviSmsLivraison":
                                    case "intituleAdresseLivraison":
                                        // do nothing
                                        break;
                                    default:
                                        hidePopinError(this, ["mandatory", "correct"]);
                                        break;
                                }
                            }
                        });

                        jQuery("#paysLivraison").bind("change", { Guid: data.address.shippinginfo.addressid, Action: "submitUpdatedData" }, function() {
                            jQuery("#forceValide").val(0);
                            if(jQuery("#paysLivraison").val().length > 0) {
                                $("#suggestAdress").hide("slow");
                                hideError(jQuery("#paysLivraison"), ["mandatory", "correct"]);
                                //hide suggest
                                if (jQuery("#paysLivraison").val() != "1") {
                                   if (jQuery(".ville input#villeLivraison").length ==0)
                                     {
                                        jQuery(".ville select#villeLivraison").remove();
                                        var newInput = jQuery("<input id='villeLivraison' name='villeLivraison' type='text' class='registerData shippingData'/>");//<em>Veuillez indiquer votre ville</em>
                                        newInput.bind("blur", { Guid: addressGuid, Action: transverseParamAction }, checkPopinShippingData)
                                        .bind("keyup", { zipId: "#cdpLivraison", countryId: "#paysLivraison" }, popinInputDirectCheck);
                                        jQuery(".ville").append(newInput);
                                     } 
                                     jQuery("#villeLivraison").triggerHandler("keyup");//simulate popinInputDirectCheck
                                } 
                                else {
                                    if (jQuery(".ville select#villeLivraison").length == 0)
                                    {
                                        jQuery(".ville input#villeLivraison").remove();
                                        var newSelectEl = jQuery("<select id='villeLivraison' name='villeLivraison' class='registerData shippingData' ></select>");
                                       newSelectEl.bind("blur", { Guid: addressGuid, Action: transverseParamAction }, checkPopinShippingData);
                                       jQuery(".ville").append(newSelectEl);
                                    }
                                    jQuery("#villeLivraison").triggerHandler("blur");//simulate checkPopinShippingData
                                    jQuery("#cdpLivraison").triggerHandler("keyup");//simulate pressing key on zipcode, if 5 chars existed, villeLivraison is filled by ajax
                                }
                             }
                        }).bind("change", { phone: jQuery("#telfixeLivraison") }, checkPhone);

                        jQuery(".ville input#villeLivraison").bind('blur', function() {
                            if (jQuery("#villeLivraison").val().length == 0) {
                                showError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
                            } else {
                                hideError(jQuery("#villeLivraison"), ["mandatory", "correct"]);
                            }
                            jQuery(".ville input#villeLivraison").unbind();
                        });
                       
                        var transverseParam = { data: { Guid: addressGuid, Action: transverseParamAction} };
                        checkPopinShippingData(transverseParam);
                        // form check
                        jQuery(".dialogArea input, .dialogArea select").bind("blur", { Guid: addressGuid, Action: transverseParamAction }, checkPopinShippingData);
                        jQuery(".dialogArea input").bind("keyup", { zipId: "#cdpLivraison", countryId: "#paysLivraison"}, popinInputDirectCheck);
 
                        //les modifications annulent les suggestions le forceValide 1
				        jQuery("#cdpLivraison, #adresseLivraison, #complementAdresseLivraison, #villeLivraison").bind("change", function() { 
				            if($("#suggestAdress").is(':visible')) { 
				                jQuery("#forceValide").val(0); 
				                $("#suggestAdress").hide("slow");} 
				         });
				       });
                    break;
                default: break;
            }
        },
        complete: function() { },
        error: function(theRequest, errorType, exceptionObject) { }
    });
    jQuery(this).blur();
    return false;
}

function searchSogepRelaisProcess() {
    bindSogepAjax(false);
    var searchSogepRelaisXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"sogeprelaissearch\"><zipcode>";
    searchSogepRelaisXMLOutput += jQuery("#shippingMode #sogepBlock #inputSogep").val() + "</zipcode><city>" + jQuery(this).val() + "</city></data>";

    $.ajax({
        url: "Ajax/AjaxRelais.aspx",
        data: searchSogepRelaisXMLOutput,
        dataType: "json",
        processData: false,
        beforeSend: function() { },
        success: function(json) {
            jQuery(".relaisArea #blockL :first").fadeOut('fast', function() {
                jQuery(this).replaceWith(json.relaisListHtml).fadeIn('fast');
                initRelaisChooseEvents('Sogep');
                loadRelaisFromJson(json, jQuery("#shippingMode #sogepBlock"));
                jQuery("#shippingMode #sogepBlock #inputSogep").val(jQuery("#shippingMode #sogepBlock #inputSogep").attr('rel').split('_')[1]);
                bindSogepAjax(true, false);
            });
        },
        error: function() { jQuery("#shippingMode #sogepBlock #inputSogep").val(jQuery("#shippingMode #sogepBlock #inputSogep").attr('rel').split('_')[1]); bindSogepAjax(true, false); }
    });
}

function searchKialaRelaisProcess() {
    var myZip = jQuery("#shippingMode #kialaBlock .relaisInner #inputKiala").val();
    if (jQuery.trim(myZip).length == 5 && !isNaN(myZip) && myZip >= 01000 && myZip <= 97000) {
        bindKialaAjax(false);
        jQuery(this).blur();
        jQuery("#shippingMode #kialaBlock .relaisInner .badZipCode span").hide();
        var searchKialaRelaisXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"kialarelaissearch\"><zipcode>";
        searchKialaRelaisXMLOutput += jQuery.trim(myZip);
        searchKialaRelaisXMLOutput += "</zipcode><date>" + (new Date().toLocaleString()) + "</date></data>";

        $.ajax({
            url: "Ajax/AjaxRelais.aspx",
            data: searchKialaRelaisXMLOutput,
            dataType: "json",
            processData: false,
            beforeSend: function() { },
            success: function(json) {
                jQuery(".relaisArea #blockL :first").fadeOut('fast', function() {
                    jQuery(this).replaceWith(json.relaisListHtml).fadeIn('fast');
                    initRelaisChooseEvents('Kiala');
                    loadRelaisFromJson(json, jQuery("#shippingMode #kialaBlock"));
                    bindKialaAjax(true);
                });
            },
            error: function() { bindKialaAjax(true); }
        });
    }
    else
        jQuery("#shippingMode #kialaBlock .relaisInner .badZipCode span").show();
    return false;
}

function searchDefaultRelaisSecondProcess() {
    //relais affiché
    if (jQuery(".relaisMode").is(":visible") && jQuery("#shippingMode .activate").next().find(".relaisBlock:visible .GMapToolsLink").length > 0) {
        jQuery(".relaisBlock .GMapToolsLink span.labelShippingAddress").html(jQuery("#addressReminder select option:selected").text());
        jQuery("#shippingMode .activate").next().children(".relaisBlock:first").find(".GMapToolsLink .myTopRelais").trigger('click');
    }
}

function searchDefaultRelaisProcess() {
    bindDefaultRelaisAjax(false);
    jQuery(this).removeClass('selected').blur();
    jQuery("#shippingMode #sogepBlock #containerSogepCity").empty();
    var searchDefaultRelaisXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"";
    searchDefaultRelaisXMLOutput += (jQuery("#shippingMode .mode input:checked:first").attr('id').replace('relais', '')).toLowerCase();
    searchDefaultRelaisXMLOutput += "defaultrelais\"><defaultaddressid>" + jQuery("#addressReminder select[name=adressList]").val();
    searchDefaultRelaisXMLOutput += "</defaultaddressid><date>" + (new Date().toLocaleString()) + "</date></data>";

    $.ajax({
        url: "Ajax/AjaxRelais.aspx",
        data: searchDefaultRelaisXMLOutput,
        dataType: "html",
        processData: false,
        beforeSend: function() { },
        success: function(htmlData) {
            var v_scriptLimit1 = htmlData.toString().indexOf('<script');
            var v_scriptLimit2 = htmlData.toString().indexOf('</script>') + 9;
            var v_htmlInsert = jQuery(htmlData.toString().substring(0, v_scriptLimit1) + htmlData.toString().substring(v_scriptLimit2));

            jQuery(".relaisArea #blockL :first").fadeOut('fast', function() {

                jQuery(this).replaceWith(v_htmlInsert.find("#blockL :first"));
                jQuery(".relaisArea").attr('class', v_htmlInsert.attr('class'));

                if (jQuery(".relaisArea").hasClass("error")) {
                    jQuery("#relaisMap").fadeOut('fast');
                    jQuery("#shippingMode .activate").next().children(".relaisBlock:first").find(".GMapToolsLink .centerGMap").hide().end().next().addClass('bottomCell');
                }
                else {
                    var v_scriptData = jQuery(htmlData.toString().substring(v_scriptLimit1), v_scriptLimit2).text();
                    jQuery("#relaisMap").fadeIn('fast', function() { eval(v_scriptData); });
                    jQuery("#shippingMode .activate").next().children(".relaisBlock:first").find(".GMapToolsLink .centerGMap").show().end().next().removeClass('bottomCell');
                }
                jQuery(this).fadeIn('fast');

                initRelaisChooseEvents(jQuery("#shippingMode .mode input:checked:first").attr('id'));
                bindDefaultRelaisAjax(true);
            });
        },
        error: function() { bindDefaultRelaisAjax(true); }
    });
    return false;
}

function searchSogepCityProcess() {
    jQuery("#shippingMode #sogepBlock #containerSogepCity").empty();
    jQuery(this).blur();
    var myZip = jQuery("#shippingMode #sogepBlock #inputSogep").val();

    if (jQuery.trim(myZip).length == 5 && !isNaN(myZip) && myZip >= 01000 && myZip <= 97000) {
        bindSogepCity(false);
        var searchSogepCityXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"sogepgetcity\"><zipcode>" + myZip + "</zipcode></data>";
        var loadingArea = jQuery("#shippingMode #sogepBlock #containerSogepCity");
        /// Xml Format expected from server ///
        /*
        <data><error>1|Erreur survenue</error>
        <html><![CDATA[<select id="selectSogepCity" size="1"><option value="Paris">Paris</option></select>]]></html></data>
        */
        jQuery(loadingArea).html("<div class='dataReminder'><p class='loadingMessage'><img src='medias/img/bg_loader.gif' /></p></div>");
        jQuery(loadingArea).children(".dataReminder").fadeIn("fast", function() {
            // Launching ajax request
            $.ajax({
                url: "Ajax/AjaxRelais.aspx",
                data: searchSogepCityXMLOutput,
                dataType: "xml",
                beforeSend: function() { },
                success: function(data) {
                    var xmlNode = jQuery(data);
                    var resultStateArr = xmlNode.find("error").text().split('|');
                    switch (parseInt(resultStateArr[0])) {
                        case 0:
                            jQuery(loadingArea).children(".dataReminder").fadeOut("fast", function() {
                                jQuery("#shippingMode #sogepBlock #containerSogepCity")
                    .html(xmlNode.find("html").text());
                                jQuery("#shippingMode #sogepBlock #inputSogep").val(myZip).attr('rel', 'lastZip_' + myZip);
                                bindSogepAjax(true, true);
                                bindSogepCity(true);
                            });
                            break;

                        default:
                            jQuery("#shippingMode #sogepBlock #containerSogepCity").html(resultStateArr[1]);
                            bindSogepCity(true);
                            break;
                    }
                },
                error: function() { bindSogepCity(true); }
            });
        });
        return false;
    }
    else
        jQuery("#sogepBlock #containerSogepCity").append(jQuery("<div/>").addClass('noResult').html("Code postal incorrect"));
}

/* submit updated data function */

function populatePopinForm(data) {

    // Gender
    jQuery("#shippingBlock input[name=civilite]").each(function(i) {
        if (jQuery(this).val() == data.address.shippinginfo.gender) {
            jQuery(this).attr("checked", "checked");
        }
    });

    // Misc data (name, firstname, address, zipcode, city, country, phone, mobile phone, address name)
    jQuery("#shippingBlock .shippingData").each(function(i) {
        if (jQuery(this).attr("name") == "nomLivraison") { jQuery(this).val(data.address.shippinginfo.name); }
        else if (jQuery(this).attr("name") == "prenomLivraison") { jQuery(this).val(data.address.shippinginfo.firstname); }
        else if (jQuery(this).attr("name") == "adresseLivraison") { jQuery(this).val(data.address.shippinginfo.adress); }
        else if (jQuery(this).attr("name") == "complementAdresseLivraison") { jQuery(this).val(data.address.shippinginfo.detailadress); }
        else if (jQuery(this).attr("name") == "cdpLivraison") { jQuery(this).val(data.address.shippinginfo.zipcode); }

        else if (jQuery(this).attr("name") == "villeLivraison") {
            if (data.address.shippinginfo.country == 1) {
                if (jQuery(".ville select#villeLivraison").length == 0) {
                    jQuery(".ville input#villeLivraison").remove();
                    jQuery(".ville").append("<select id='villeLivraison' name='villeLivraison' class='registerData shippingData'></select>");
                }
                jQuery("#villeLivraison").html("<option value='" + data.address.shippinginfo.city + "' selected>" + data.address.shippinginfo.city + "</option>");
            } 
            else 
            {
                if (jQuery(".ville input#villeLivraison").length ==0) {
                    jQuery(".ville select#villeLivraison").remove();
                    jQuery(".ville").append("<input id='villeLivraison' name='villeLivraison' type='text' class='registerData shippingData'/>");//<em>Veuillez indiquer votre ville</em>
                }
                jQuery("#villeLivraison").val(data.address.shippinginfo.city);
            }
        }
       
        else if (jQuery(this).attr("name") == "paysLivraison") {
            jQuery(this).find("option").each(function(i) {
                if (jQuery(this).val() == data.address.shippinginfo.country) {
                    jQuery(this).attr("selected", "selected");
                }
            });
        }
        else if (jQuery(this).attr("name") == "telfixeLivraison") { jQuery(this).val(data.address.shippinginfo.phone); }
        else if (jQuery(this).attr("name") == "telmobileLivraison") { jQuery(this).val(data.address.shippinginfo.mobilephone.mobilenumber); }
        else if (jQuery(this).attr("name") == "intituleAdresseLivraison") { jQuery(this).val(data.address.shippinginfo.adressname); }
    });

    // SMS
    if (data.address.shippinginfo.mobilephone.sms == 1) {
        jQuery("#shippingBlock input[name=suiviSmsLivraison]").attr("checked", "checked");
    }
}

function submitUpdatedData(parameters) {
    /* START ///////////// SHIPPING INFO */
 
    // data arrays
    var updateAddressData = []; // general data array
    var gender = [];
    var misc = [];
    var sms = [];

    // handling gender //
    var genderData = jQuery("#shippingBlock input[name=civilite]").each(function(i) {
        if (jQuery(this).is(":checked")) {
            gender.push(jQuery(this).val());
        }
    });
    // --- //

    // handling misc data (personal data, adress related data) //
    var miscData = jQuery(".shippingData").each(function(i) {
        misc.push(jQuery(this).val());
    });
    // --- //

    // handling SMS sends //
    if (jQuery("#suiviSmsLivraison").is(":checked")) {
        sms.push("1");
    } else {
        sms.push("0");
    };
    // --- //

    /* END ///////////// SHIPPING INFO */


    // Generating data array //
    updateAddressData.push(gender, misc, sms);

    //if (jQuery("#paysLivraison").val() != "1") {
    //    var tel = updateAddressData[1][6];
    //    updateAddressData[1][6] = jQuery("#villeLivraison").val();
    //    updateAddressData[1][7] = tel;
    //}

    // Generating XML Output
    var updateAddressXMLOutput = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"updateinfoaddress\" id=\"" + loginInscriptDebugg + "\"><shippinginfo><adressid><![CDATA[" + parameters.data.Guid + "]]></adressid><gender><![CDATA[" + updateAddressData[0][0] + "]]></gender><name><![CDATA[" + updateAddressData[1][0] + "]]></name><firstname><![CDATA[" + updateAddressData[1][1] + "]]></firstname><adress><![CDATA[" + updateAddressData[1][2] + "]]></adress><detailadress><![CDATA[" + updateAddressData[1][3] + "]]></detailadress><zipcode><![CDATA[" + updateAddressData[1][5] + "]]></zipcode><city><![CDATA[" + updateAddressData[1][6] + "]]></city><country><![CDATA[" + updateAddressData[1][4] + "]]></country><phone><![CDATA[" + updateAddressData[1][7] + "]]></phone><mobilephone><number><![CDATA[" + updateAddressData[1][8] + "]]></number><sms><![CDATA[" + updateAddressData[2][0] + "]]></sms></mobilephone><adressname><![CDATA[" + updateAddressData[1][9] + "]]></adressname></shippinginfo></data>";

    if (jQuery.trim($("#lastAdresse").val()) == jQuery.trim(jQuery("#adresseLivraison").val()) || jQuery("#paysLivraison").val() != "1" ) {
        $('#forceValide').val(1);
    }

    var verifQasAdress = "<?xml version=\"1.0\" encoding=\"utf-8\"?><data name=\"verifQasAdress\" id=\"" + loginInscriptDebugg + "\"><adressid><![CDATA[" +  parameters.data.Guid + "]]></adressid><adress><![CDATA[" + updateAddressData[1][2] + "]]></adress><detailadress><![CDATA[" + updateAddressData[1][3] + "]]></detailadress><zipcode><![CDATA[" + updateAddressData[1][5] + "]]></zipcode><city><![CDATA[" + jQuery("select[name=villeLivraison] option[value=" + updateAddressData[1][6] + "]").html() + "]]></city><country><![CDATA[" + jQuery.trim(jQuery("select[name=paysLivraison] option[value=" + updateAddressData[1][4] + "]").html()) + "]]></country><force>"
    +$('#forceValide').val()+"</force></data>";

    popinQasCheckNSetAdresseProcess({QasXMLOutput : verifQasAdress, AddUpdateXMLOutput : updateAddressXMLOutput, Guid : parameters.data.Guid, dataArray : updateAddressData });

    jQuery(this).blur();
    return false;
}


/* END ////////// UPDATE ADDRESS PROCESS */



/* END CARD SELECTION /////////////////////////////// */
function addDiscount() {
    var myDiscountSelector = jQuery("#discountType2").val();

    var rowAnalyze = Math.round(jQuery("td.extraInfo.cartExtraInfo").attr("rowspan"));
    var addOnPresence = jQuery("#discountAddOn");

    if (myDiscountSelector != "0") {

        if (!addOnPresence.length > 0) {

            jQuery("td.extraInfo.cartExtraInfo").attr("rowspan", rowAnalyze + 1);
            //console.log(rowAnalyze+1);
            jQuery("td.extrasShip.clearBorder").parent().before("<tr id='discountAddOn'><td colspan='2' class='extras'>Votre avoir </td><td headers='prixTTC' class='outline' id='discountValue'>- " + myDiscountSelector + " &euro;</td><td class='outline suppr'><a href='/' class='deleteItem'><img src='medias/img/checkout/delete.png' alt='Supprimer le produit' /></a></td></tr>");
            // Ajout par Ben j 
            //jQuery("td.extrasShip.clearBorder").parent().before("<tr id='discountAddOn'><td colspan='2' class='extras'>Votre avoir </td><td headers='prixTTC' class='outline' id='discountValue'>- "+myDiscountSelector+" &euro;</td><td class='outline suppr'><a href='/' class='deleteItem'><img src='medias/img/checkout/delete.png' alt='Supprimer le produit' /></a></td></tr>");		
            jQuery(".discountStatus").val(myDiscountSelector);
            updateCart();
            // Suppression de la ligne d'avoir initiale
            jQuery("#lineAssetToRemove1").attr("style", "display:none");
            jQuery("#lineAssetToRemove2").attr("style", "display:none");
            jQuery("#lineAssetToRemove3").attr("style", "display:none");
            // Fin
            jQuery(".deleteItem").bind("click", eraseItemRow);
        } else {

            jQuery("#discountAddOn #discountValue").html("- " + myDiscountSelector + "&euro;");

        }
    }
    return false;
}

function clearGoogleMap() {
    if (gmarkers) {
        jQuery.each(gmarkers, function(i) { gmarkers[i].setMap(null); });
        gmarkers = [];
    }
    HideGmapWindows();
}

function HideGmapWindows() {
    if (gtooltip) jQuery.each(gtooltip, function(t) { gtooltip[t].close(); }); gtooltip = [];
}

function setCenterToRelais(p_el) {
    var attrArr;
    if (p_el.find('.chooseRelais a').attr('rel') && (attrArr = p_el.find('.chooseRelais a').attr('rel').split('_')).length == 2) {
        //v_GmapCanvas.setCenter(gmarkers[attrArr[1]].getPosition());
        v_GmapCanvas.setZoom(13);
        google.maps.event.trigger(gmarkers[attrArr[1]], "click");
    }
}

function initRelaisChooseEvents(p_relaisLabel) {
    if (p_relaisLabel == 'Sogep' || p_relaisLabel == 'Kiala' || p_relaisLabel.indexOf('relais') != -1) {
        if (!v_GmapCanvas) loadRelaisCanvas(v_tmpJsonExtraData); //first loading;
        jQuery(".relaisArea #blockL .relaisList li .chooseRelais a").bind("click", function() {
            var v_attrDataArr = jQuery(this).attr('id').split('_');
            jQuery("#__EVENTTARGET").val(v_attrDataArr[0]);
            jQuery("#__EVENTARGUMENT").val(v_attrDataArr[1]);
            jQuery("#default" + p_relaisLabel.replace('relais', '') + "Id").val(v_attrDataArr[1]);
            jQuery(".activateMode").removeAttr('style').find('.relaisName').removeAttr('style')
      .html(jQuery(this).parent().prev().find('label:first').html())
      .attr('title', jQuery(this).parent().prev().find('label:first').text());
            jQuery("#shippingMode .relaisBlock, .relaisArea").fadeOut("slow");
            jQuery("#shippingMode .relaisMagBlock").parent().prev().show().prev().show();
            jQuery("#shippingMode .relaisBlock .error").remove();
            return false;
        });

        jQuery(".relaisArea #blockL .relaisList li").bind("click", activeRelaisBlock);

        v_userDefaultRelaisId = jQuery("#default" + p_relaisLabel.replace('relais', '') + "Id");

        if (v_userDefaultRelaisId.length && v_userDefaultRelaisId.val().length > 0)
            jQuery(".relaisArea #blockL .relaisList li.relais_" + v_userDefaultRelaisId.val()).trigger("click");

        jQuery(".relaisArea #blockL .relaisList li address a").click(function() {
            jQuery(this).blur().parents('li').trigger('click');
            return false;
        });
    }
}

function sogepTrackingShipProcess() {
    jQuery("table.expedition a[rel*=relaisTracking_5").unbind('click', sogepTrackingShipProcess)
  .bind('click', function() { return false; });
    jQuery(this).blur();
    jQuery("table.expedition #relaisShippingState").fadeOut().empty();
    var v_attrArr = jQuery(this).attr('rel').split('_')[1];
    v_attrArr = v_attrArr.split('|');

    $.ajax({
        url: "Ajax/AjaxRelaisTracking.aspx",
        data: "shipCode=" + v_attrArr[0] + "&colisNum=" + v_attrArr[1] + "&customerLastName=" + v_attrArr[2] + "&orderId=" + v_attrArr[3],
        dataType: "html",
        processData: true,
        beforeSend: function() { },
        success: function(htmlData) {
            jQuery("table.expedition #relaisShippingState").fadeIn('slow', function() {
                jQuery("table.expedition a[rel*=relaisTracking_5").unbind('click').bind('click', sogepTrackingShipProcess);
            }).html(htmlData)
      .find("#headerLinkCloseShipingState").bind('click', function() {
          jQuery(this).blur(); jQuery("table.expedition #relaisShippingState").fadeOut(); return false;
      })
        },
        error: function() {
            jQuery("table.expedition a[rel*=relaisTracking_5").unbind('click').bind('click', sogepTrackingShipProcess);
        }
    });
    return false;
}

// ----------------------------
// ! ///// DOCUMENT READY START //////////
// ----------------------------

jQuery(document).ready(function() {
    /* Register and login functions */
    initForm();
    initError();
    jQuery("#startRegister").bind("click", startRegister);
    jQuery(".showPassLayer").bind("click", showPassLayer);
    jQuery(".hidePassLayer").bind("click", hidePassLayer);
    jQuery(".hideInfoLayer").bind("click", hideInfoLayer);
    jQuery(".newAdress #differenteAdresseNon").attr("checked", "checked"); // to correct Mozilla's default behaviour
    /* checking register form fields */
    jQuery("#register input:not('.suggestAdress')").bind("keyup", { objArr : [{ zipId: "#cdp", countryId: "#pays" },{ zipId: "#cdpLivraison", countryId: "#paysLivraison" }]}, inputDirectCheck);
    jQuery("#register input:not([name=differenteAdresse]), #register select").bind("blur", checkRegisterForm);

    /* checking login form fields */
    jQuery("#identification #checkoutLogin").bind("click", checkLoginForm);
    jQuery("#identification #requestPass").bind("click", recoverPassForm);
	
    /* Cart functions and events */
    initCart();
    jQuery(".giftBlock input").bind("click", toggleGiftButton);
    jQuery(".giftBlock textarea").bind("keyup", toggleMsgButton);
    jQuery(".btGift").bind("click", toggleGift);
    jQuery("button[id^=validCadeau]").bind("click", validGift);
    jQuery("button[id^=validMsg]").bind("click", validMsg);
    jQuery("#cart a[class^=quantity]").bind("click", productQuantity);
    jQuery(".deleteItem").bind("click", eraseItemRow);
    if (jQuery("#shippingMode").length) {
        /* Shipping */
        initShipping();
        jQuery("#shippingMode .mode input").bind("click", toggleShipping);
        /* Shipping - Automatic display for shipping purpose, depends on selected shipping input */
        jQuery("#shippingMode .mode input:checked:first").click();

        jQuery("span.labelShippingAddress").html(jQuery("#addressReminder select option:selected").text());
        jQuery("#addressReminder select").bind("change", toggleAddress);
        // edit existing shipping address
        jQuery("#addressReminder .editAddress .dialogBox").bind("click", updateAddressProcess);
        // create new shipping address
        jQuery("#addressReminder .addNewAddress .dialogBox").bind("click", { Title: "Créer une nouvelle adresse de livraison", Theme: "style1" }, createAddressPopin);

        jQuery("#shippingMode #kialaBlock #inputKiala, #shippingMode #sogepBlock #inputSogep").bind("click", resetInput);

    }
    else if (jQuery('#Y_account').length) {
        jQuery("table.expedition").find("a[rel*=relaisTracking_5]").bind('click', sogepTrackingShipProcess)
	 .end().find("#relaisShippingState").fadeOut();
    }
    //jQuery("#addressReminder .changeKiala a").bind("click", changeKiala);
    // right side open hours
    //jQuery("#addressReminder .openHours a").bind("click", showOpenHours);
    /* // */
    jQuery(".addDiscount").bind("click", addDiscount);
    /* IE tooltip*/
    jQuery(".shipping #shippingMode td.relaisBlock .GMapToolsLink").find('.tooltip').hover(
	    function() {
	        jQuery(this).children(".bubble").show();
	    }, function() {
	        jQuery(this).children(".bubble").hide();
	    }).end().find('a').click(function() { return false; });
});


// ----------------------------
// ! ///// DOCUMENT READY END //////////
// ----------------------------


