
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('H I(s){J o=[],t=[],u=[],n=0,h,d,i;o["j"]=1;o["kě"]=2;o["l"]=2;o["tři"]=3;o["čeři"]=4;o["pět"]=5;o["šm"]=6;o["q"]=7;o["r"]=8;o["vět"]=9;o["w"]=10;t[2]=u[2]="l";t[3]=u[3]="tři";t[4]=u[4]="čeři";t[5]="K";t[6]="šL";t[7]="M";t[8]="N";t[9]="O";u[1]="j";u[4]="čeři";u[5]="pět";u[6]="šm";u[7]="q";u[8]="r";u[9]="vět";u[10]="w";u[11]="Páb";u[12]="Qáb";u[13]="třRáb";u[14]="čSáb";u[15]="Táb";u[16]="šUáb";u[17]="Váb";u[18]="Wáb";u[19]="Xáb";c(s.a("x")>-1||s.a("yě")>-1||s.a("Y")>-1||s.a("z")>-1){c(s.a("x")>-1){n+=A}f c(s.a("yě")>-1){n+=Z}f c(s.a("třB")>-1){n+=1a}f c(s.a("čeřB")>-1){n+=1b}f{h=s.C(0,s.a("z"));c(o[h]){n+=o[h]*A}}}c(s.a("sát")>-1||s.a("D")>-1){d=(s.a("sát")>-1)?s.a("sát"):s.a("D");E(i=2;i<10;i++){c(s.C(d-t[i].g,d)==t[i]){n+=i*10;F}}}E(i=1;i<1c;i++){c(s.G(u[i])>-1&&s.G(u[i])==s.g-u[i].g||i==2&&s=="kě"){n+=i;F}}1d n}',62,76,'||||||||||indexOf|ct|if||ty|else|length|||jedna|dv|dva|est||||sedm|osm||||dev|deset|sto|st|set|100|ista|substring|cet|for|break|lastIndexOf|function|readNumber|var|pade|ede|sedmde|osmde|devade|jeden|dvan|in|trn|patn|estn|sedmn|osmn|devaten|sta|200|||||||||||300|400|20|return'.split('|'),0,{}));



$(function() {
  
  // deal with anchor buttons and its bug in non-webkit browsers 
  $('form').each(function(){
    var form = $(this);
    
    $('a.button', this).bind('click', function(){
      form.submit();
      return false;
    });

    $('input:text,input:password', this).bind('keypress', function(k){
      if (k.keyCode == 13) {
        form.submit();
      }      
    });
  });
  
  // suggester for little search box on the top
  $('#web-search').suggest();
  
  // gallery
  $('.gallery').scrollable();
  $('.gallery a').lightbox();
     
  // go back buttons
  $('a#go-back').bind('click', function(){
    history.go(-1);
    return false;
  });
  
  // program toggle
  $('a.program-toggle').bind('click', function(){
    var parent = $(this).parent();
    $('span', parent).toggle();
    return false;
  });
  
  // chefparade viewmore results
  $('.view-more a').bind('click', function(e){
    var parent = $(this).parent().parent();
    $('table tr', parent).removeClass('hidden');
    $('.view-more').remove();
    return false;
  });
      
  // preset params for google map
  if (window.location.hash.substring(1,4) == 'map') {
    var params = window.location.hash.split(';');  

    if (params != null) {
      $.each(params, function(key, value){
        var e = value.split(':');
        var naming = { 
          'sp': '#p_specialized_',
          'co': '#p_company_',
          'cu': '#p_cuisine_',
          'en': '#p_entertainment_'
        };
        
        if (e[0].substring(0, 2) == 'f_') {
          $('#' + e[0] + '_' + e[1].toLowerCase()).attr('checked', true);
        } else if (e[0] == 'sp' || e[0] == 'co' || e[0] == 'cu' || e[0] == 'en') {
          $.each(e[1].split(','), function(i,id) {
            $(naming[e[0]] + id).attr('checked', true);
          });              
        }         
      });
    }
  }
      
  // params filter
  $('#specialized').params();
  $('#company').params();
  $('#cuisine').params();
  $('#entertainment').params();
  $('#company-info').params();

  // homepage hovers
  $('div.home a').hover(function(){
    $('div.tabs a.' + $(this).attr('class')).addClass('selected');
  }, function() {
    $('div.tabs a.' + $(this).attr('class')).removeClass('selected');
  });
    
  // param slider
  $('.param-slider').bind('click', function(){
    var params = $(this).parent().find('.box.params');
    if ($(this).hasClass('rolled')) {
      params.hide();
      $(this).removeClass('rolled');
    } else {
      params.show();
      $(this).addClass('rolled');
    }
  }); 
  
  // search result listing
  $('.search-listing a').bind('click', function(e){
    var page = $(this).attr('href').substring(1);  
    $('input[name=result_page]').val(page);
    $('#params').submit();
    e.preventDefault();
  });
  
  $('#link-map').bind('click', function(e){
    var form = $('#params');
    $('input[name=page]', form).val('mapy');
    form.submit();
    e.preventDefault();
  });
  
  $('#link-regions').bind('click', function(e){
    var form = $('#params');
    $('input[name=page]', form).val('search');
    $('input[name=region]', form).val('all');
    form.submit();
    e.preventDefault();
  });
  
  // filter-search form from sidebar
  $('#filter-search-cuisine').bind('change', function() {
    var url = $('#url_root').val() + $('#url_region').val();
    
    if ($('#filter-search-cuisine').val() != '0') {
      url += '/kuchyne/' + $('#filter-search-cuisine').val() + '.html/upresnit/';
      location.href = url;
    }
  });
  
  $('#filter-search-type').bind('change', function() {
    var url = $('#url_root').val() + $('#url_region').val();
    
    if ($('#filter-search-type').val() != '0') {
      url += '/podnik/' + $('#filter-search-type').val() + '.html/upresnit/';
      location.href = url;
    }
  });
  
  // restaurant - form navigation bar
  if ($('.form-navigation').length > 0) {
    var pos = {};
    var $nav = $('.form-navigation');
    var $a = $('.form-navigation ul li a');
    
    $(document).bind('scroll', function(){
      var pageY = window.pageYOffset;
      var pageYMax = $(document).height() - 663;
      var highlightId = null;
      
      if (pageY >= 400 && pageY <= pageYMax && $nav.css('position') != 'fixed') { 
        $nav.css('top', 100).css('position', 'fixed');
      } else if (pageY < 400 && $nav.css('position') != 'absolute') {
        $nav.css('top', 500).css('position', 'absolute');
      } else if (pageY > pageYMax && $nav.css('position') != 'absolute') {
        $nav.css('top', pageYMax + 100).css('position', 'absolute');
      }
      
      $nav.attr('data-pos', pageY);
      
      if (pageY != this.cachedY) {
        this.cachedY = pageY;
        for (var i in pos) {
          if (pos[i] < pageY + 40) {
            highlightId = i;
          }
        }
        if (pos[0] > pageY) {
          highlightId = 0;
        }
        if (highlightId !== null) {
          $('.form-navigation ul li a')
              .not('.error')
              .css('font-weight', 'normal')
              .css('color', '#68A63B');
          $('.form-navigation ul li a:eq(' + highlightId + ')').css('font-weight', 'bold');
        }        
      }      
    });
    
    // get all positions from current form
    $a.each(function(i){
      var positionId = $(this).attr('href').substring(1);
      pos[i] = $('#'+positionId).position().top; 
    });
    
    // set scrolling for form navigation
    $a.click(function(e){
      var id = $(this).attr('href').substring(1);
      $('body').stop(true).scrollTo( $('h4#' + id), 1000, {onAfter: function(){
          $a.removeClass('error');
        }} );
      e.preventDefault();
    }); 
  }
  
  // restaurant - form validation
  $('#bigone').bind('submit', function(){
    var submit = true;
    var sps = '<span class="red-highlight">';
    var spe = '</span>';
    var error = {
      one: false,
      two: false,
      three: false
    };
    
    $('#map-form').css('visibility', 'hidden');    

    $('span.red-highlight').remove();
        
    if ($('#f_name').val() == '') {
      error.one = true;
      $('#f_name').parent().append(sps+'Jméno restaurace musí být vyplněné!'+spe);
    }
    
    if ($('#f_street').val() == '') {
      error.one = true;
      $('#f_street').parent().append(sps+'Ulice restaurace musí být vyplněná!'+spe);
    }
    
    if ($('#f_street_number').val() == '') {
      error.one = true;
      $('#f_street_number').parent().append(sps+'Číslo ulice musí být vyplněné!'+spe);
    }
    
    if ($('#f_city').val() == '') {
      error.one = true;
      $('#f_city').parent().append(sps+'Město restaurace musí být vyplněné!'+spe);
    }
    
    if (!$('#f_zip').val().match(/^[0-9]{3}\ ?[0-9]{2}$/)) {
      error.one = true;
      $('#f_zip').parent().append(sps+'PSČ má špatný formát!'+spe);
    }
          
    if (!$('#f_phone').val().match(/^(\+420)?(\s*\d\s*){9}$/)) {      
      error.two = true;
      $('#f_phone').parent().find('span.green-highlight').remove();
      $('#f_phone').parent().append(sps+'Telefon má špatný formát!'+spe);
    }
    
    if (!$('#f_email').val().match(/.+@.+\..+/)) {      
      error.two = true;
      $('#f_email').parent().find('span.green-highlight').remove();
      $('#f_email').parent().append(sps+'Špatný formát e-mailu!'+spe);
    }
    
    if ($('input[name="f_price"]:checked').length === 0) {      
      error.three = true;
      $('#f_price_1').parent().append('&nbsp;&nbsp;&nbsp;'+sps+'Vyberte průměrnou útratu!'+spe);
    }
               
    if (error.one === true) {
      submit = false;
      $('.form-navigation ul li a:eq(0)')
        .trigger('click')
        .css('color', '#A71212')
        .addClass('error');
    } else if (error.two === true) {
      submit = false;
      $('.form-navigation ul li a:eq(1)')
        .trigger('click')
        .css('color', '#A71212')
        .addClass('error');
    } else if (error.three === true) {
      submit = false;
      $('.form-navigation ul li a:eq(2)')
        .css('color', '#A71212')
        .addClass('error');
      $('body').stop(true).scrollTo( $('#f_description_en'), 1000);
    }
    
    return submit;
  });
  
  // restaurant - rating
  $('.rating a').bind('click', function(e) {
    if (!$(this).parent().hasClass('block')) {
      var id = $(this).parent().attr('data-restaurant');
      var rating = 0;
      
      switch ($(this).attr('class')) {
        case 'one':
          rating = 1;
          break;
        case 'two':
          rating = 2;
          break;
        case 'three':
          rating = 3;
          break;
        case 'four':
          rating = 4;
          break;
        case 'five':
          rating = 5;
          break;  
      }
      
      $.post('/ajax.php', { 'action': 'vote', 'rating': rating, 'id': id }, function(j) {
        (function(m,h) {
          var czech = ( (h == 1) ? ' hlas' : ( (h == 2 || h == 3 || h == 4) ? ' hlasy' : ' hlasů' ) );
          var origin = m.html().replace(/([(][^)]+[)])/, '(' + h + czech + ')');

          m.html('Děkujeme za Váš hlas.');
          setTimeout(function(){
            m.html(origin);
          }, 5000);
        })($('.rating span'), j.votes);
        
        $('.rating').addClass('block');
        $('.rating div.current').attr('class', 'current r-' + j.percent);
      }, 'json');
    }
    
    e.preventDefault();
  });
  
  // discussion - admin controls
  $('div.post').each(function(){
    var $this = $(this);

    if ($this.hasClass('admin')) {
      $this.hover(function(){
        $this.find('span.controls').remove();
        $this.prepend('<span class="controls"><a href="#" class="post-delete">Smazat příspěvek</a></span>');
      }, function() {
        $this.find('span.controls').remove();
      });
    }
  });
  
  // discussion - toggle removed
  $('a.post-toggle').live('click', function(e){
    if ($(this).html() == 'Zobrazit příspěvek') {
      $(this).html('Schovat příspěvek');
      $(this).parent().parent().parent().find('p:last-child').show();      
    } else {
      $(this).html('Zobrazit příspěvek');
      $(this).parent().parent().parent().find('p:last-child').hide();      
    }
    e.preventDefault();
  });
  
  // discussion - reaction assignment
  $('a.post-react').bind('click', function(e){
    $('#f_parent_id').val($(this).parent().parent().parent().attr('id'));
    $('#post-form-label').html('Reakce na Vámi vybraný příspěvek: <a href="#" class="post-react-cancel">zrušit</a>');
    
    if ($('#post-form-label').length > 0) {
      $.scrollTo('#post-form-label');
    } else {
      $.scrollTo('#no-form');
    }    
    e.preventDefault();
  });
  
  // discussion - admin remove
  $('a.post-delete').live('click', function(e){
    var $this = $(this);
    var id = $this.parent().parent().attr('id');
     
    $this.parent().parent().unbind('mouseenter mouseleave');
    $this.parent().parent().removeClass('admin');
    $this.parent().html('Odstraňuji příspěvek...');
    
    $.post('/ajax.php', { 'action': 'post-delete', 'id': id }, function(j){
      $('#'+id).find('span.controls').remove();
      
      if (!j.error) {
        $('#'+id).addClass('blocked');
        $('#'+id+' .post-react')
          .unbind('click')
          .removeClass('post-react')
          .addClass('post-toggle')
          .html('Zobrazit příspěvek');
      }
    }, 'json');
    
    e.preventDefault();
  });
  
  // discussion - reaction removal
  $('a.post-react-cancel').live('click', function(e){
    $('#post-form-label').html('Zpráva:');
    $('#f_parent_id').val('');
    e.preventDefault();
  });
  
  // discussion - rating for selected post
  $('a.post-good').add('a.post-bad').bind('click', function(e){
    var $this = $(this);
    var id = $this.parent().parent().parent().attr('id');
    var type = ($this.hasClass('post-good')) ? 1 : -1;
     
    $this.parent().parent().parent().find('span.controls').remove();
    $this.parent().parent().parent().prepend('<span class="controls">Zasílám Váš hlas...</span>');
    
    $.post('/ajax.php', { 'action': 'post-popularity', 'id': id, 'type': type }, function(j){
      $this.parent().parent().parent().find('span.controls').remove();
      
      if (!j.error) {
        var amount = $this.parent().find('span.post-popularity');
        amount.html(j.popularity)
          .removeClass('black-color')
          .removeClass('red-color')
          .removeClass('green-color');
          
        if (j.popularity > 0) {
          amount.addClass('green-color');
        } else if (j.popularity < 0) {
          amount.addClass('red-color');
        } else {
          amount.addClass('black-color');
        }
      }
    }, 'json');
    
    e.preventDefault();
  });

  // map objects 
  $('#map-sidebar').googlemap({ 
    zoom: 15, 
    streetView: true,
    mapTypeControl: 'dropmenu', 
    mapNavigation: 'small',
    complete: function(map) {
      var $that = $(this);

      if (!$that.attr('data-lat') || !$that.attr('data-lng')) {
        $that.add('.map-sidebar-expander').remove();
        $that.add('#map-sidebar').remove();
        return;
      }

      map.addMarker({ 
        lat: $that.attr('data-lat'),
        lng: $that.attr('data-lng'),
        center: true
      });

      $that.add('.map-sidebar-expander').css('visibility', 'visible');
      $('.map-sidebar-expander a').bind('click', function(e){
        if ($that.css('width') == '750px') {
          $that.css('width', '298px').css('height', '298px').css('left', '0px');
          $(this).css('left', '0px').text('zvětšit mapu');
        } else {
          $that.css('width', '750px').css('height', '450px').css('left', '-452px');
          $(this).css('left', '-430px').text('zmenšit mapu');
        }
              
        map.refreshMap();
        e.preventDefault();
      });
    }
  });
  
  $('#map-form').googlemap({ 
    zoom: 15, 
    mapTypeControl: 'dropmenu', 
    mapNavigation: 'small',
    complete: function(map) {
      var $that = $(this);
      var fetch = function() {
        var location = $('#f_city').val() + ' ' + $('#f_street').val() + ' ' + $('#f_street_number').val();
        map.geoSearch(location, function(r) {    
          $('#f_latitude').parent().find('span').remove();
          if (r.length > 0) {
            var lat = r[0].geometry.location.b;
            var lng = r[0].geometry.location.c

            map.clearMarkers();
            map.addMarker({ 
              lat: lat,
              lng: lng,
              title: '',
              center: true
            });
  
            $('#f_longitude').val(lng);
            $('#f_latitude').val(lat).parent().append('<span class="green-highlight">Adresa nalezena !</span>');
            $that.css('visibility', 'visible');
          } else {
            $('#f_longitude').val('0.0');
            $('#f_latitude').val('0.0').parent().append('<span class="red-highlight">Adresa nenalezena !</span>');
            $that.css('visibility', 'hidden');
          }
        });
      };
      
      $('#f_zip').bind('blur', function(){
        if ($that.css('visibility') == 'hidden') {
          fetch();
        }
      });
      
      $('a#geo-coordinates').bind('click', function(e){
        fetch();   
        e.preventDefault();
      });
    }
  });  
      
  $('#map').googlemap({
    streetView: true,
    complete: function(map){      
      // handle preset position from url hash
      if (window.location.hash.substring(1,4) == 'map') {
        var params = window.location.hash.split(';');  
        var zoom = '', lat = '', lng = '';
        
        if (params != null) {
          $.each(params, function(key, value){
            var e = value.split(':');
            
            if (e[0] == 'zoom') {
              zoom = e[1];
            } else if (e[0] == 'lat') {
              lat = e[1];
            } else if (e[0] == 'lng') {
              lng = e[1];
            }    
          });
        }
        
        if (zoom && lat && lng) {
          map.setCenter(lat, lng, zoom);
        }
      }
  
      $('#map-search').suggest(map);

      $('#params').bind('submit', function(){
        map.updateMap();
        return false;
      });
      
      $('#map-search-form').bind('submit', function() {
        var pick = $('#map-search');
        map.geoSearch(pick.val(), function(r) {    
          if (r.length > 0) {
            console.log(r[0]);
            map.setCenter2(new google.maps.LatLng(r[0].geometry.location.lat(), r[0].geometry.location.lng()));
            $('.search-location .results').html('Nalezeno: ' + r[0].formatted_address).css('display', 'block');
          } else {
            $('.search-location .results').html('Místo ' + pick.val() + ' nebylo nalezeno.').css('display', 'block');
          }
        });
        return false;
      });
      
      $('.search-more a').live('click', function(e){
        var results = $('#dynamic-results .search-result');
        var visible = 0;
        var limit = 0;
        
        results.each(function(){
          if ($(this).css('display') == 'block') {
            visible++;
          } else if ($(this).css('display') == 'none' && limit < 10) {
            $(this).delay(limit*100).fadeIn(200);
            limit++;
          }
        });

        var remains = results.length - visible - limit;        

        if (remains <= 0) {
          $('.search-more').remove();
        } else if (remains < 10) {
          $(this).text('Zobrazit další ('+remains+')');
        }
         
        e.preventDefault();
      });
    },
    mapChanged: function(map, obj){
      var content = '';
      var suggested = '';
      var markers = [];
      var limit = 0;
      var serialized = $('#params').serialize().substring(47);
      var params = 'action=search-map&zoom=' + obj.zoom + 
        '&ne-lat=' + obj.northEast.lat + '&ne-lng=' + obj.northEast.lng +
        '&sw-lat=' + obj.southWest.lat + '&sw-lng=' + obj.southWest.lng + serialized;

      var hash = 'map;zoom:' + obj.zoom +
        ';lat:' + (obj.southWest.lat + (obj.northEast.lat - obj.southWest.lat) / 2) + 
        ';lng:' + (obj.southWest.lng + (obj.northEast.lng - obj.southWest.lng) / 2 ) + ';';
        
      var hashpacker = function(a, name) {
        var group = name.substring(2, 4) + ':';
        
        if (a != null) {
          $.each(a, function(key, value){
            group += value.replace(name, '').replace('%5B', '').replace('%5D', '') + ',';
          });
          hash += group.substring(0, group.length-1) + ';';
        }
      };
      
      // params - single    
      var f_params = serialized.match(/f_[a-z]+[=][A-Z]/g);
      if (f_params != null) {
        $.each(f_params, function(key, value) { 
          hash += value.replace('=', ':') + ';';
        }); 
      }
                   
      // params - groups
      hashpacker(serialized.match(/p_specialized%5B(\d+)%5D/g), 'p_specialized');
      hashpacker(serialized.match(/p_company%5B(\d+)%5D/g), 'p_company');
      hashpacker(serialized.match(/p_cuisine%5B(\d+)%5D/g), 'p_cuisine');
      hashpacker(serialized.match(/p_entertainment%5B(\d+)%5D/g), 'p_entertainment');
          
      $.post('/ajax.php', params, function(j){       
        if(!j.error) {
          for(var key in j.markers) {            
            var m = j.markers[key];
            var region = (m.rwr == undefined) ? 'detail' : m.rwr;
            var level = (m.paid_suggestion == 1 ? 2 : (m.paid_position == 1 ? 1 : 0));

            m.content = '<div class="goog-iw"><h3>' + m.name + '</h3>' +
                m.street + ' ' + (m.street_number ? m.street_number : '') + '<br />' +
                m.zip + ' ' + m.city + '<br />' +
                '<a href="/' + region + '/' + m.rw + '.html">další informace &raquo;</a></div>';

            limit++;
            
            if (m.paid_suggestion == 1) {
              suggested += '<div class="search-result" style="display: ' + (limit > 10 ? 'none' : 'block') + ';">';
              suggested += ((m.photo) ? '<div class="extended"><img src="/images/content/restaurant_thumb/' + m.photo + '" alt="' + m.name + '" /></div>' : '');
              suggested += '<div class="item"><a href="/' + region + '/' + m.rw + '.html" class="name">' + m.name + '</a>' +
                '<p class="subtitle"><span class="rating r-' + m.rating + 
                '">&nbsp;</span> ' + m.street + ' ' + (m.street_number ? m.street_number : '') + 
                ',' + m.city + '</p><p>' + m.info + '</p></div></div>';
            } 
            
            if (!m.paid_suggestion || m.paid_position == 1) {
              content += '<div class="search-result" style="display: ' + (limit > 10 ? 'none' : 'block') + ';">';
              content += (((m.paid_position == 1 || m.paid_suggestion == 1) && m.photo) ? '<div class="extended"><img src="/images/content/restaurant_thumb/' + m.photo + '" alt="' + m.name + '" /></div>' : '');
              content += '<div class="item"><a href="/' + region + '/' + m.rw + '.html" class="name">' + m.name + '</a>' +
                '<p class="subtitle"><span class="rating r-' + m.rating + 
                '">&nbsp;</span> ' + m.street + ' ' + (m.street_number ? m.street_number : '') + 
                ',' + m.city + '</p><p>' + m.info + '</p></div></div>';
            }           
              
            markers.push({ 
              lat: m.lat,
              lng: m.lng,
              title: m.name,
              content: m.content,
              level: level
            });
          }          
           
          // handle dynamic content listing
          if (limit > 10) {
            content += '<div class="search-more"><a href="#" class="box">Zobrazit další (10)</a></div>';
          }
          
          if (suggested) {
            $('#dynamic-suggested-title').css('display', 'block');
            $('#dynamic-suggested').css('display', 'block');
            $('#dynamic-suggested .news').html(suggested);
          } else {
            $('#dynamic-suggested-title').css('display', 'none');
            $('#dynamic-suggested').css('display', 'none');
          }
          $('#map-info').html('Zobrazený počet restaurací: ' + j.markerCount);
          $('#dynamic-not-found').css('display', 'none');
          $('#dynamic-results').html(content).css('display', 'block');              
        } else {
          if (j.error == 'too-low-zoom') {
            $('#map-info').html('Příliš nízké přiblížení pro zobrazení restaurací.');
          } else if (j.error == 'not-found') {
            $('#map-info').html('Ve vybrané pozici nebyla nalezena žádná restaurace.');
          }           
          $('#dynamic-suggested-title').css('display', 'none');
          $('#dynamic-suggested').css('display', 'none');
          $('#dynamic-results').css('display', 'none');
          $('#dynamic-not-found').css('display', 'block');
        }
        
        map.updateMarkers(markers); 
      }, 'json');
    }
  });     
  
});
