//<![CDATA[
// JQuery Unserialize v1.0 by James Campbell
var $j = jQuery.noConflict();
$j.unserialise = function(Data){
  var data = Data.split("&");
  var Serialised = new Array();
  Serialised[0] = new Array();
  Serialised[1] = new Array();
  $j.each(data, function(){
      var Properties = this.split("=");
      //if(Properties[0].search('['))
      Serialised[0].push(Properties[0]);
      Serialised[1].push(Properties[1]);

  });
  return Serialised;
};

var ListFilter = {
  
  mgr : null,  
  current_hash: null,

  applyTitleFilter: function()
  {
    $j("a.filter_title").click(function()
    {
      var elem = "div#div_"+$j(this).attr("name")+"_block_filter";
      if($j(elem).css('display') == "block")
        $j(elem).hide();
      else
        $j(elem).show();
    })
  },
  
  applyCategoryFilter: function()
  {
    if($j('input.category_filter:checked').size() == 0)
      $j("#category_indiferent").attr("checked", "checked");

    $j("input.category_filter").live('change', function()
    {
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      
      if( typeof(_gaq) == 'object' )
      _gaq.push(['_trackEvent', 'Recursos da listagem', 'Filtro por categoria', $j(this).next().text() ]);
      
      if($j(this).val() == 0)
      {
        $j(this).attr("checked", "checked");
        $j("input.category_filter").each(function()
        {
          if($j(this).val() != 0)
            $j(this).attr("checked", "");
        });
      }
      else
      {
        if($j("input.category_filter:checked").size() == 0)
          $j("#category_indiferent").attr("checked", "checked");
        else
          $j("#category_indiferent").attr("checked", "");
      }
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
    });
  },

  applySupplierNameFilter: function()
  {

    $j("#btn_supplier_name").live('click', function()
    {
      //alert('aha! click');
      ListFilter.showLoading();
      
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
      
      if( typeof(_gaq) == 'object' && $j('#supplier_name').val() != '' )
      _gaq.push(['_trackEvent', 'Recursos da listagem', 'Filtro por nome', $j('#supplier_name').val() ]);
      
    });
    
    // submete o form, somente quando pressionar enter
    $j("#supplier_name").live('keypress', function(event)
    {
      //alert('aha!');
      var charCode = (event.which) ? event.which : event.keyCode;
      if(charCode == 13){
        ListFilter.defaultOrder();
        ListFilter.defaultPager();
        ListFilter.setHash($j("#formFilters").serialize());
        ListFilter.loadPage(null, true);
        
        if( typeof(_gaq) == 'object' && $j('#supplier_name').val() != '' )
          _gaq.push(['_trackEvent', 'Recursos da listagem', 'Filtro por nome', $j('#supplier_name').val() ]);
      }
    });
    
    // limpa o input, esconde o botao e carrega a listagem
    $j("#bt_clear_supplier_name").live('click', function()
    { 
      $j("#supplier_name").val('');
      $j("#supplier_name").focus();
      $j("#bt_clear_supplier_name").hide();
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
    });
    
    // exibe o botao de limpar quando insere texto no input
    $j("#supplier_name").live('keyup', function()
    { 
      if( $j("#supplier_name").val() != '' )
      {
        $j("#bt_clear_supplier_name").show();
      }
      else
      {
        $j("#bt_clear_supplier_name").hide();
      }
    });
    
    /* exibe o botao de limpar quando carrega a pagina, 
        caso tenha algum texto em cache e recarrega a listagem */
    if( $j("#supplier_name").val() != '' )
    {
      $j("#bt_clear_supplier_name").show();
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
    }
    else
    {
      $j("#bt_clear_supplier_name").hide();
    }
  },
  
  applyNeighborhoodFilter: function()
  {
    if($j('input.neighborhood_filter:checked').size() == 0)
      $j("#neighborhood_indiferent").attr("checked", "checked");

    $j("input.neighborhood_filter").live('change', function()
    {
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      if($j(this).val() == 0)
      {
        $j(this).attr("checked", "checked");
        $j("input.neighborhood_filter").each(function()
        {
          if($j(this).val() != 0)
            $j(this).attr("checked", "");
        });
      }
      else
      {
        if($j("input.neighborhood_filter:checked").size() == 0)
          $j("#neighborhood_indiferent").attr("checked", "checked");
        else
          $j("#neighborhood_indiferent").attr("checked", "");
      }
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
    });
  },

  showAmmenities: function()
  {
    $j("#showAmmenitesFilter").html("Carregando <img src='/images/ajax-loader.gif'>");
    $j.post(
      "/search/ammenitiesFilter",
      $j("#formFilters").serialize(),
      function(ret)
      {
        $j("#div_ammenity_block_filter").html(ret);
        if($j("#showAllAmmenities").val() == "0")
        {
          $j("#showAmmenitesFilter").html("Ver Principais");
          $j("#showAllAmmenities").val("1");
        }
        else
        {
          $j("#showAmmenitesFilter").html("Ver Todas");
          $j("#showAllAmmenities").val("0");
        }

      }, 'html'
    );
  },
  
  applyAmmenityFilter: function()
  {
    if($j('input.ammenity_filter:checked').size() == 0)
      $j("#ammenity_indiferent").attr("checked", "checked");

    $j("input.ammenity_filter").live('change', function()
    {
      ListFilter.defaultOrder();
      ListFilter.defaultPager();
      if($j(this).val() == 0)
      {
        $j(this).attr("checked", "checked");
        $j("input.ammenity_filter").each(function()
        {
          if($j(this).val() != 0)
            $j(this).attr("checked", "");
        });
      }
      else
      {
        if($j("input.ammenity_filter:checked").size() == 0)
          $j("#ammenity_indiferent").attr("checked", "checked");
        else
          $j("#ammenity_indiferent").attr("checked", "");
      }
      ListFilter.setHash($j("#formFilters").serialize());
      ListFilter.loadPage(null, true);
    });
  },

  init : function(){

    ListFilter.debug('init filters');
    $j("#basicfilters").show();
    ListFilter.applyCategoryFilter();
    ListFilter.applySupplierNameFilter();
    ListFilter.applyNeighborhoodFilter();
    ListFilter.applyAmmenityFilter();
    ListFilter.showLoading();
    ListFilter.initHash();
    ListFilter.applyTitleFilter();
    ListFilter.applySlider();
    ListFilter.applyMap();    
    ListFilter.hideLoading();
    ListFilter.applyClearFilter();
    ListFilter.applyScroll();
  },

  applyScroll: function(){
    jQuery('body').delegate('#hotels_results_box_pagebottom a' ,'click', function(){      
      jQuery.scrollTo(jQuery('.scrollMe'), 800);
    });
  },
  
  getIcon : function(){
    var icon = new GIcon();
    icon.image = "/images/icons-hotels-mark-1.png";
    icon.shadow = "/images/icons-hotels-mark-shadow.png";
    icon.iconAnchor = new GPoint(9, 34);
    icon.iconSize = new GSize(36, 36);
    icon.infoWindowAnchor = new GPoint(9, 2);
    return icon;
  },

  debug : function( msg ){
    //$j('#basicfilters').before('<li>'+msg+'</li>');
  },

  hideLoading : function(){
    $j("#loading-mala").hide();
  },

  showLoading : function(){
    $j('#loading-mala').show();
  },
  
  getHotelById : function( id ){

    for(var i=0; i<ListFilter.allmarkers.length; i++){
      if( ListFilter.allmarkers[i].id == id )
      return ListFilter.allmarkers[i];
    }

  },
  
  tryToLoadMap : function(){

    var internacional = false;

    if( Map.map === null ){
      try{        
        Map.Bing.loadHotelsList(internacional);
      }catch(e){
        Map.Bing.loadHotelsList(internacional);
      }
      
    if( typeof(_gaq) == 'object' )
      _gaq.push(['_trackEvent', 'Recursos da listagem', 'Visualização no mapa']);
        
    }else{
      $j('#map').show();      
    }

  },

  applyMap : function(){

    try{
      // adiciona o evento de click na imagem do mapa
      $j('#map_preview').click( function (){
        var mapcheck = $j('#show_map');
        if( mapcheck.is(':checked') ){
          mapcheck.attr('checked', false);
          $j('#map, #mapinfo').each( function(){ $j(this).hide() });
          ListFilter.removeLinkToMarker();
        }else{
          mapcheck.attr('checked', true );
          $j('#mapinfo').show();
          ListFilter.tryToLoadMap();
          ListFilter.applyLinkToMarker();
        }
      });

      $j('#show_map').click( function(){
        if( $j( this ).is(':checked') ){
          try{
            $j('#mapinfo').show();
            ListFilter.tryToLoadMap();
            ListFilter.applyLinkToMarker();
          }catch( e ){
           ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
          }
        }else{
          try{
            $j('#map, #mapinfo').each( function(){ $j(this).hide() });
            ListFilter.removeLinkToMarker()
          }catch( e ){
            ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
          }
        }
      });

      if( $j('#show_map').is(':checked') ){
        ListFilter.tryToLoadMap();
        ListFilter.applyLinkToMarker();
      }

    }catch( e ){
      ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
    }

  },

  defaultOrder : function()
  {
    $j("#order_alias").val("");
    $j("#order_type").val("");
  },

  defaultPager : function()
  {
    $j("#pageNum").val("1");
  },

  callPager: function(page)
  {
    ListFilter.setHash($j("#formFilters").serialize());
    $j("#pageNum").val(page);
    ListFilter.loadPage();
    
    if( typeof(_gaq) == 'object' )
    _gaq.push(['_trackEvent', 'Recursos da listagem', 'Paginação', page]);   
    
  },
  callOrder: function(name, type)
  {
    ListFilter.setHash($j("#formFilters").serialize());
    $j("#pageNum").val(1);
    $j("#order_alias").val(name);
    $j("#order_type").val(type);
    
    ListFilter.loadPage();
    
    if( typeof(_gaq) == 'object' )
    _gaq.push(['_trackEvent', 'Recursos da listagem', 'Ordenação', name]);

  },

  updateSlideInfo : function( min_price, max_price){
    $j("#sliderinfo").html("R$"+parseInt( min_price)+",00 - R$"+parseInt( max_price)+",00"  );
  },

  applySlider : function(){
    $j("#slider-range").slider({
      range: true,
      min: parseInt( $j('#min_price_limit').val() ),
      max: parseInt( $j('#max_price_limit').val() ),
      values: [ parseInt( $j('#min_price').val() ), parseInt( $j('#max_price').val() ) ],
      slide: function(event, ui) {
        ListFilter.updateSlideInfo(ui.values[0], ui.values[1]);
      },
      stop: function(event, ui) {
        $j('#min_price').val( parseInt( ui.values[0] ) );
        $j('#max_price').val( parseInt( ui.values[1] ) );
        ListFilter.setHash($j("#formFilters").serialize());
        ListFilter.defaultPager();
        ListFilter.loadPage(null, true);
        
        if( typeof(_gaq) == 'object' )
        _gaq.push(['_trackEvent', 'Recursos da listagem', 'Filtro por preço', $j("#sliderinfo").html() ]);
        
      }
    });

    ListFilter.updateSlideInfo( $j('#min_price').val(), $j('#max_price').val() );
  },

  setHash: function(new_hash){
    ListFilter.current_hash = new_hash.replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/#/g, '').replace(/%2B/g, ' ');
    window.location.hash = ListFilter.current_hash;
  },

  initHash: function(){
    ListFilter.current_hash = ListFilter.getHash();
    hashCheck = setInterval( "ListFilter.checkHash()", 100 );
    
    // ancora utilizada para carregar o mapa diretamente
    if( ListFilter.current_hash == "mapa" ){
      ListFilter.applyMap();
      $j('#show_map').attr('checked', 'checked');
    }else if(ListFilter.current_hash != "")
    {
      ListFilter.loadPageFromHash();
    }
  },

  checkHash: function(){
    if ( ListFilter.getHash() != ListFilter.current_hash )
    {      
      ListFilter.current_hash = ListFilter.getHash();
      ListFilter.loadPageFromHash();
    }
  },

  getHash: function()
  {
    return window.location.hash.replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/#/g, '');
  },

  updateFiltersFromHash : function(){

    var unserialised = $j.unserialise(ListFilter.getHash());
    var hashVerify = false;
    for(var i=0; i<unserialised[0].length; i++)
    {
      if($j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "hidden" || $j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "text")
        hashVerify = true;
      else
      {
        if($j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "checkbox")
          hashVerify = true;
      }
    }
    if(ListFilter.getHash() == "" || !hashVerify)
    {

      $j("#category_indiferent").attr("checked", "checked");
      $j("#neighborhood_indiferent").attr("checked", "checked");
      $j("#ammenity_indiferent").attr("checked", "checked");
      $j("#supplier_name").val("");
      $j("#min_price").val($j("#min_price_limit").val());
      $j("#max_price").val($j("#max_price_limit").val());
    }
    else
    {
      $j("#formFilters input:hidden").each(function(){$j(this).val("")});
      $j("#formFilters input:checkbox").each(function(){$j(this).attr("checked","")});
      for(var i=0; i<unserialised[0].length; i++)
      {
        if($j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "hidden" || $j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "text")
          $j("#formFilters input[name="+unserialised[0][i]+"]").val(unserialised[1][i].replace(/%2B/g, ' ').replace(/\+/g, ' '));
        else
        {
          if($j("#formFilters input[name="+unserialised[0][i]+"]").attr("type") == "checkbox")
            $j("#formFilters input[name="+unserialised[0][i]+"][value="+unserialised[1][i]+"]:checkbox").attr("checked", "checked");
        }
      }
    }
    ListFilter.applySlider();
    ListFilter.applySupplierNameFilter();
  },

  loadPageFromHash : function(){

    try{

      ListFilter.updateFiltersFromHash();
      ListFilter.loadPage(null, true)

    }catch( e ){
      ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
    }

  },

  loadPage : function( param, reloadMap ){

    try{
      
      ListFilter.showLoading();
      $j.post(
        "/malapronta.php/ajax/manageFilters",
        $j("#formFilters").serialize().replace(/%2B/g, ' ').replace(/\+/g, ' '),
        function(ret)
        {
          $j("#div_hotels_list").html(ret);
          if( $j( '#show_map' ).is(':checked') && reloadMap ){
            ListFilter.loadMarkers();
            ListFilter.applyLinkToMarker();
          }else if( $j( '#show_map' ).is(':checked') ){
            ListFilter.applyLinkToMarker();
          }
          ListFilter.hideLoading();
        },'html'
      );

    }catch( e ){
      ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
    }

  },
  
  loadMarkers: function(){
    
    jQuery('.loadingBlock').show();
    
    try{
      
      var internacional = false;      
      
      try{
        Map.Bing.loadMarkersByHotelIds(internacional);
      }catch(e){
        Map.Bing.loadMarkersByHotelIds(internacional);
      }
      
    }catch(e){
      if(console.log)
        console.log(e.message)
    }
    
    jQuery('.loadingBlock').hide();
    
  },

  removeLinkToMarker : function(){
    $j("div.hotel_info span.link a").prev().remove();
    $j("div.hotel_info span.link a").text('Mapa');
  },

  applyLinkToMarker : function(){

    try{

      $j("div.hotel_info span.link a").each( function(){

        //$j(this).before('<img src="/images/icon-marker-map1.png">');
        $j(this).text('Clique para ver no mapa');

        $j(this).click( function(){

          //verifica se a visão de mapa está ativa

          var checkboxmap = $j('#show_map');
          if( checkboxmap.attr('checked') ){

            return false;

          }

        });

      });
    }catch( e ){
      ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
    }

  },
  
  clear : function(){
  
    try{
      
      $j("input.category_filter").attr("checked", "");
      $j("#category_indiferent").attr("checked", "checked");
      $j("input.neighborhood_filter").attr("checked", "");
      $j("#neighborhood_indiferent").attr("checked", "checked");
      
      $j('#min_price').val( parseInt( $j('#min_price_limit').val() ) );
      $j('#max_price').val( parseInt( $j('#max_price_limit').val() ) );
      
      ListFilter.applySlider();
      
      $j("#bt_clear_supplier_name").click();
      
      if( typeof(_gaq) == 'object' && $j('#supplier_name').val() != '' )
      _gaq.push(['_trackEvent', 'Recursos da listagem', 'Limpa filtros' ]);
      
    }catch( e ){
      ListFilter.debug( '<strong>ERRO: '+e.message+'</strong>' );
    }
  }
}

$j(document).ready(function(){
  try{
    ListFilter.init();
  }catch( e ){

    ListFilter.debug( e.message );
    ListFilter.hideLoading();

  }
});
