/*
  jQuery skripty pro web Prazskeho jara (www.festival.cz)
  Autor: Martin Michalek, Studio Shortcat, michalek@shortcat.cz
*/

jQuery.noConflict()

// ----------------------------------------------------------------------------
// Po nacteni dokumentu volame funkce podle prislusnosti ke 
// konkretnim HTML prvkum

jQuery(document).ready(function() {

  // Spustime nahradu fontu Cufónem
  cufon_replace();

  // Oznacime externi odkazy
  mark_external_links();

  // Po najeti mysi pridame ke zminenym prvkum tridu .hover
  is_hoverable('.multimedia, #calendar .day, .print-this-item, .pseudo-button, .contitions-block, #competition-home-jurors tr, #competition-home-articles .article');

  // Po kliknuti prejdeme na stranku v odkazu zminenych prvku
  is_clickable('.contitions-block, #competition-home-jurors tr, #competition-home-articles .article');

  // Osetrime akce na vyhledavacim okenku
  if (jQuery('#site-search').length)
    handle_site_search();

  // Osetrime akce na prehravaci multimedii (zejmena v Clancich)
  if (jQuery('.multimedia:not(.in-layer)').length)
    handle_multimedia();

  // Akce na prehravaci multimedii ve vrstve (napr. v Programu)
  if (jQuery('.multimedia.in-layer').length)
    handle_multimedia_in_layer();

  // Akce na hightlights (na titulni strance)
  if (jQuery('.pages.index #highlights').length) 
    handle_homepage_highlights();

  // Chovani boxiku partneri (na titulni strance) 
  if (jQuery('.pages.index #partners').length)
    handle_homepage_partners();

  // Kliknutim na zavreni banneru na titulce se ulozi cookie, 
  // aby se priste nezobrazoval
  if (jQuery('.page-home #big-banner').length)
    handle_homepage_big_banner();

  // Kliknutim na maly banner smazame cookie a reloadneme stranku
  if (jQuery('.page-home #small-banner').length)
    handle_homepage_small_banner();    

  // Novinky na uvodni strance - kliknuti na celou plochu polozky 
  jQuery('#articles-for-homepage .article-item').click(function() {  
      location.href=jQuery(this).find('strong a').attr('href');
  });

  // Prepinatko jazyka (vpravo nahore)  
  if (jQuery ('#switch-locale').length)
    handle_locale_switch();

  // Prepinatko jazyka (vpravo nahore)  
  if (jQuery ('.friends.index').length)
    handle_friends();

  // Osetreni nacitani detailu v novem programu
  if (jQuery ('.program_events').length) {
    initializeEventTitle();
    initializeSelects();
    loadFromHash();
    initializeCloseTip();
  }

  // Fadeout chybove nebo informativni hlasky
  if (jQuery('.message').length)
    handle_message_fadeout();

  // Inicializace prvku, ktere potrebujeme nacitat i AJAXem v ramci celeho webu
  initializePhotogallery();  
  initializeAjaxSearchBox();

  
}); // jQuery(document).ready(function()


// ----------------------------------------------------------------------------
// Funkce

// Vypocte sirku rolovatka prohlizece
// Tnx to Jonathan Sharp: http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php
function scrollbar_width() {
    var div = jQuery('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div>');
    jQuery('body').append(div);
    var w1 = jQuery('div', div).innerWidth();
    div.css('overflow-y', 'scroll');
    var w2 = jQuery('div', div).innerWidth();
    jQuery(div).remove();
    return (w1 - w2);
}

// Zjisti, zda prohlizec je Firefox
function is_firefox() {
  return (navigator.userAgent.indexOf("Firefox") > 0)
}


// Spustime nahradu fontu Cufónem
function cufon_replace() {
   Cufon.set('hover', true);
   Cufon.replace
    ('.replace-type')
    ('#web-title')
    ('#content-head h1')
    ('#section-head h2')
    ('.page-perex big')
    ('body:not(.pages.index) #content h2')
    ('.pages.index #articles-for-homepage h2')
    ('#competition-results .instrument  .round h3')
    ('.venues #venue h2')
    ('.calendar-date strong:not(small)')
    ('.articles .article h2, .article_sections .article h2, .articles.show .article h1')
    ('.friends-quarter h3');
} 


// Oznacime externi odkazy
function mark_external_links() {
  jQuery('a').not('.link-out').not('.jquery_do_not_mess_with_me').filter(function() {
  return this.hostname && this.hostname !== location.hostname;
  }).addClass('link-out').append('<span></span>');
}


// Klinuti na celou plochu prvku obsahujiciho jeden odkaz
function is_clickable(clicked_element) {
 jQuery(clicked_element).click(function(event) {
   location.href=jQuery(this).find('a').attr('href');				  
 }); 
}


// Po najeti mysi prida tridu .hover
function is_hoverable(hovered_element) {
 jQuery(hovered_element).hover(function() {
   jQuery(this).addClass('hover');
 },function(){
   jQuery(this).removeClass('hover');
 }); 
}


// Inicializace fotogalerie s FancyBoxem - otevirani velkych fotek 
function initializePhotogallery() {

  // Na mouseover se zobrazuje titulek fotky
  jQuery('.photo-gallery a:not(.anchor), .programme-stars-photo-gallery a').hover(
    function() { 
      jQuery(this).parent().find('.photo-title span').text(jQuery(this).attr('title'));
    },
    function() { 
      jQuery(this).parent().find('.photo-title span').text('');
    }  
 );

  // FancyBox - otevirani velkych fotek
  jQuery('.photo-gallery a:not(.anchor), .program_events .photos a, .event-body .photos').fancybox({
        'padding'		              :	0,
        'overlayOpacity'          : 0.8,
        'overlayColor'            : '#322a21',
        'hideOnOverlayClick'      : false,
        'hideOnContentClick'      : true,
        'centerOnScroll'          : true,
        'transitionIn'            : 'elastic',
        'transitionIn'            : 'elastic',
        'onStart'                 : function() { 
                                      if (!is_firefox()) {
                                        jQuery('html').addClass('fancybox-active'); 
                                        jQuery('#top-navigation').css('margin-right', scrollbar_width().toString()+'px');
                                      }
                                    },
        'onClosed'                : function() {
                                      if (!is_firefox()) {
                                        jQuery('html').removeClass('fancybox-active');
                                        jQuery('#top-navigation').css('margin-right', '0');
                                      }
                                    }
   });
}


// Akce na vyhledavacim okenku
function handle_site_search() {
  // Ulozime text ve vyhledavacim policku
  var original_value = jQuery('#site-search-input').attr('value');
  // pri zamereni uzivatele na vyhledavaci policko odstranime text 
  // a pridame tridu focus, ktera pole zvyraznuje
  jQuery('#site-search-input').focus(function() {
    jQuery(this).attr('value','');
    jQuery('#site-search').addClass('focus');
  // pri zamereni uzivatele kdekoliv jinam vratime text a odstranime tridu focus
  }).blur(function () {
    if ( jQuery('#ajax-search-box').length == 0 ) {        
      jQuery(this).attr('value', original_value);
      jQuery('#site-search').removeClass('focus');
    }
  // pri zmacknuti Escape  totez
  }).keyup(function(event) {
    if (event.keyCode == 27) {
      jQuery(this).attr('value', original_value);
      jQuery('#site-search').removeClass('focus');
    }
  });
}


// Osetrime akce na prehravaci multimedii (zejmena v Clancich)
function handle_multimedia() {
  jQuery('.multimedia .player').hide();	
  jQuery('.multimedia:not(.in-layer) h3').click(function() {
    jQuery(this).parent().toggleClass('opened').find('.player').toggle(300);
    return false;
  });
}


// Akce na prehravaci multimedii ve vrstve (v Programu)
function handle_multimedia_in_layer() {
  jQuery('.multimedia').hide();
  jQuery('.multimedia .close').click(function() {
    jQuery(this).parents('.multimedia').hide();
    return false;
  });
  jQuery('.related-content .video a').click(function() {    
    jQuery(this).removeClass('link-out');
    var class_name = jQuery(this).attr('class');    
    var right_position = - jQuery(window).width() + jQuery('#content').width() + 20;
    jQuery('.multimedia#'+class_name).css('right', right_position);
    jQuery('.multimedia#'+class_name).show();
    return false;
  });
  jQuery('body').keyup(function(event) {
    if (event.keyCode == 27) {
      jQuery('.multimedia').hide();
    }
  });  
}

// Inicaializujeme Ajaxove vysledky vyhledavani po jejich otevreni
function initializeAjaxSearchBox() {
  is_hoverable('.search-result-item, #ajax-search-box-close');
  is_clickable('.search-result-item');
}


// Osetrime chovani hightlights (na titulni strance)
function handle_homepage_highlights() {

  // jquery.cycle prirazuje .activeSlide vzdy k <a>, ale to my predefinujeme 
  // vlastni funkci, aby hledal .highlight-item-inside
  jQuery.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
      jQuery(pager).find('.highlight-item-inside').removeClass('activeSlide').filter('.highlight-item-inside:eq('+currSlide+')').addClass('activeSlide');
  };

  // Slideshow na fotkach
  jQuery('#highlights-images').cycle({ 
      fx:     'fade',                                             // efekt pro prechod 
      timeout: 3000,                                              // delka zobrazovani jednoho obrazku
      speed:   800,                                               // rychlost prechodu (blokujici mouseover)
      pause:   true,                                              // na mouseover se zastavi
      pauseOnPagerHover: true,                                    // na mouseover strankovace se taky zastavi
      pager:   '#highlights',                                     // selektor pro blok navigace
      pagerEvent: 'mouseover',                                    // udalost pro aktivaci polozky navigace
      pagerAnchorBuilder: function(idx, slide) {                  // vraci selektor pro polozku navigace
          return '#highlights .highlight-item:eq(' + idx + ')';   
      }        
  });

  // Kliknuti na polozku slideshow
  jQuery('.highlight-item h2 a').click(function() {
    location.href=jQuery(this).attr('href');                                  
  });     
}


// Osetrime akce na partnerech (na titulni strance)
function handle_homepage_partners() {

  // zkopirujeme box s partnery (#partners) do 
  // noveho (#partners-coloured), abychom mezi nimi mohli morfovat
  jQuery('.page-home #partners')
    .clone()
    .attr('id', 'partners-coloured')
    .insertAfter('.page-home #partners');

  // zmenime zdroje obrazku v #partners-coloured
  jQuery('.page-home #partners-coloured #partner-ministerstvo-kultury img')
    .attr('src', '/images/partners/homepage-ministerstvo-kultury_on.gif');
  jQuery('.page-home #partners-coloured #partner-ceska-sporitelna img')
    .attr('src', '/images/partners/homepage-ceska-sporitelna_on.gif?2');
  jQuery('.page-home #partners-coloured #partner-rwe img')
    .attr('src', '/images/partners/homepage-rwe_on.gif?3');
  jQuery('.page-home #partners-coloured #partner-praha img')
    .attr('src', '/images/partners/homepage-praha_on.gif');
  jQuery('.page-home #partners-coloured #partner-ct img')
    .attr('src', '/images/partners/homepage-ct_on.gif');

  // na mouseover vyfadujeme #partners, tudiz se objevi #partners-coloured
  jQuery('.page-home #partners').hover(function() { 
      jQuery(this)
        .addClass('hover')
        .fadeTo('slow', 0);
    }, 
    function () {
      jQuery(this)
        .removeClass('hover')
        .fadeTo('fast', 1);
  });

  // na click presmerujeme na stranku Partneri
  jQuery('.page-home #partners').click(function() { 
      location.href='/partneri';
  });
}  


// Kliknutim na zavreni banneru na titulce se ulozi cookie, 
// aby se priste nezobrazoval
function handle_homepage_big_banner() {
  jQuery('.page-home #big-banner .close').click(function(){
      jQuery('#content.page-home').removeClass('with-big-banner');
      jQuery('.page-home #big-banner').hide();
      jQuery.cookie('homepage_banner_closed', '1', {expires: 250});
      return false;
  })
}

// Kliknutim na maly banner smazame cookie a reloadneme stranku
function handle_homepage_small_banner() {
  jQuery('.page-home #small-banner').click(function(){
      jQuery.cookie('homepage_banner_closed', null);
      window.location.reload();
      return false;
  })
}


// Prepinatko jazyka (vpravo nahore)  
function handle_locale_switch() {
  // Presuneme aktualni jazyk na prvni misto seznamu a pridame mu tridu 'first'
  jQuery('#switch-locale span.active')
    .clone()
    .insertBefore('#switch-locale span:first')
    .addClass('first');
  jQuery('#switch-locale span.active:not(.first)')
    .remove();

  // Kvuli zakulacenym rohum v CSS najdeme take posledni prvek
  jQuery('#switch-locale span:last')
    .addClass('last');    

  // Na kliknuti na aktualni jazyk zobrazime seznam jazyku
  jQuery('#current-locale, #switch-locale').click(function() {
    jQuery('#switch-locale')
      .toggle();
  });
}  

// Stranka Pratele
function handle_friends() {
  jQuery('.friends .more-than-basic, .friends .plus-image')
    .css('cursor','pointer');
  jQuery('.friends .basic-benefits')
    .hide();
  jQuery('.friends .more-than-basic, .friends .plus-image').click(function() {
    jQuery(this)
      .parent()
      .find('.basic-benefits')
      .toggle('fast');                                       
  });
}

// Osetreni nacitani detailu v novem programu
function initializeEventTitle() {
  jQuery('.ticketpro-link').click(function(event) {
    location.href = jQuery(this).attr('href');
    event.stopPropagation();
  });    
  jQuery('.detail_loader').live('click', function(event) {
    var target = jQuery(event.originalTarget);
    if(target.attr('class') != 'link-out') {
      var eventHead = jQuery(this);
      var eventLine = eventHead.parents('.event');
      var anchor = eventLine.find('a');
      var opened = jQuery('.opened');
      var url = anchor.attr('href');
      eventLine.addClass('loading');
      jQuery.get(url + '/detail',
        anchor.serialize(),
        function(data) {
          opened.removeClass('opened');
          opened.children('.event-body').remove();
          eventLine.removeClass('loading');
          eventLine.addClass('opened');
          window.location.hash = url.split('/').last().split('-').first();
          eventHead.after(data);
          handle_multimedia_in_layer();   
          initializePhotogallery();
          Cufon.replace('#events h2');
          if (!!window.pageTracker)
            pageTracker._trackPageview('http://' + location.host + url);
        });
      eventHead.removeClass('detail_loader');
      eventHead.addClass('detail_closer');
      return false;
      } else {
       event.stopPropagation();
       window.location = target.attr('href'); 
      }});
  jQuery('.detail_closer').live('click', function() {
    var eventHead = jQuery(this);
    var eventLine = eventHead.parents('.event');
    var detail = eventLine.find('.detail');

    eventLine.removeClass('opened');
    eventLine.children('.event-body').remove();
    eventHead.removeClass('detail_closer');
    eventHead.addClass('detail_loader');
    return false;
  })
}

function initializeSelects() {
  jQuery('#venues > select option[value=0]').attr("selected", "selected");
  jQuery('#event-groupings > select option[value=0]').attr("selected", "selected");
  jQuery('#event-categories > select option[value=0]').attr("selected", "selected");

  jQuery('#event-categories > select').change(
    function() {
      var id = jQuery(this).val();
      var url = window.location.pathname + '/categories'
      if (id != 0) { url = url + '/' + id }
      jQuery('#programme-options').addClass('loading');
      jQuery.get(url, '',
        function(data) {
          jQuery('#events').html(data);
          jQuery('#programme-options').removeClass('loading');
          clearHash();
          Cufon.replace('#events h2');
        });
      jQuery('#venues > select option[value=0]').attr("selected", "selected");
      jQuery('#event-groupings > select option[value=0]').attr("selected", "selected");
    }
  )

  jQuery('#venues > select').change(
    function() {
      var id = jQuery(this).val();
      var url = window.location.pathname + '/venues'
      if (id != 0) { url = url + '/' + id }
      jQuery('#programme-options').addClass('loading');
      jQuery.get(url, '',
        function(data) {
          jQuery('#events').html(data);
          jQuery('#programme-options').removeClass('loading');
          clearHash();
          Cufon.replace('#events h2');
        });
      jQuery('#event-categories > select option[value=0]').attr("selected", "selected");
      jQuery('#event-groupings > select option[value=0]').attr("selected", "selected");
    }
  )

  jQuery('#event-groupings > select').change(
    function() {
      var id = jQuery(this).val();
      var url = window.location.pathname + '/groups'
      if (id != 0) { url = url + '/' + id }
      jQuery('#programme-options').addClass('loading');
      jQuery.get(url, '',
        function(data) {
          jQuery('#events').html(data);
          jQuery('#programme-options').removeClass('loading');
          clearHash();
          Cufon.replace('#events h2');
        });
      jQuery('#venues > select option[value=0]').attr("selected", "selected");
      jQuery('#event-categories > select option[value=0]').attr("selected", "selected");
    }
  )
}

function loadFromHash() {
  if(window.location.hash != '') {
    var eventId = window.location.hash.split('#').last();
    var event = jQuery('#program_event_' + eventId);
    var eventHead = event.find('.event-head');
    var url = '/program/' + eventId + '/detail';

    event.addClass('loading');
    jQuery.get(url, '',
      function(data) {
        event.addClass('opened');
        event.removeClass('loading');
        eventHead.after(data);
        handle_multimedia_in_layer();
        initializePhotogallery();
        $('program_event_' + eventId).scrollTo();
        Cufon.replace('#events h2');
        if (!!window.pageTracker)
          pageTracker._trackPageview('http://' + location.host + url);
      });
    eventHead.removeClass('detail_loader');
    eventHead.addClass('detail_closer');
// prototype mixin! Take care.
  }
}

// Kliknutim na zavreni tipu v novem programu se ulozi cookie, 
// aby se priste nezobrazoval
function initializeCloseTip() {
  jQuery('#programme-tip > .close > a').click(function(){
      jQuery('#programme-tip').hide(); 
      jQuery.cookie('tip_closed', '1', {expires: 250});
  })
}

function clearHash() {
  if(!(BrowserDetect.browser == 'Firefox' && BrowserDetect.version == '3')) {
    window.location.hash = '';
  }
}

// Fadeout chybove nebo informativni hlasky 
function handle_message_fadeout() {
  function blind_up(element) {
    jQuery('.message').animate({ 
      top: '-200px'
    }, 400 );
  }  
  setTimeout(blind_up, 3000);
}

