var AjaxContent = function(){
  var opacity_div = '';
  var blocks = '';
  var changeHead = false;
  var openUrl = ''; 
  var firstUrl = false; 
  var exception_address = new Array();
  
  return {
    //Фукция изменяет контент
    //-----------------------------------------------------------------------------
    //host - host адреса (например zenit.jm24.ru)
    //pathname - относительный адрес (например /contacts/)
    //noAddresRef - не изменять адрес в адресной строке (если true  изменять не будет)  
    getContent : function(host, pathname, noAddresRef, get){
      if(!noAddresRef) AjaxContent.addressRefrash(pathname);
      if(!get) get ='';
      var url = 'http://'+host+pathname+get;
      openUrl = pathname;
      
      firstURL = false;
      
      $(opacity_div).animate({opacity:0}, //Прозрачность на 0
        function(){ // загружает контент с помощью ajax
          
          //Обновляем контент
          $.get(url, function(data){
            for (var i in blocks) $(blocks[i]).html($(data).find(blocks[i]).html());
            
            //Обновляем title
            //if(changeHead) console.log($(data).find("head"));
            
            //Прозрачность
            $(opacity_div).animate({opacity:1});  
          });
          /*
          //загружает только выбранную часть
          $(container_div).load(url+" "+content_div, function(){  
            $(container_div).animate({opacity:1}); //возвращает прозрачность обратно на  1
          });
          */
          
      });
    },
    
    //Инициализация 
    //-----------------------------------------------------------------------------
    //- определяются изменяемые блоки
    //- выполняется первый переход
    init: function(params){ //задает первоначальные настройки
        opacity_div = params.opacityDiv;
        blocks = params.blocks;
        changeHead = params.changeHead;
        exception_address = params.exceptionAddress;
        
        if(params.links){
          links = params.links;
          for (var i in links) {
            
            AjaxContent.ajaxify_links(links[i]);
          }
        }
        
        var url = AjaxContent.addressUrl();
        if(url['type']){ 
          //Если зашли по ajax ссылке
          AjaxContent.getContent(location.host, url['pathname'], true,''); 
        }
        else{
          //Зашли по обычной ссылке
          firstURL = true;
        }
        
        //Проверка соответвия открытой страницы и того адреса, который указан в адресной строке forward/back)
        AjaxContent.reviewAddress(0);
        
        return this; //выводит объект
    },
    
    //Функция анализирует текущий адрес 
    //-----------------------------------------------------------------------------
    addressUrl: function(){
      var arrdess = new Array();
      //ajax ссылка с якорем
      if(location.hash.substring(0,1)=='#'){ 
        arrdess['pathname'] = location.hash.substring(1,(location.hash.length));
        arrdess['type'] = 1;
      }
      //обычная ссылка
      else{ 
        arrdess['pathname'] = location.pathname;
        arrdess['type'] = 0;
      }
      return arrdess;
    },
    
    //Функция проверающая изменение текущего адреса (для back и forward)
    //выполняет обновление целевой зоны если якорь изменился 
    //-----------------------------------------------------------------------------
    reviewAddress: function(period){
      if(!period) period = 100;
      $("body").everyTime(period, function(i) {
        var url = AjaxContent.addressUrl();
        if((url['pathname']!=openUrl) && (!firstURL)) { 
          firstURL =false;
          AjaxContent.getContent(location.host, url['pathname'], false,'');
        }
      });
      
    },
    
    
    //Функция перехвата переходов по ссылкам с целевых блоков
    //-----------------------------------------------------------------------------
    ajaxify_links: function(elements){
      $(elements).live("click",function(){
        if($(this).attr('href').substr(0,7)=='http://') return true;
        //адреса исключения (не используем ajax)
        for (var i in exception_address) {
          if(this.pathname==exception_address[i]) return true;
        }      
        //alert("link_not_exeption");
        AjaxContent.getContent(this.host, this.pathname, false, this.search);
        return false; //предотвращает нажатие на ссылку
      });
    },
    
    
    //Функция изменения адреса (в адресной строке показывает ajax ссылку)
    //специфична для разных браузеров
    //-----------------------------------------------------------------------------
    addressRefrash: function(pathname){
      var l = '#'+pathname;
      var ua = navigator.userAgent.toLowerCase();
      
      //реализация редиректа с сохранением реферера для ИЕ и Оперы
      if (ua.indexOf('opera') > -1 || ua.indexOf('msie') > -1) {
        //для ИЕ нужно чтобы ссылка была внутри документа
        if (ua.indexOf('msie') > -1) {
          //alert("ie");
          //document.write('<a href="'+l+'" id="redirect" style="display:none"> </a>')
          //document.getElementById('redirect').click(); 
          document.location.href = '#/'+pathname;    
          
        } else {
          //для Оперы можно просто создать обьект-ссылку и кликнуть по ней
          var a = document.createElement('a');
          a.setAttribute('href', l);
          a.click();
        }            
      } 
      //chrome
      else if(ua.indexOf('chrome') > -1){
        location.assign(l);
      }
      //редирект для нормальных браузеров
      else {
        document.location = l;
      }
    }
  }
}();


$(function(){
  //Инициируем перезагружаемую область
  //переключение меню
  $(".menu-left a").live("click",function(){
    $(".menu-left a[class=act]").removeClass("act");
    $(this).addClass("act");
  });
  
  var ua = navigator.userAgent.toLowerCase();
  if (ua.indexOf('msie') <= -1) {
    AjaxContent.init({
      opacityDiv: "#data",
      blocks:[
        ".box .title",
        ".box .inner",
        ".box2 .title",
        ".box2 .inner"
      ],
      links: [
        "#nav a",
        ".menu-left a",
        ".ref a",
        "#data a"
      ],
      exceptionAddress: [
        "/contacts/",
        "/search/"
      ],
      menuName: ".menu-left", 
      changeJs:false,
      changeHead: true
    });
  }

  
  
  /*а можно так ссылки
  AjaxContent.ajaxify_links(".menu-left a");
  AjaxContent.ajaxify_links(".ref a");
  AjaxContent.ajaxify_links("#data a");  
  */
});
