
/***********************************************************************************
 *
 *	Le Grain de Sel.  
 *	Version: 1.0 
 *	Author: Jérémy Clerc
 *	URL: http://www.hotel-legraindesel.com
 *	Last Mod Date: 20/03/08
 *	Notes: Ce fichier contient toutes les classes du site web du grain de Sel
 *	Ces classes effectuent tout les traitements de données serveur et appel à la BDD
 *	
************************************************************************************/
var p = "accueil";
var r = "";
var a = "";

var p2 = "accueil";
var r2 = "";
var a2 = "";

var is_first = true;
var activ_popup = false;

//------------------------------------> init_js : Initialisation du javascript
function init_js (url_page) {
  $("#conteneur").hide();
   $("#fond_popup").fadeTo(0.1, 0);
  //Initialisation du fond flash
  init_flash();
  //Initialisation de la navigation dans le site
  init_nav(url_page);
  maj_navigation("menu");
}

//-------------------------------------> load_content : Callback appelé par plugin history
function load_content(hash) {
 
  //Si on a une ancre (param)
	if(hash) {
		var tab_param = decoupe_url(hash);
	}
	else {
    var tab_param = new Array( "accueil" );
  }

  //Mise à jour des contenu html et flash
  maj_contenu(tab_param);
  
  //Si ce n'est pas le premier passage
  if(!is_first) {
    appel_flash(tab_param);
  }
	
	is_first = false;
}

//------------------------------------> init_nav : Initialisation de la navigation
function init_nav(url_page) {
  //On renseigne l'arbo en cours
  set_arbo( decoupe_url( url_page ) );
  
  //on renseigne le php que le js fonctionne
  var param = 'param={"fct": "ajx_set_activ_js", "tab_param" : ["oui"] }';
  $.ajax({ 
      type: "GET",
      url: "traitement.php",
      data: param,
      dataType : 'json',
      success: function(data) {
        switch(data.etat) {
          case "1" :
          default :
            $("#menu").html(data.menu);
            //$("#conteneur").fadeIn("slow");
            maj_navigation("menu");
          break;
        }
      }
    });
    
  //Initialisation de la navigfation ajax
	$.historyInit(load_content);
}

//------------------------------------> maj_navigation : applique les actions js sur les liens a
function maj_navigation(id_zone) {

  //Click surl un des liens de la page
  $("#"+id_zone+" a").click(function () {

    var hash = this.href;
    hash = hash.replace(/^.*#/, '');
    
    //On charge le bon contenu
    $.historyLoad(hash);
    return false;
  });
}


//------------------------------------> maj_contenu : met a jour les contenus
function maj_contenu(tab_url) {
 
  //--- Si on a une page
  if( try_page() ) {
   // alert("page >nouvelle > "+tab_url[0]+"  p> "+p+"   tab_url> "+tab_url);
    maj_page(tab_url);
  }
  
  //--- Si on a une rubrique
  else if( try_rub() ) {
    //alert("rubrique nouvelle > "+tab_url[1]+"  r> "+r);
    maj_rub(tab_url);
  }
  
  //--- Si on a une action
  else if( try_act() ) {
    //alert("action nouvelle > "+tab_url[2]+"  a> "+a);
    maj_act(tab_url);
  }
  //--- Si on a un retour à la racine de la page  
  else if (try_page_racine() ) {
    //alert("ok retour page racine");
    maj_page(tab_url);
  }
  //--- Sinon A TRAITER !! 
  else {
    //alert("page ACTIVE p>"+p+" r>"+r+" a>"+a+" tab_url  > "+tab_url);
  }

  //alert("tab_url[0]> "+tab_url[0]+" tab_url[3]> "+tab_url[2]);
  set_arbo(tab_url);

}
  //Try page
  function try_page() {
    if (tab_url[0] != undefined && tab_url[0] != p ) {
      return true;
    }
  }

  //Try try_page_racine
  function try_page_racine() {
    if (tab_url[0] != undefined && tab_url[0] == p && tab_url[1] == undefined) {
      return true;
    }
  }

  //Try rubrique
  function try_rub() {
    if(tab_url[1] != undefined && tab_url[1] != r ) {
      return true;
    }
  }
  
  //Try action
  function try_act() {
    if(tab_url[2] != undefined && tab_url[2] != a ) {
      return true;
    }
  }
//------------------------------------> maj_page : met a jour le contenu d'une page entière
function maj_page(tab_url) {

  var str_tab_url = '"'+tab_url.join("\" , \"")+'"';
  var param = 'param={"fct": "ajx_maj_page", "tab_param" : ['+str_tab_url+'] }';

  $.ajax({ 
      type: "GET",
      url: "traitement.php",
      data: param,
      dataType : 'json',
      beforeSend : function () {
        //$("#contenu").fadeOut("slow");
      }
      ,
      success: function(data) {
        
        switch(data.etat) {
          case "0" :
            //alert("Erreur de traitement");
          break;
          
          case "1" :
            //Si c'est pas le 1er chargemeent on load en fadant
            if(!is_first) {
               init_page(data, str_tab_url);
               /*
              $("#"+data.recepteur).fadeOut("fast", function() {
               
                init_page(data, str_tab_url);
                
                $("#"+data.recepteur).fadeIn("fast");
              });
              */
            }
            else {
              init_page(data, str_tab_url);
            }
          break;
        }
      }
    });
}

//------------------------------------> init_page : Initialise une page
function init_page(data, str_tab_url) {
  $("#"+data.recepteur).html(data.contenu);
  maj_titre_page(data.titre);
  maj_navigation(data.recepteur);
  init_interaction();
  
  //Si on a changé la langue alors on devra aussi changer le menu
  if( data.menu != undefined ) {
     $("#menu").html(data.menu);
  }

}

//------------------------------------> maj_rub : met a jour une rubrique de page
function maj_rub(tab_url) {
  //alert("maj_rub dans "+tab_url[0]+"   tab_url[1]>  "+tab_url[1]);
  var str_tab_url = '"'+tab_url.join("\" , \"")+'"';
  var param = 'param={"fct": "ajx_maj_rub", "tab_param" : ['+str_tab_url+'] }';

  $.ajax({ 
      type: "GET",
      url: "traitement.php",
      data: param,
      dataType : 'json',
      success: function(data) {
        
        switch(data.etat) {
          case "0" :
            //alert("Erreur de traitement");
          break;
          
          case "1" :
            //Si c'est pas le 1er chargemeent on load en fadant
            if(!is_first) {
              //$("#"+data.recepteur).fadeOut("fast", function() {
                $("#"+data.recepteur).html(data.contenu);
                maj_titre_page(data.titre);
                maj_navigation(data.recepteur);
                init_interaction();
                $("#"+data.recepteur).fadeIn("fast");
              //});
            }
            else {
              
              $("#"+data.recepteur).html(data.contenu);
              maj_titre_page(data.titre);
              maj_navigation(data.recepteur);
              init_interaction();
            }
          break;
        }
        
      }
  });
}

//------------------------------------> maj_act : met a jour un zone selon une action demandée
function maj_act(tab_url) {
  //alert("maj_act dans "+tab_url[0]+"   tab_url[1]>  "+tab_url[1]+"   tab_url[2]>  "+tab_url[2]);
  var str_tab_url = '"'+tab_url.join("\" , \"")+'"';
  var param = 'param={"fct": "ajx_maj_act", "tab_param" : ['+str_tab_url+'] }';

  $.ajax({ 
      type: "GET",
      url: "traitement.php",
      data: param,
      dataType : 'json',
      success: function(data) {
        
        switch(data.etat) {
          case "0" :
            //alert("Erreur de traitement");
          break;
          
          case "1" :
            //Si c'est pas le 1er chargemeent on load en fadant
            if(!is_first) {
              //$("#"+data.recepteur).fadeOut("fast", function() {
                $("#"+data.recepteur).html(data.contenu);
                maj_titre_page(data.titre);
                maj_navigation(data.recepteur);
                init_interaction();
                $("#"+data.recepteur).fadeIn("fast");
              //});
            }
            else {
              $("#"+data.recepteur).html(data.contenu);
              maj_titre_page(data.titre);
              maj_navigation(data.recepteur);
              init_interaction();
            }
          break;
        }
        
      }
  });
}

//------------------------------------> init_page : Initialise l'interactivité de la page
function init_interaction() {
  
  var tab_arbo = get_arbo();
  
  if(tab_arbo[0].indexOf("version") != -1 || tab_arbo[0].indexOf("ete") != -1 || tab_arbo[0].indexOf("hiver") != -1) {
  
    var tab_arbo = get_old_arbo();
  }
  //alert(tab_arbo);
  switch(tab_arbo[0]) {
    //------------------------------------------->ACCUEIL
    case "accueil" :  
      
      $("div.block_acc img").fadeTo(0.1, 0.6);

      //-----------------Click sur un des boutons
      $("div.block_acc").click(function()  {
        //window.location.href = $("a" , this).attr("href");
        var hash = $("a" , this).attr("href");
        hash = hash.replace(/^.*#/, '');
        
        var tab_param = decoupe_url( hash );
        //On charge le bon contenu
        $.historyLoad(hash);
        return false;
        
      });
      //-----------------Survol des boutons
      $("div.block_acc").hover(function()  {
          $("img",this).fadeTo("0.5", 1);
        },function(){
          $("img",this).fadeTo("0.5", 0.6);
      });
      
    break;

    //------------------------------------------->RESTAURANT
    case "restaurant" :
   
      test_popup(tab_arbo);
    
      if((tab_arbo[1]) != undefined) {
          $("div.menu_publication a.pub_active").removeClass("pub_active");
          $("div.menu_publication a#sm_"+tab_arbo[2]).addClass("pub_active");
      }
      else {
        $("#btn_action_photos span").click(function() {
          var type_act = $(this).attr("class");
          $id("decor_flash").js_to_as_btn(type_act);
          return false;
        });
      }

    break;
    //------------------------------------------->HOTEL
    case "hotel" :
    
      test_popup(tab_arbo);
      
      if((tab_arbo[1]) != undefined) {
        switch(tab_arbo[1]) {
          
          case "reservation" :
        
            //Préparation de l'envoie du formulaire
            var options = { 
              target:    '#sortie_form_reservation',
              dataType:  'json', 
              beforeSubmit:  function () {
      
                //ON vérifie que le form est bien rempli
                var val_form = verif_form("reservation");
                
                if(val_form)  {
                 return true;
                }
                else {
                  return false;
                }
              }, 
              success:  function (data) {
              
                switch(data.etat) {
                
                  case "0" :
                    //alert("Erreur de traitement");
                  break;
                  
                  case "1" :
                    if($("#"+data.recepteur).hasClass("msg_erreur") ) {
                      $("#"+data.recepteur).removeClass("msg_erreur");
                    }
                    $("#"+data.recepteur).html(data.contenu).fadeTo("fast", 1);
                  break;
                } //fin switch
              }
            };
            
            $("#form_reservation").ajaxForm(options); 
          
            //Init highlight
            init_highlight_form();
  
          break;
        }
      }
          else {
            $("#btn_action_photos span").click(function() {
              var type_act = $(this).attr("class");
              $id("decor_flash").js_to_as_btn(type_act);
              return false;
            });
          }
    break;
    
    //------------------------------------------->CONTACT
    case "contact" :
    
      //Préparation de l'envoie du formulaire
      var options = { 
        target:    '#sortie_form_contact',
        dataType:  'json', 
        beforeSubmit:  function () {

          //ON vérifie que le form est bien rempli
          var val_form = verif_form("contact");
          
          if(val_form)  {
           return true;
          }
          else {
            return false;
          }
        }, 
        success:  function (data) {
        
          switch(data.etat) {
          
            case "0" :
              //alert("Erreur de traitement");
            break;
            
            case "1" :
              if($("#"+data.recepteur).hasClass("msg_erreur") ) {
                $("#"+data.recepteur).removeClass("msg_erreur");
              }
              $("#"+data.recepteur).html(data.contenu).fadeTo("fast", 1);
            break;
          } //fin switch
        }
      };
      
      $("#form_contact").ajaxForm(options); 
    
      //Init highlight
      init_highlight_form();
             
    break;  
  }
}

//------------------------------------> maj_titre_page : met a jour le titre de la page courante
function maj_titre_page(titre) {
   document.title = titre;
}

//------------------------------------> set_arbo : renseigne les valeurs courante de la page
function set_arbo(tab_url) {

  //alert("ok set "+tab_url.join(", "));
  //Si on a une action
  if(tab_url[2] != undefined) {
    a2 = a;
    a = tab_url[2];
  }
  else {
   a2 = a;
   a = "";
  }
  //Si on a une rubrique
  if(tab_url[1] != undefined) {
    r2 = r;
    r = tab_url[1];
  }
  else {
    r2 = r;
    r = "";
  }
  //Si on a une page
  if (tab_url[0] != undefined) {
    //alert("set_arbo tab_url[0]>"+tab_url[0]+" p2> "+p2);
    //Si on change de lang on
    if(tab_url[0].indexOf("version") != -1 && p2=="accueil") {
      p = p2;
    }
    //En changement de saison on concernve les meme paramètres
    else if( (tab_url[0].indexOf("ete") != -1 || tab_url[0].indexOf("hiver") != -1)) { 
      //alert("chang saison");
      //p = p2;
    }
    else {
      p2 = p;
      p = tab_url[0];
    }
  
  }

  else {
    p2 = p;
    p = "accueil";
  }
}

//------------------------------------> get_arbo : retounre un tableau des paramètres de nav
function get_arbo() {


  var tab_arbo = new Array();
  //alert("get_arbo> p> "+p+" r>"+r+" a>"+a);
  //Si on a une page
  if (p !="") {
   tab_arbo.push(p);
  }

  //Si on a une rubrique
  if (r !="") {
   tab_arbo.push(r);
  }
  
  //Si on a une action
  if (a !="") {
   tab_arbo.push(a);
  }
  
  return tab_arbo;
}

//------------------------------------> get_old_arbo : retounre un tableau des ancies paramètres de nav
function get_old_arbo() {
 // alert("p > "+p+" p2> "+p2);
  var tab_arbo = new Array();
  
  //Si on a une page
  if (p2 !="") {
   tab_arbo.push(p2);
  }

  //Si on a une rubrique
  if (r2 !="") {
   tab_arbo.push(r2);
  }
  
  //Si on a une action
  if (a2 !="") {
   tab_arbo.push(a2);
  }
  
  return tab_arbo;
}
//------------------------------------> decoupe_url : decoupe l'url demandée et retourne un tableau de paramètre
function decoupe_url(url) {
  
  //----> Si c'est une url html
  if(url.indexOf(".html",0) !=-1 ) {
    //On coupe sur le =
    var reg = new RegExp("=", "g");
    tab_url = url.split(reg);
    //Parcour du tableau
    for(i=0; i<tab_url.length; i++) {
    
      //si le paramètre contient un &
      if(tab_url[i].indexOf("&",0)!=-1) {
      
         tab_url[i] = tab_url[i].substring( 0 , tab_url[i].length-2 );
      }
    }
    //Suppression du premier élément : p
    tab_url.shift();
  }
  //----> Si c'est une url ajax
  else {
    var reg = new RegExp("[-]+", "g");
    tab_url = url.split(reg);
  }  
  return tab_url;
}

//------------------------------------> Insertion du fond flash
function init_flash () {    

	var so = new SWFObject("swf/main_jeremy.swf", "decor_flash", "100%", "510px", "8");
	so.addParam("wmode", "transparent");
	so.write("decor");
}
 
function appel_flash (str_param) {
  $id("decor_flash").js_to_as(str_param);
} 


//------------------------------------> Fct Externall : activ_contenu_html
function activ_contenu_html(str) {

  is_first = false;
  
  var tab_param = get_arbo();
  
  appel_flash(tab_param);
  $("#conteneur").fadeIn("fast");
}
//------------------------------------> Test si il faut activer le fond popup et prévoie l'intéraction
function test_popup(tab_arbo) {

   if( tab_arbo[1] != undefined ) {
  
      add_fond_popup();
   
      $(".btn_retour_pub, .btn_retour_pub_haut").click(function() {
  
        remove_fond_popup();
      })
    }
}

//------------------------------------> Active le fond popup transparent
function add_fond_popup() {

  if(!activ_popup )  {
  
    activ_popup = true;
    
    var val_height = $("#contenu").height()*6;
    
    $("#fond_popup").height(val_height).fadeTo(0.1, 0.5);
  }
}

//------------------------------------> Desactive le fond popup
function remove_fond_popup() {
  if( activ_popup )  {
    $("#fond_popup").fadeTo(0.1, 0);//.hide();
    activ_popup = false;
  }
}

/************************************************************************************************/
/************************************************************************************************/

//------------------------------------> Fct Externall
function ecrire_message(str) {
  is_first = false;
}

//------------------------------------> Découpe le paramètre
function get_hash(str) {
  var hash = str.replace(/^.*#/, '');
  return hash;
}

//------------------------------------> Alternaitif au $ ou getElementById
function $id (id_elmt) {
  return document.getElementById(id_elmt);
}	