/*  Le Phare JavaScript library - (c) 2009
/*--------------------------------------------------------------------------*/

var Loader = Class.create({
   initialize: function(element) {
      if($(element)) {
         this.idBody = element;
         this.registerGenerics();  // call generics f°
         this.registerSpecifics(); // call specificsf°
      }
      else {
         alert('ATTENTION\nLa balise body n\'a pas d\'id !');
      }
   },

   registerGenerics: function() {
         initMenu();
         document.oncontextmenu=function(){return false;}
   },

   registerSpecifics: function() {
         switch (this.idBody) {
            case 'pageFaq':
               showFirstFaq();
            break;
            case 'pageContact':
            case 's04p01':
            case 's04p02':
            case 's04p03':
            case 's04p05':
               initContact();
            break;
            
            case 's06p03' :
                    var cpt = 0;
                     $$('.containerVignettes li').each(function(){
                        cpt++;
                     });
                     if(cpt>0) {
                        vCarousel = new UI.Carousel("vignettes");
                     }
                  
            break;
            case 'pageNewsletter':
               initContact();
            break;
            case 'pageDesabonnement':
               initDesinscription();
            break;
            case 'pagePointsVente':
               initRecherchePointsVente();
            break;

         }
   }
});




// load
Event.observe(window, 'load', function() {
   var loader = new Loader(document.body.id);
});

/*--------------------------------------------------------------------------*/

function showFirstFaq()
{
   $$('.jsReponse')[0].show();
}

function initContact()
{
   var zeForm = new Validation('zeForm', {
      useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
      stopOnFirst:true, // arête à la premiere erreur
      onFormValidate:  // definie la function qui permet d’empeche l’envoie du form sans js et donc sans verif
         function() {$('todo').value ="submit_quest";}
      });

   if($('searchSubmitter')) {
      Event.observe('searchSubmitter', 'click', function() {$('searchTodo').value = "search_email"; $('searchEmailForm').submit();});
   }

   if($('errMsg')) {
      if($('errMsg').innerHTML  != '') {
         Element.show('errMsg'); Effect.BlindUp('errMsg', {delay:3});
      }
   }
}

function initDesinscription()
{
   var zeForm = new Validation('auth', {
      useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
      stopOnFirst:true, // arête à la premiere erreur
      onFormValidate:  // definie la function qui permet d’empeche l’envoie du form sans js et donc sans verif
         function() {$('todo').value = "unsub";}
      });
}

function initRecherchePointsVente()
{
    // pour chaque point de vente au click sur le plan d'acces
    // on masque tous les plans par défaut pour re afficher ensuite
    // celui qu'on veut
    $$('.jsLienPlanAcces').each(function(obj) {
        var id = obj.id.split('_');
        id 	 = id[1];

        Event.observe($('btnPA_'+id), 'click', function() {
            $$('.jsPlanAcces').each(function(obj) {
                obj.hide();
            });

            $$('.jsDirections').each(function(obj) {
                obj.hide();
            })
            // je ne sais pas encore ce que c'est !
            $('idPointVente').value = id;
            // on switch
            $('planAcces_'+id).toggle();
            // si on affiche le plan on charge la google map !
            if($('planAcces_'+id).visible())load(id);
        })
    });

    //onclick="setDirections((.id.));
    $$('.jsDirection').each(function(obj) {
        var id = obj.id.split('_');
        id		 = id[1];

        Event.observe($('btnDir_'+id), 'click', function() {
            setDirections(id);
        });
    });
}

/* Pour les cartes google maps */
function loadItineraire(id)
{
   $('planAcces_'+id).show();
   load(id);
}

function printItineraire(id)
{
   hnd = window.open('/' + $('lg').value + '/s08_points_vente/impression_itineraire.php?lg='+$('lg').value+'&from='+$('depart_'+id).value+'&to='+$('arrivee_'+id).value,'Impression Itiniéraire','top=0,left=0,width=700,height=500,toolbar=0,location=0,directories=0,status=0,scrollbars=1,resizable=0,copyhistory=0,menuBar=1');
   hnd.focus();
}

function setDirections(id) {
    $('directions_'+id).show();
    fromAddress = $('depart_'+id).value;
    toAddress   = $('arrivee_'+id).value;
    $('imprimItineraire_'+id).show();
    locale=$('lg').value;
    gdir.load("from: " + fromAddress + " to: " + toAddress, {
        "locale": locale
    });
}

function onGDirectionsLoad(){
}

function handleErrors(){

    // en cas d'erreur on masque la div
    $$('.jsDirections').each(function(obj) {
        obj.hide();
    })

    // on affiche un message d'erreur
    if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
        alert("Aucune coordonnées géographique n'a pu être trouvée pour cette adresse.\n Code erreur: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
        alert("La demande de géocodage ou d'itinéraire n'a pas réussi, désolé du dérangement.\n Code erreur: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
        alert("Le paramètre HTTP q est manquant ou n'a pas de valeur. Pour les requêtes de géocodage, cela veut dire que l'adresse saisie est vide. Pour les requêtes d'itinéraires, cela veut dire qu'aucune demande n'a été saisie.\n Code erreur: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_BAD_KEY)
        alert("La clef Google Map est invalide pour ce nom de domaine. \n Code erreur: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
        alert("La demande de géocodage ou d'itinéraire ne peut pas être parsée.\n Code erreur: " + gdir.getStatus().code);
    else alert("Une erreur est survenue.");
}

function load(id) {
    var map = null;

    // on test la compatibilité du browser avec google map
    if (GBrowserIsCompatible()) {
        map = new GMap2($("zoneGoogleMap_"+id));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        gdir = new GDirections(map, $("directions_"+id));
        GEvent.addListener(gdir, "load", onGDirectionsLoad);
        GEvent.addListener(gdir, "error", handleErrors);
    }else {
        alert('Votre navigateur ne peut afficher la carte google maps !');
    }

    // fonction pour créer un marker classique
    function creerMarker(point, info)
    {
        // on créer le marker à afficher sur la map
        // on définis les paramètres du marker icône, taille, ombre
        var icon = new GIcon();
        icon.image =  "/fr/images/Logo_google_maps.png";

        icon.iconSize = new GSize(88,24);

        icon.shadowSize = new GSize(0, 0);
        icon.iconAnchor = new GPoint(25,8);
        icon.infoWindowAnchor = new GPoint(10,5);

        var marker = new GMarker(point, icon);
        var infoTabs = [ new GInfoWindowTab("Infos", info)];

        map.setCenter(point);

        // si on click sur le marker, on recentre, on zoom et on affiche les infos
        GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowTabsHtml(infoTabs);
            marker.show();
        });

        return marker;
    }

    // on récupère les infos des villes avec leurs coordonnées dans notre fichier inc
    GDownloadUrl($F('gmap_coor_file'), function(data) {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");

        if(navigator.appName =='Microsoft Internet Explorer')
            var is_Ie	= true;
        else
            var is_Ie	= false;

        var id = $('idPointVente').value;

        for (var i = 0; i < markers.length; i++) {

            // on affiche le marker
            if(markers.item(i).getAttribute("id") == id)
            {

                for(var j = 0; j<markers[i].childNodes.length; j++) {

                    if(markers[i].childNodes.item(j).tagName == "infos") {
                        if(is_Ie)
                            info = markers[i].childNodes.item(j).text;
                        else
                            info = markers[i].childNodes.item(j).textContent;
                    };
                }

                point = new GLatLng(parseFloat(markers.item(i).getAttribute("latitude")), parseFloat(markers.item(i).getAttribute("longitude")), 9);
                marker = creerMarker(point, info);
                map.addOverlay(marker);
                map.setZoom(9);
            };
        };
    });
}
