/*  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() {
    //maFonctionGeneriques();
      if ($('alertCompte')) {
         $$('#btnSelection a').each(function (item){
            item.observe('click',function(event){
               $('alertCompte').show();
            });
         });
      }
      $$('.btnAction').each(function(item){
         item.observe('mouseover',function(event){
            this.addClassName('btnActionHover');
         });
         item.observe('mouseout',function(event){
            this.removeClassName('btnActionHover');
         });
      });

      if ($('slLang')){
         $('slLang').observe('change',function(){
            document.location.href = 'http://'+$F('slLang');
         });
      }
    },

    registerSpecifics: function() {
        switch (this.idBody) {
            case 'pagePresse':
                initContact();
                initValidationAccesPress();
            break;
            case 'pageContact':
            case 'pageInscriptionNewsletter':
            case 'pageDemAffiliation':
            case 'pageDemCatalogue':
            case 'pageOffresEmploi':
               initContact();
            break;
            case 'pageBoutique':
                if($('zeForm')) initContact();
                initRechercheBoutique();
                 if($('idBoutique').value != "") loadItineraire($('idBoutique').value);
                break;
            case 's07p04' :
                initContact();
                break;
            case 'pageJeuQuizz' :
               initPageJeuQuizz();
            break;
            case 'pageJeuQuizzForm' :
               initPageJeuQuizzForm();
            break;
            case 'pageCreeCompte' :
               initContact();
            break;
            case 'pageSelection' :
               initSelection();
            break;
            case 'pageAccueil' :
               initHome();
            break;
            
            case 'pageCreateur' :
               $('navCreateurs').show();
            break;
            
            }
    }
});

// load
Event.observe(window, 'load', function() {
    var loader = new Loader(document.body.id);
});

/*--------------------------------------------------------------------------*/
function getLayerContact() {

   var lg = $('lg').value;

   if($('jsGetLayer'))
   {
      Event.observe($('jsGetLayer'), 'click', function() {
         var pars = 'todo=inscription&createur='+$F('idCreateur');
         var uri = '/'+lg+'/s05_createurs/s05p00_gallery.php?'+pars;

         var myAjax = new Ajax.Updater('jsInscription', uri, { method: 'post' , parameters: pars, evalScripts: true, onSuccess: function(transport) {
               new Effect.Appear('jsInscription');
               return false;
            }
         });
      })
   }
};

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 ($('date_mariage_trigger'))
   {
      caldate_date_mariage = Calendar.setup({inputField:"data_date_mariage_", button:"date_mariage_trigger", ifFormat:"dd/mm/y", mondayFirst:true, onSelect:setDate, displayArea : "data_date_mariage_j_", align : "Bl"});
   }

    if($('searchSubmitter')) {
        Event.observe('searchSubmitter', 'click', function() {
            if($('searchTodo'))
            {
               $('todo').value = "search_email"; $('searchEmailForm').submit();
            }
        });
    }

    if($('errMsg')) {
        if($('errMsg').innerHTML  != '') {
            Element.show('errMsg'); Effect.BlindUp('errMsg', {
                delay:3
            });
        }
    }
}

function initValidationAccesPress()
{
    var accesForm = new Validation('logAccesPress', {
        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() {
            $('todoAccesPress').value ="logAccesPress";
        }
    });
}

function initRechercheBoutique()
{
    // pour chaque boutiques 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();
            })

            $$('.infoBoutiqueSup').each(function(obj) {
                obj.hide();
            })

            $('idBoutique').value = id;

            $('planAcces_'+id).show();
            load(id);
        })
    });

    $$('.jsFB').each(function(obj) {
        var id = obj.id.split('_');
        id   = id[1];

        Event.observe($('btnFB_'+id), 'click', function() {

            $$('.infoBoutiqueSup').each(function(obj) {
                obj.hide();
            })

            $$('.jsPlanAcces').each(function(obj) {
                obj.hide();
            });

            $$('.jsDirections').each(function(obj) {
                obj.hide();
            })

            $('sup_'+id).show();
        })
    });

    //onclick="setDirections((.id.));
    $$('.jsDirection').each(function(obj) {
        var id = obj.id.split('_');
        id      = id[1];

        Event.observe($('btnDir_'+id), 'click', function() {
            setDirections(id);
        });
    });

}

function loadItineraire(id)
{
   $('planAcces_'+id).show();
   load(id);
}
function setDirections(id) {
    $('directions_'+id).show();
    fromAddress = $('depart_'+id).value;
    toAddress   = $('arrivee_'+id).value;
    $('imprimItineraire_'+id).show();
    locale="fr";
    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 =  "../images/Logo_google_maps.png";

        icon.iconSize = new GSize(50,13);

        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 = $('idBoutique').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);
            };
        };
    });
}

function printItineraire(id)
{
   window.open('../../ml/s04_boutiques/fiche_boutique_impression.php?lg='+$F('lg')+'&from='+$F('depart_'+id)+'&to='+$F('arrivee_'+id),'Impression Itiniéraire','type=fullWindow,fullscreen,toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=1');
}

//Gestion du jeu quizz
function initPageJeuQuizz()
{
   //POur le formulaire du quizz
    var validQuizz = new Validation('formQuizz', {
        useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
        stopOnFirst:true, // arête à la premiere erreur
        onSubmit:false
    });

   Event.observe('submitQuizz', 'click', function() {
      if(!validQuizz.validate()) return false;
      else                       jeuValideQuestion();
      });
}

//Fonction permettant de reporter les valeurs des réponses au quizz
function jeuValideQuestion()
{
   //L'internaute à répondu au trois questions on cache la réponse au question et on affiche le formulaire
   $('rep_q1').value = 0;
   $('rep_q2').value = 0;
   $('rep_q3').value = 0;
   $('rep_q4').value = 0;
   $$('input[name="data[q1]"]').each(function(object){if(object.checked) $('rep_q1').value = object.value;});
   $$('input[name="data[q2]"]').each(function(object){if(object.checked) $('rep_q2').value = object.value;});
   $$('input[name="data[q3]"]').each(function(object){if(object.checked) $('rep_q3').value = object.value;});
   $$('input[name="data[q4]"]').each(function(object){if(object.checked) $('rep_q4').value = object.value;});
   //On submit le formulaire
   $('formQuizz').submit();
}

//Gestion du formulaire d'inscription au quizz
function initPageJeuQuizzForm()
{
    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() {
            if($('searchTodo'))
            {
               $('todo').value = "search_email"; $('searchEmailForm').submit();
            }
        });
    }

    if($('errMsg')) {
        if($('errMsg').innerHTML  != '') {
            Element.show('errMsg'); Effect.BlindUp('errMsg', {
                delay:3
            });
        }
    }
}

function showHide(element)
{
    $(element).toggle();
}

function initSelection(){

   var first = $('blockImage').down('div',1);

   if (first){
      first.show();
      $('deleteLink').href += '&id='+$('blockImage').down('div',1).id;

      $$('#colDroite div.vignette a').each(function(item){
         item.observe('click',function(event){
            $$('#blockImage div.image').invoke('hide');
            $(this.rel).show();
            $('deleteLink').href += '&id='+$(this.rel).id;
         });
      });
   }
}

function initHome(){
//    if($('loading')) {
//       $('loading').hide();
//    }
//    $$('#zoneSlider li').invoke('show');
//    slideMenu.build('sm',800);
}
