// decoupage variables get (search string) en tableau [][nom]=valeur
function parseGetVars( search ) {
    var getVars = new Array();
    var qString = unescape(search.substring(1));
    var pairs = qString.split(/\&/);
    for (var i in pairs) {
        var nameVal = pairs[i].split(/\=/);
        getVars[nameVal[0]] = nameVal[1];
    } 
    return getVars;
}

// retourne objet{ top, left } (2 floats)
function calculerOffsetCentreFenetre() {
    var windowJQuery = $(window);
    var top = windowJQuery.scrollTop() + windowJQuery.height()/2;
    var left = windowJQuery.scrollLeft() + windowJQuery.width()/2;
    return { top: top, left: left };
}

function genererVoileFenetre() {
    var out =
        '<div ' +
            'id="voileFenetre" ' +
            'style="' +
                'position: absolute; ' +
                'z-index: 998; ' +
                'background-color: #999; ' +
                'top: 0; ' +
                'left: 0; ' +
                'width: ' + $(document).width() + 'px; ' +
                'height: ' + $(document).height() + 'px; ' +
                'filter: alpha(opacity=0); ' +
                'opacity: 0; ' +
                'display: none; ' +
            '" ' +
        '>' +
        '</div>'
    ;
    return out;
}

function afficherVoileFenetre( callbackFunction ) {
    $("#voileFenetre").fadeTo( "fast", 0.8, callbackFunction );
}
function cacherVoileFenetre() {
    $("#voileFenetre").fadeOut( "fast" );
}


function genererConteneurMessage() {
    var out =
        '<div ' + 
            'id="conteneurMessage" ' +
            'style="' +
                'position: absolute; ' +
                'z-index: 999; ' +
                'background-color: white; ' +
                'border: 2px solid #341c03; ' +
                'padding: 0; ' +
                'top: 0; ' +
                'left: 0; ' +
                'width: 544px; ' +
                'display: none; ' +
            '" ' +
        '>' + 
        '</div>'
    ;
    return out;
}

function remplacerContenuConteneurMessage( contenu ) {
    $("#conteneurMessage").empty().prepend( contenu );
}

function calculerTailleConteneurMessage() {
    var conteneurMessageJQuery = $("#conteneurMessage");
    var width = conteneurMessageJQuery.width();
    var height = conteneurMessageJQuery.height();
    return { width: width, height: height };
    
}

function calculerOffsetConteneurMessageCentreSurFenetre() {
    var offsetCentreFenetre = calculerOffsetCentreFenetre();
    var tailleConteneurMessage = calculerTailleConteneurMessage();
    var top = offsetCentreFenetre.top - tailleConteneurMessage.height/2;
    var left = offsetCentreFenetre.left - tailleConteneurMessage.width/2;
    if (top < 0) top = 0;
    if (left < 0) left = 0;
    return { top: top, left: left };
}

function centrerConteneurMessage() {
    var offset = calculerOffsetConteneurMessageCentreSurFenetre();
    $("#conteneurMessage").css( 
        { "top": offset.top, "left": offset.left } 
    );
}

function afficherConteneurMessage() {
    $("#conteneurMessage").fadeIn( "fast" );
}

function cacherConteneurMessage( callbackFunction ) {
    $("#conteneurMessage").fadeOut( "fast", callbackFunction );
}


function ajouterProduitDepuisLien( objetLien, callbackFunction ) {
    var parametres = extraireParametresAjoutProduitDepuisLien( objetLien );
    ajouterProduit( parametres, callbackFunction );
}

function extraireParametresAjoutProduitDepuisLien( objetLien ) {
    var getVars = parseGetVars( objetLien.search );
    var parametres = {
        la: getVars["la"], 
        code: getVars["code"], 
        qte: getVars["qte"] 
    };
    return parametres;
}

function ajouterProduitDepuisFormulaire( objetFormulaire, callbackFunction ) {
    var parametres = 
        extraireParametresAjoutProduitDepuisFormulaire( objetFormulaire )
    ;
    ajouterProduit( parametres, callbackFunction );
}

function extraireParametresAjoutProduitDepuisFormulaire( objetFormulaire ) {
    var parametres = {
        la: objetFormulaire.la.value, 
        code: objetFormulaire.code.value, 
        qte: objetFormulaire.qte.value 
    };
    return parametres;
}

function ajouterProduit( parametres, callbackFunction ) {
    $.get( 
        "/ajax/ajout_produit.php", 
        parametres,
        callbackFunction
    );
}

function retourAjoutProduit( messageDeRetour ) {
    if (messageDeRetour.length != 0) {
        mettreAJourMiniPanier();
        remplacerContenuConteneurMessage( messageDeRetour );
        centrerConteneurMessage();
        if (window.location.pathname != "/panier.php") {
            $( "#continuerAchats" ).click( 
                function() {
                    cacherConteneurMessage( cacherVoileFenetre );
                    return false;
                }
            );
        }
        else {
            $( "#continuerAchats" ).click( 
                function() {
                    window.location.href = window.location.href;
                    return true;
                }
            );
        }
        afficherVoileFenetre( afficherConteneurMessage );
    }
    else cacherConteneurMessage( cacherVoileFenetre );
}


function initialiserMiniPanier() {
    $("#topBasketContent").empty();
    $("#topBasketContent").load( "/ajax/mini_panier_contenu.php" );
}

function mettreAJourMiniPanier() {
    $.get( 
        "/ajax/mini_panier_contenu.php", 
        function( data ) {
            $( "#topBasketContent" ).html( data );
        }
    );
}


function clonerChoixProduit( contexteChoixProduit ) {
    return $(contexteChoixProduit)
        .parents("div.addProduct")
        .find("div.addProductChoice")
        .contents()
        .clone(true)
    ;
}

function cacherChoixProduit( contexteChoixProduit, callbackFunction ) {
    $(contexteChoixProduit)
        .parents( "div.addProductChoice" )
        .fadeOut( "fast", callbackFunction )
    ;
}


//-------------------------------------------------------------------
//    lancement jQuery quand DOM ok (+ failsafe de l'alias "$")
//-------------------------------------------------------------------
jQuery( 
    
    // actions de base
    function($) {

        $("body").prepend(genererConteneurMessage());
        $("body").prepend(genererVoileFenetre());

        // tout cacher si click sur voile ecran
        $( "#voileFenetre" ).click( 
            function() {
                cacherConteneurMessage( cacherVoileFenetre );
                return false;
            }
        );

        // tout cacher si utilisation touche escape
        $(document).keyup(
            function(event) { 
                if (event.keyCode == 27) { 
                    cacherConteneurMessage( cacherVoileFenetre );
                } 
            }
        );
        
        // faire apparaitre choix multiple de produits
        $("a.addProductChoiceView").click( 
            function() {
                var clone = clonerChoixProduit( this );
                remplacerContenuConteneurMessage( clone );
                centrerConteneurMessage();
                afficherVoileFenetre( afficherConteneurMessage );
                return false;
            }
        );
        
        // fermer choix multiple de produits
        $("a.addProductChoiceClose").click( 
            function() {
                cacherConteneurMessage(cacherVoileFenetre);
                return false;
            }
        );
        
        // ajouter un produit depuis un lien
        $("a.addProductLink").click( 
            function() {
                cacherChoixProduit(this);
                ajouterProduitDepuisLien(this, retourAjoutProduit);
                return false;
            }
        );
        
        // ajouter un produit depuis formulaire fiche
        $("input.ficheBDCSubmit").click( 
            function() {
                ajouterProduitDepuisFormulaire(this.form, retourAjoutProduit);
                return false;
            }
        );
        
        
        // affichage en overlay de la box "Réduction"
        if( $("#layerInfoReduction").length > 0 ) {
        
            $("#layerInfoReduction").overlay({
                absolute: true,
                top: "10%",
                left: "center",
                zIndex: 200,
                expose: {color: "#000", loadSpeed: 50, opacity: 0.7, zIndex: 150},
                closeOnClick: true,      
                api: true
            }).load();
            
        
            $(".infoReductionBouton a").click( function() {
                $("#layerInfoReduction").overlay().close();  
            }); 
        
        }
        
        
        // moteur de recherche prédictif
        
        function format(displayItem) {
            if( displayItem.last == true ) {
                var classe = 'last';
            } else {
                var classe = 'notlast';
            }
            
            if( displayItem.type != '' ) {
                classe = classe + ' ' + displayItem.type;
            }
            
            if( displayItem.type == 'title' ) {
              
                if( displayItem.image != '' ) {
                    return '<div class="' + classe + '"><img src="' + displayItem.image + '" /><h2>' + displayItem.name + '</h2></div>';
                } else {
                    return '<div class="' + classe + '"><h2>' + displayItem.name + '</h2></div>';
                }
                  
                
            } else {
            
                if( displayItem.image != '' ) {
                    return '<div class="' + classe + '"><img src="' + displayItem.image + '" /><h3><a href="' + displayItem.url + '">' + displayItem.name + '</a></h3></div>';
                } else {
                    return '<div class="' + classe + '"><h3><a href="' + displayItem.url + '">' + displayItem.name + '</a></h3></div>';
                }
                
            }
            
        }

                
        $("#mcInput").autocomplete('../php/ajax_moteur_recherche.php?l=' + $('#langue').attr('value') , {
            minChars: 2,
            matchContains: true,
            autofill: true,
            width: 437,
            scrollHeight: 600,
            dataType: "json",
            delay: 100,
            max: 12,
            selectFirst: false,
            
            parse: function(data) {   
                return $.map(data, function(row) {
                    return {
                        data: row,
                        value: row.name,
                        result: '<img src="' + row.image + '" /><h3><a href="' + row.url + '">' + row.name + '</a></h3>'
                    }
                });
            },
            formatItem: function(item) {
                if( $("#mcInput").length > 0 ) {
                    $("#mcInput").flushCache();
                }
                return format(item);
            }
        }).result(function(event, item) {
              if( item.url == '' ) {
                $("#mcInput").attr('value', item.queryString);
                $("#searchForm").submit();  
              } else {
                $("#mcInput").attr('value', item.name);
                location.href = item.url;
              }
            });
            
            
         $('#mcInput').focus( function() {
            if( $(this).attr('value').substring(0, 8) == 'Chercher' || $(this).attr('value').substring(0, 5) == 'Quick' )
            $(this).attr('value', '');
         });  
            
            
            
         /***********************************************************/   
        /* navigation principale */

		 var navTimers = [];  
		 $( '.onglet' ).hover(  
			 function () {  
				 var id = jQuery.data( this );  
				 var $this = $( this );  
				 navTimers[id] = setTimeout( function() {  
					 $this.toggleClass('actif');
					 $this.contents('.contentOnglet').show();  
					 navTimers[id] = "";  
				 }, 200 );  
			 },  
			 function () {  
				 var id = jQuery.data( this );  
				 if ( navTimers[id] != "" ) {  
					 clearTimeout( navTimers[id] );  
				 } else {  
					 $( this ).toggleClass('actif');  
					 $( this ).contents('.contentOnglet').hide();  
				 }  
			 }  
		 ); 
		
        

        
        /**********************
        * Chargement asynchrone des api extérieure
        * pour éviter blocaque du chargement
        */    
    	$('#reseauxSociaux').load('../ajax/ajax_reseaux_sociaux.php?la=' + langueJS);
    	$('#inSocialBookmarksProduct').load('../ajax/ajax_reseaux_sociaux_fiche_produit.php?la=' + langueJS);
    	$('.abonnementReseauxSociaux').load('../ajax/ajax_facebook_connect.php?la=' + langueJS);
              
    }
    
);
