$(document).ready(function(){
  
  var config = {
    siteURL   : 'obeclomnice.cz',  // web, který používá hledání 
    searchSite  : true,
    type    : 'web',
    append    : false,
    perPage   : 8,      // Google dovoluje používat maximálně 8
    page    : 0       // První stránka
  }
  
  // Malá šipka, která označuje ikonu typu vyhledávání:
  var arrow = $('<span>',{className:'arrow'}).appendTo('ul.icons');
  
  $('ul.icons li').click(function(){
    var el = $(this);
    
    if(el.hasClass('active')){
      // Ikona je již aktivní
      return false;
    }
    
    el.siblings().removeClass('active');
    el.addClass('active');
    
    // Přesun šipky pod určitou ikonou
    arrow.stop().animate({
      left    : el.position().left,
      marginLeft  : (el.width()/2)-4
    });
    
    // Nastavení typu hledání 
    config.type = el.attr('data-searchType');
    $('#more').fadeOut();
  });
  
  // Nastavení domény webu jako označení pro první radio tlačítko:
  $('#siteNameLabel').append(' '+config.siteURL);
  
  // Označujeme radio tlačítko vyhledávání na webu jako aktivní:
  $('#searchSite').click(); 
  
  // Označujeme ikonu vyhledávání na stránkách jako aktivní:
  $('li.web').click();
  
  // Nastavení vstupní fokusu do textového pole:
  $('#s').focus();

  $('#searchForm').submit(function(){
    googleSearch();
    return false;
  });
  
  $('#searchSite,#searchWeb').change(function(){
    // Zachytáváme akce click na jedné z radio tlačítek.
    // config.searchSite přímá hodnotu true nebo false.
    
    config.searchSite = this.id == 'searchSite';
  });
  
  
  function googleSearch(settings){
    
    // Není-li předáno funkce řádné argumenty,
    // budou použité výchozí hodnoty z objektu konfigurace:
    
    settings = $.extend({},config,settings);
    settings.term = settings.term || $('#s').val();
    
    if(settings.searchSite){
      // Použijte volbu pro Google site: example.com pro omezení vyhledávání
      // na konkrétní doméně:
      settings.term = 'site:'+settings.siteURL+' '+settings.term;
    }
    
    // URL API Google AJAX Search
    var apiURL = 'http://ajax.googleapis.com/ajax/services/search/'+settings.type+'?v=1.0&callback=?';
    var resultsDiv = $('.mainPanelCenterContainer');
    
    $.getJSON(apiURL,{q:settings.term,rsz:settings.perPage,start:settings.page*settings.perPage},function(r){
      
      var results = r.responseData.results;
      $('#more').remove();
      
      if(results.length){
        
        // Pokud byl výsledek vrácen, přidáme ho k elementu div pageContainer,
        // který pak přidává k #resultsDiv:
        
        var pageContainer = $('<div>',{className:'pageContainer'});
        
        for(var i=0;i<results.length;i++){
          // Vytvoření nového objektu výsledků a spuštění jeho metody toString:
          pageContainer.append(new result(results[i]) + '');
        }
        
        if(!settings.append){
          // Tento kód spustí v případě, nového vyhledávání 
          // na místo stisknuti na tlačítko  _Zobrazit více_:
          resultsDiv.empty();
        }
        
        pageContainer.append('<div class="clear"></div>')
               .hide().appendTo(resultsDiv)
               .fadeIn('slow');
        
        var cursor = r.responseData.cursor;
        
        // Kontrolujeme, zda je další stránka s výsledky vyhledávání,  
        // a určujeme, zda se má zobrazit tlačítko _Zobrazit více_:
        
        if( +cursor.estimatedResultCount > (settings.page+1)*settings.perPage){
          $('<div>',{id:'more'}).appendTo(resultsDiv).click(function(){
            googleSearch({append:true,page:settings.page+1});
            $(this).fadeOut();
          });
        }
      }
      else {
        
        // Pří hledaní nebylo nic nalezeno.
        
        resultsDiv.empty();
        $('<p>',{className:'notFound',html:'Nebylo nic nalezeno!'}).hide().appendTo(resultsDiv).fadeIn();
      }
    });
  }
  
  function result(r){
    
    // Definice třídy. Objekt této třídy se vytváří pro každý výsledek hledání.
    // Struktura generuje metodou .toString().
    
    var arr = [];
    
    // GsearchResultClass převedena z API Google
    switch(r.GsearchResultClass){

      case 'GwebSearch':
        arr = [
          '<div class="webResult">',
          '<h4><a href="',r.unescapedUrl,'" target="_blank">',r.title,'</a></h4>',
          '<p>',r.content,'</p>',
          '</div>'
        ];
      break;
      case 'GimageSearch':
        arr = [
          '<div class="imageResult">',
          '<a target="_blank" href="',r.unescapedUrl,'" title="',r.titleNoFormatting,'" class="pic" style="width:',r.tbWidth,'px;height:',r.tbHeight,'px;">',
          '<img src="',r.tbUrl,'" width="',r.tbWidth,'" height="',r.tbHeight,'" /></a>',
          '<div class="clear"></div>','<a href="',r.originalContextUrl,'" target="_blank">',r.visibleUrl,'</a>',
          '</div>'
        ];
      break;
      case 'GvideoSearch':
        arr = [
          '<div class="imageResult">',
          '<a target="_blank" href="',r.url,'" title="',r.titleNoFormatting,'" class="pic" style="width:150px;height:auto;">',
          '<img src="',r.tbUrl,'" width="100%" /></a>',
          '<div class="clear"></div>','<a href="',r.originalContextUrl,'" target="_blank">',r.publisher,'</a>',
          '</div>'
        ];
      break;
      case 'GnewsSearch':
        arr = [
          '<div class="webResult">',
          '<h2><a href="',r.unescapedUrl,'" target="_blank">',r.title,'</a></h2>',
          '<p>',r.content,'</p>',
          '<a href="',r.unescapedUrl,'" target="_blank">',r.publisher,'</a>',
          '</div>'
        ];
      break;
    }
    
    // Metoda toString.
    this.toString = function(){
      return arr.join('');
    }
  }
  
  
});

