﻿/*
  jQuery skripty pro Dream-Cars.cz
  Autor: Martin Michalek, Studio Shortcat, michalek@shortcat.cz
*/

/* -----------------------------------------------------------------
   Pred nactenim dokumentu 
*/

function jQuery_before_document_load() {

    // Animuje karusel na titulce, aby bylo patrne, 
    // ze obsahuje vice polozek
    function animate_cars_carousel() {
      if ( $('#page-home').length ) {
        $('.jcarousel-next').hide();
        setTimeout("$('.jcarousel-clip').scrollTo($('#cars-carousel-subaru-impreza-wrx-sti'), 200, {axis:'x'} );", 1000);
        setTimeout("$('.jcarousel-clip').scrollTo('0px', 500, {axis:'x'} );", 1200);
        setTimeout("$('.jcarousel-next').show();", 1400);
      }
    }
    
    // Animuje karusel v ceniku, aby bylo patrne, 
    // ze obsahuje vice polozek
    function animate_pricelist_carousel() {
        $('.jcarousel-next').hide();
        setTimeout("$('.jcarousel-clip').scrollTo($('#pricelist-car-7'), 200, {axis:'x'} );", 500);
        setTimeout("$('.jcarousel-clip').scrollTo('0px', 200, {axis:'x'} );", 700);
        setTimeout("$('.jcarousel-next').show();", 900);
    }
    
    // Nacteni karuselu s auty
    $('#cars-carousel').jcarousel({
        scroll: 4,
        initCallback: animate_cars_carousel
    });
    
    // Nacteni karuselu na strance Cenik
    $('#pricelist-carousel').jcarousel({
        scroll: 3,
        initCallback: animate_pricelist_carousel
    }); 
    
    // Stranka partneri: osetreni tabu (kvuli pomalemu nacitani v IE8- musi byt zde)
    $("#page-partners #navigation-second").tabs("#tabs-content > div", { 
      history: true,
      effect: 'fade'
    });
    
    // Stranka auta/motorky: osetreni tabu (kvuli pomalemu nacitani v IE8- musi byt zde)
    $("#page-cars #navigation-second").tabs("#tabs-content > div", { 
      history: true,
      effect: 'fade'
    });

   // Zjisti rozmery okna s dokumentem a pripadne prida tridu .bigger-than-1024
   check_document_size();

} // jQuery_before_document_load()

// Validuje objednavkovy formular
function validate_order_form() {
  jQuery.validator.messages.required = "";
  $('#formular').validate({ 
        invalidHandler: validator_invalid_handler
    });	
}

// Prepocitava cenu objednavky
function recount_car_price() {

  // Cenova uroven slovne specifikovana v selektitku #doba - napr '1hour'
  var price_level = $('#doba option:selected').attr('value');

  // Pole z nasi pseudodatabaze, ze ktereho ziskavame cenu - napr. car_price['caterham-7-roadsport']
  var price_array = car_price[$('#auto option:selected').attr('value')];
  
  // Prevadi slovne specifikovanou cenovou uroven ziskanout 
  // ze selektitka #doba na skutecnou cenu z cenoveho pole
  function get_car_price() {
    if (price_level == '1hour') { return price_array[1]; }
    else if (price_level == '3hours') { return price_array[2]; }
    else if (price_level == '1day') { return price_array[3]; }
    else if (price_level == '2days') { return 2 * price_array[3]; }
    else if (price_level == '3days') { return 3 * price_array[3]; }
    else if (price_level == '4days') { return 4 * price_array[3]; }
    else if (price_level == 'weekend') { return price_array[4]; }
    else if (price_level == 'week') { return price_array[5]; }
    else if (price_level == 'month') { return price_array[6]; }
    else { return false; }
  }

  // Cena na kilometr pro pristaveni/vraceni
  var get_car_price_on_kilometer = price_array[0];   

  // Vrati pocet kilometru jako cislo z vybraneho elementu, kdyz je uzavren 
  // v kulatych zavorkach napr. "České Budějovice (155 km)"
  function get_kilometers_from_brackets(element) {
    if (element.val() == 'Jiné') {
      return 0;
    } else {
      var brackets_regexp = /\(.*\)/;
      var replaced_unit = ' km';
      var text_with_brackets = element.text().match(brackets_regexp).toString();
      if (text_with_brackets == '(zdarma)') {
        return 0;
      } else {
        return parseInt(text_with_brackets.replace(replaced_unit,'').replace('(','').replace(')','').toString());  
      } 
    }
  }
  
  // Paušal za přistavení/vrácení mimo Prahu
  function apposition_fixed_price() {
   if ( ($('#pristaveni option:selected').val() == 'Praha') && ($('#vraceni option:selected').val() == 'Praha') )
     return 0;
   else  
     return 500;
  }
  
  // Pocita celkovou cenu jako cenu za vuz a dane obdobi
  // plus cenu za pristaveni a vraceni
  function get_price() {
    return get_car_price() + 
      apposition_fixed_price() +
      ( get_car_price_on_kilometer * get_kilometers_from_brackets($('#pristaveni option:selected')) ) + 
      ( get_car_price_on_kilometer * get_kilometers_from_brackets($('#vraceni option:selected')) );
  }

  // Vypiseme novou cenu
  $('#cena').text(get_price().toLocaleString() + ' Kč');
  
  Cufon.refresh('#price-row th');
  
  // Ulozime cenu do celkove ceny pro emailove potvrzeni
  $('#celkemCena').val(get_price());
  
} // recount_car_price()

// Zobrazi policko pro zadani jineho mista pristaveni/vraceni
// nez je v seznamu
function show_other_apposition(type) {
  if ($('#'+type).val() == 'Jiné') {
    $('#'+type+'-jine').show();
    $('#price-not-complete-help').show();
  } else {
    $('#'+type+'-jine').hide();
    if ( ($('#pristaveni').val() != 'Jiné') && ($('#vraceni').val() != 'Jiné'))
      $('#price-not-complete-help').hide();
  };
}

// Pokud vybereme dobu pronajmu na jednu hodinu,
// schovame vsechna pristaveni krome Prahy
// v pripade vyberu jine doby musime schovane obnovit
// Diky IE nelze <option> jen schovavat, ale musime obsah 
// zkopirovat a pak vratit nazpet
function handle_apposition_with_time() {
  if ($('#doba').attr('value') == '1hour') {
    $('#pristaveni').clone().appendTo('body').attr('id','pristaveni_copy').hide();
    $('#pristaveni option').remove();
    $('#pristaveni').append('<option value="Praha" selected>Praha (zdarma)</option>');
    $('#vraceni').clone().appendTo('body').attr('id','vraceni_copy').hide();    
    $('#vraceni option').remove();
    $('#vraceni').append('<option value="Praha" selected>Praha (zdarma)</option>');
    $('#vraceni-jine, #pristaveni-jine').hide();
  } else if (($('#pristaveni_copy').length) && ($('#vraceni_copy').length)) {
    $('#pristaveni').remove(); 
    $('#pristaveni_copy').prependTo('#pristaveni_td')
      .attr('id','pristaveni').show()
      .bind('change', function() {
        show_other_apposition('pristaveni');
      });
    $('#vraceni').remove(); 
    $('#vraceni_copy').prependTo('#vraceni_td')
      .attr('id','vraceni').show()
      .bind('change', function() {
        show_other_apposition('vraceni');
      });
  }
}

/* -----------------------------------------------------------------
   Po nacteni dokumentu
*/

$(document).ready(function() {

    // Spustime nahradu fontu Cufónem
    cufon_replace();
    
    // Oznacime externi odkazy
    $('a').not('.link-out').filter(function() {
      return this.hostname && this.hostname !== location.hostname;
    }).addClass("link-out").append("<span></span>");
    
    // Kliknuti na prvek s tridou .clickable zpusobi presmerovani na vnoreny odkaz
    handle_clickable();

    // Kliknuti na polozku karuselu
    $('.jcarousel-item:not(.comments)').click(function(event) {
	    location.href=$(this).find("a").attr("href");
    }); 
    
// === Stranka Auta ===    
    // Hover nad aute na strance Auta
    $('#page-cars #cars-list li').hover(function() {
	    $(this).addClass("hover");
	  }, function() {
      $(this).removeClass("hover");
    }); 

    // Kliknuti na auto na strance Auta
    $('#page-cars #cars-list li').click(function(event) {
	    location.href=$(this).find("a").attr("href");
    }); 
    

  
// === Stranka Partneri ===    
    // Mouseover na obsah zalozky Pomahame
    $('#page-partners #tab-pomahame').hover(function() {
	    window.status=$(this).find("a").attr("href");
	    return true;
	  }, function() {
      window.status="";
      return true;
    }); 

    // Kliknuti na obsaz zalozky Pomahame
    $('#page-partners #tab-pomahame').click(function(event) {
	    location.href=$(this).find("a").attr("href");
    });     
   
    
// === Stranka cenik === 
    // Vyrolovani na komentare 
    $('#page-pricelist #go-to-comments').click(function(event) {
      $('.jcarousel-clip').scrollTo( $('#pricelist-comment-1'), 1000, {axis:'x'} );
      $('#pricelist-tabs a#go-to-pricelist').removeClass('active');
      $(this).addClass('active');
      return false;
    });
    
    // Vyrolovani na ceny 
    $('#page-pricelist #go-to-pricelist').click(function(event) {
      $('.jcarousel-clip').scrollTo( $('#pricelist-car-1'), 1000, {axis:'x'} );
      $('#pricelist-tabs a#go-to-comments').removeClass('active');
      $(this).addClass('active');
      return false;
    });
    

// === Objednavka ===
    // Fadeout chybove hlasky
      if ($('.message')) {
        setTimeout("$('.message').fadeOut()", 3000);
      }
      
    // Prepocteme cenu auta
      if ($('#page-order').length) {
        // Po nacteni stranky
        recount_car_price();
        $('#pristaveni-jine').hide();
        $('#vraceni-jine').hide();
        $('#price-not-complete-help').hide();
        // Po zmene ve formulari..
        $('#doba').change(function () {
          handle_apposition_with_time();
        });
        $('#pristaveni').change(function () {
          show_other_apposition('pristaveni');
        });
        $('#vraceni').change(function () {
          show_other_apposition('vraceni');
        });
        $('#doba, #pristaveni, #vraceni').change(function () {
          recount_car_price();
        });
        $('#auto').change(function () {
          location.href = '/objednavka.php?car='+$(this).attr('value');
        });
        // Validuje formular
        validate_order_form();
      }


// === Blikani ===
    $(function () {
     setInterval(function () {
       $('.blinking').each(function () {
         this.style.visibility = this.style.visibility == 'hidden' ? 'visible' : 'hidden';
       });
     }, 1200);
    });


// === Tooltip na napovede k cene, ktera neni vypoctena kompletne ===
      $(".tooltip").easyTooltip({
        xOffset: 25,
        yOffset: 5
      }); 
      

// === Akce na hlavicce pro roadshow
      if ( !!$('#roadshow-head').length ) {
        $('#roadshow-head').click(function() {
          location.href = $(this).find("a:first").attr("href")
        });
      }

  // Akce v detailu akce Roadshow  
  if ( !!$('#page-roadshow-event').length )
    handle_roadshow_detail();
    
  // Hlidame nacitani fotek z Flickru ve fotogalerii
  if ( !!$('.photogallery-thumbnail').length )
    handle_fancygallery();
    
  if ( !!$('#page-about #fotogalerie').length ) {
    $('#page-about #fotogalerie').click(function() {
      location.href=$(this).find("a:first").attr("href");        
    });
  }
    

});



// ----------------------------------------------------------------------------
// Handlery pro akce uzivatele


// Kliknuti na prvek, jez si o to vylozene rika tridou .clickable
// - zpusobi presmerovani na prvni vnoreny odkaz
function handle_clickable() {
  $('.clickable').click(function() {
    location.href=$(this).find("a:first").attr("href");
  });
}


// Akce v detailu akce Roadshow  
function handle_roadshow_detail() {

  // Otevirame vrstvy s tabulkou terminu
  $('.select-car, .selected-car').click(function() {
    $('#event-cars-overflow, #event-cars').show();
    $('body').addClass('without-scrollbars');
    return false;
  });
  
  // Zavirame tutez vrstvu
  $('#event-cars .close').click(function() {
    $('#event-cars-overflow, #event-cars').hide();
    $('body').removeClass('without-scrollbars');
    return false;
  });
  
  // Zavirame na ESC
  $(document).keyup(function(event){
    if (event.keyCode == 27) {
      $('#event-cars-overflow, #event-cars').hide();
      $('body').removeClass('without-scrollbars');
    }
  });

  // Validujeme formular pro rezervaci auta na Roadshow
  jQuery.validator.messages.required = "";
  $('#form form').validate({ 
        invalidHandler: validator_invalid_handler
  });	
    
}


// ----------------------------------------------------------------------------
// Helpery

// Zjisti rozmery okna s dokumentem a pripadne prida 
// tridu .bigger-than-1024
function check_document_size() {
  if ($(window).width() > 1024)
    $('body').addClass('bigger-than-1024');
}


// Spustime nahradu fontu Cufónem
function cufon_replace() {

   Cufon
     .set('hover', true)
     .replace
    ('#page-head h1')
    ('#car-text h1')
    ('#price-conditions h3 strong')
    ('#price-row th')
    ('#home-news h2')
    ('.event-on-map .date')
    ('#page-roadshow-event fieldset h3')
    ('#event-cars h2')
    ('.cufonize');

} 




// Upravime handler pro chybovy stav pro jQuery validate
function validator_invalid_handler(e, validator) {
    var errors = validator.numberOfInvalids();
    $('#content').append('<div class="error"></div>');
    if (errors) {
        var message = 'Vyplňte prosím povinné položky'
        $("div.error span").html(message);
        $("div.error").show();
    } else {
        $("div.error").hide();
    }
}


/* Hlidame nacitani fotek z Flickru ve fotogalerii */
function handle_fancygallery() {
    // Nacitame data automaticky z Flickru
    // TODO: spustime loading indikator
    $(".photogallery-thumbnail a").click(function() {
      // Vycistime tu globalni promennou
      $.fancybox.showActivity();
      window.fancygallery_flickr_auto_data = [];  
      get_flickr_data_from_set( get_flickr_set_id($(this).attr('href')) , fancygallery_flickr_api_key );
      return false;
    });
    
    // Cekame na skonceni AJAXU, kterym se nacita JSON z Flickru
    // TODO: 
    // * je potreba zobecnit: hlidat, jestli mame plne fancygallery_flickr_auto_data a ukoncit vsechny 
    //   loading indikatory 
    // * Seskupit nastaveni FB do nejakeho objektu dovnitr naseho pluginu
    $(window).ajaxComplete(function(){
      if (!!$('html.fancygallery-complete').length) {
        $.fancybox( 
        // Data
        fancygallery_flickr_auto_data,
        // Nastaveni Fancyboxu
        {
          'onComplete': fancygallery_start,     
          'onClosed': function() { $("body").removeClass('fancybox-active'); $("html").removeClass('fancygallery-complete'); $('#fancybox-thumbnails').remove(); },
          'overlayOpacity': .8,
          'overlayColor': '#000',
          'padding': '0'
        }
        );
      }
    });
}