/**
 *
 *  marqueur pour le menu : correspond à l'état hover
 *
 */
MARQUEUR_HEIGHT = 32;

(function(){
  
  MarqueurMenu = function(position, link, eltMenuSelector){
  
    this.elt = $(eltMenuSelector);//$("#left_sidebar ul");
    this.link = link;
    this.position = MARQUEUR_HEIGHT * (position*1) + (position*1);
    
    var marge = 1;

    if(this.position > 0){
      this.position += marge;
    }
    
  //  $("#left_sidebar ul li").css({"height":MARQUEUR_HEIGHT});
    $(eltMenuSelector + " li").css({"height":MARQUEUR_HEIGHT});
    this.elt.addClass("moving_marqueur");
    this.elt.css({"background-position":"left "+this.position+"px"});
  };
  
  MarqueurMenu.prototype.setToIndex = function(index){ 
    this.link.unsetCurrentSelected();
    
    this.position = MARQUEUR_HEIGHT * index;
    
    if(this.position > 0){
      this.position += 1*index;
	  if(Application.isIe7()){
		this.position += 2;
	  }
    }
    
   
    
     this.position =  this.position.toString()+"px";
     var obj = this;
    this.elt.animate({backgroundPosition: '0 '+this.position}, 500, function(){
     obj.link.setSelected(index);
    });
  };
  
  
}());
//end Class MarqueurMenu



(function(){
  
  PageNavigation = function(linksSelector, updatingAreaSeletor, eltMenuSelector){
   this.updatingArea = $(updatingAreaSeletor);
   this.canClick = true; 
   this.links = $(linksSelector);
   this.current = 0;
   this.paginationLinks = $(".pagination_link");
   var obj = this;
   this.links.each(function(index, elt){
     if($(this).parent().hasClass("actif")){
       obj.current = index;
     }
   });

   if($('#slider_electro a.slider-nav').length){
    this.linksPackSpeciaux = $('#slider_electro a.slider-nav');
   }else{
    this.linksPackSpeciaux = null;
   }
  
  this.marqueur = new MarqueurMenu(this.current, this, eltMenuSelector);

    this.initListeners();
  };
  
  
  
  PageNavigation.prototype.initListeners = function(){
    // changement de rubrique
    var obj = this;
    
    this.links.each(function(index, elt){
      $(this).click(function(evt){
        evt.preventDefault();
        if(obj.canClick && index != obj.current){
          obj.canClick = false;
          obj.marqueur.setToIndex.call(obj.marqueur, index);
          obj.displayPageForLink.call(obj, $(this), index);
        }
      });
    });
    
    if(this.linksPackSpeciaux){
      this.linksPackSpeciaux.each(function(index, elt){
        $(this).click(function(evt){
          evt.preventDefault();
          if(obj.canClick){
            var position = $(this).data('position');
            obj.canClick = false;
            obj.marqueur.setToIndex.call(obj.marqueur, position);
            obj.displayPageForLink.call(obj, $(this), position);
          }
        });
      });
    }
    
    //pagination
    this.initPaginationLinks();
    
  };
  
  
  
  /**
   *  ajout des ecouteurs pour la pagination
   */
  PageNavigation.prototype.initPaginationLinks = function(){
    var obj = this;
    
    this.paginationLinks.each(function(index, elt){
      $(this).click(function(evt){
        evt.preventDefault();
        obj.displayPageForLink.call(obj, $(this),obj.current);
      });
    });
  };
  
  
  /**
   *  mise à jour des écouteur de pagination
   */
  PageNavigation.prototype.reInitPaginationLinks = function(){
    this.paginationLinks.unbind("click");
    this.paginationLinks = [];
    this.paginationLinks = $(".pagination_link");
    this.initPaginationLinks();
  };
  
  
  
   /**
   *  ajoute le style select au lien à la position index
   */
  PageNavigation.prototype.setSelected = function(index){
    $(this.links[index]).parent().addClass("actif");
  };
  
  /**
   *  supprime le style selected du lien actuel
   */
  PageNavigation.prototype.unsetCurrentSelected = function(){
    $(this.links[this.current]).parent().removeClass("actif");
  };
  
  
  
  /**
   *  version avant gestion manuelle
   */
//  PageNavigation.prototype.displayPageForLinkV1 = function(elt, index, obj){
//    var requestedUrl = elt.attr("href").replace(ROOT_URL, "");
//    var dataUrl = [];
//    var module = requestedUrl.match('[a-zA-Z0-9_]+\.php');
//
//    if(!Application.URL_REWRITING_IS_ACTIV && module && module != ""){
//      requestedUrl = $.trim(requestedUrl.replace(module+'?', ''));
//      dataUrl = requestedUrl.split('&');
//      for(var i =0; i < dataUrl.length;i++){
//        if(dataUrl[i].match('action=')){
//          dataUrl[i] += "_load";
//        }
//      }
//    }else if(Application.URL_REWRITING_IS_ACTIV){
//      try{
//        var rewritedUrlDatas = obj.getParamsForUrl(requestedUrl);
//        module = rewritedUrlDatas.module;
//        module += ".php";
//        dataUrl = rewritedUrlDatas.datas;
//      }catch(e){
//        return 0;
//      }
//    }else{
//      obj.canClick = true;
//      obj.current = index;
//      
//      return 0;
//    }
//
//    var url = ROOT_URL + module;
//
//
//    $.ajax({
//      url:url,
//      data:dataUrl.join('&'),
//      type:"post",
//      dataType:"html",
//      success:function(responseHTML, responseDATA, responseXML){
//        obj.updatingArea.fadeOut(500, function(){
//          $(this).children().remove();
//          $(this).append(responseHTML).fadeIn(500, function(){
//                    
//            obj.reInitPaginationLinks(obj);
//
//            obj.canClick = true;
//            obj.current = index;
//          });
//        });
//
//      },
//      error:function(){
//      }
//    });
//  };
  
  
  PageNavigation.prototype.displayPageForLink = function(elt, index){
    var requestedUrl = ROOT_URL + (elt.attr("href").replace(ROOT_URL, ''));
    var dataUrl = [];

    this.updatingArea.css({'position': 'relative'});
    var blockLoader = $('<div id="bloc_loader" class="loader_02">');
    this.updatingArea.append(blockLoader);

    var obj = this;
    $.ajax({
      url:requestedUrl,
      data:dataUrl.join('&'),
      type:"post",
      dataType:"html",
      success:function(responseHTML, responseDATA, responseXML){ 
        obj.updatingArea.fadeOut(500, function(){
          $(this).children().remove();
          $(this).append(responseHTML).fadeIn(500, function(){
                    
            obj.reInitPaginationLinks.call(obj);

            obj.canClick = true;
            obj.current = index;
          });
        });

      },
      error:function(){
      }
    });
  };
  
  
  
  /**
   * 
   * retourne l'url
   * 
   */
  PageNavigation.prototype.getParamsForUrl = function(url){
    
    //presse :
    var navigation_manager = new UrlRewritingManager(url);
    navigation_manager.initPatternValidator();
    navigation_manager.getDatasForAjaxNavigation();

    if(!navigation_manager.urlIsMatch()){
      throw "L'url n'existe pas";
    }
    
    return navigation_manager.getDatas();
  };
  
})();
// end Class PageNavigation
