jQuery(function($) {

  /*** layout ***/
  
  $('body.travel div.feature').insertBefore('div#lookup');
  $('body.travel div#branding').insertAfter('div#overview');
  
  /*** helper methods ***/
  
  function makeCountryListingPager(all) {    
    pagedList.makeListingPager('overzicht per land', 'reis', 'reizen', all);
    var activeCountry = $('div#filters ul li.active a');
    if(!all && activeCountry.is('*') && $('div#listing div.set').size() == 1) { $('div#listing-pager').html('bestemmingen in ' + activeCountry.eq(0).text()); }
  }
  
  function makeMonthListingPager(all) {    
    pagedList.makeListingPager('overzicht per maand', 'vertrekdatum', 'vertrekdata', all);
  }
  
  function makeSearchListingPager() {    
    pagedList.makeListingPager('zoekresultaten', 'resultaat', 'resultaten');
  }
  
  /*** travel booking ***/
  
  $('form.active_form div.elem_text input, form.active_form textarea').focus(function(e) {
    $(this).parent('div').addClass('focus');
  }).blur(function(e) {
    $(this).parent('div').removeClass('focus');
  });
  
  $('ul#organisations li a').wrapInner('<span></span>');
  $('body#page-travel-book div#branding').insertAfter('#booking_form').css('marginTop', '40px');
  $('body#page-travel-book #booking_form').css('marginBottom', '40px');
  
  if($('body#page-travel-book').is('*')) {
    $('form.active_form input').eq(0).focus();
    
    if(jQuery.validator) {
      jQuery.validator.addClassRules({ 'validate-email': { required: true, email: true } });
      $('form.active_form').validate();
    }
    
    $('.appendable').appendo({
  		maxRows: 8,
  		allowDelete: true,
  		copyHandlers: true,
  		labelAdd: 'Voeg een deelnemer toe',
  		labelDel: 'Verwijder',
  		onAdd: function(row) { $(row).find('input.person-dob').mask('99-99-9999'); }
    });

  	$('input.person-dob').mask('99-99-9999');
    
  }
  
  /*** travel index ***/
  
  $('body#page-travel-index, body#page-travel-search').each(function() { makeCountryListingPager(true); });
  $('body#page-travel-calendar').each(function() { makeMonthListingPager(true); });
  $('ul#available-countries a').filteredAjaxListing('/vakanties', makeCountryListingPager);
  $('ul#available-months a').filteredAjaxListing('/vakanties', makeMonthListingPager);
  
  $('div#listing div.item').livequery('click', function() { document.location.href = $(this).find('h3 a')[0].href; });
  
  $('body.travel a.reset-listing').livequery('click', function(e) {
    e.preventDefault();
    if(!$(this).hasClass('disabled')) { pagedList.resetListing('/vakanties', makeCountryListingPager); }
  });
  
  if(!jQuery.browser.msie && !jQuery.browser.safari) { // lazy load images in sets
    $('div#listing div.set:gt(0) img').css('color', '#000000').lazyload({ event: "showImage" });
    $('div#listing div.set').bind("beforeShowPage", function (e) { $(e.target).find('img').trigger('showImage'); });
  }
  
  /*** search form inputs ***/
  
  $('form#search').wrap('<div class="wrap"></div>');
  if(!$.msie6) $('form#search :submit').textimSubmit('submit', 'png');
  $('input#search-terms').focus();
  $('form#search :image').hover(function() { $(this).addClass('over'); }, function() { $(this).removeClass('over'); });
  $('body.travel form#search').submit(function(e) { e.preventDefault(); pagedList.listingSearch($('input#search-terms').val(), '/vakanties', makeSearchListingPager); });
  
  /*** destination ***/
  
  var programList = $('div#program dl');
  if(programList.is('*')) {
    var maxColumnHeight = programList.height() / 2.0;
    var columns = [[], []];
    var accumulatedHeight = 0;
    $('div#program dl dt').each(function() {
      var dtTag = $(this);
      var ddTag = dtTag.next('dd');
      if(dtTag.is('*') && ddTag.is('*')) {
        var height = dtTag.height() + ddTag.height();
        if(accumulatedHeight <= maxColumnHeight) {
          columns[0].push(dtTag, ddTag);
        } else {
          columns[1].push(dtTag, ddTag);
        }
        accumulatedHeight += height;
      }
    });
    var twoCol = $.create('div', { 'class': 'two-col' }, [
      $.create('dl', { 'class': 'split-a' }, columns[0]), 
      $.create('dl', { 'class': 'split-b' }, columns[1])
    ]);
    programList.replaceWith(twoCol);
  }
  
  $('div#program dl dd:last-child').css('background', 'none');
  
  $('div#schema').hide();
  
  $('a#schema-link').click(function(e) {
    e.preventDefault();
    if ($('div#schema').is(':hidden')) {
      $("div#schema").slideDown("slow");
    } else {
      $("div#schema").slideUp("slow");
    }
  });
  
  $('div#overview ul').each(function() {
    if($('div#overview').hasClass($(this).attr('id'))) {
      $(this).addClass('active');
      $(this).prev('h6').addClass('active');
      $(this).children('li').each(function() {
        if($('div#overview').hasClass($(this).attr('id'))) {
          $(this).addClass('active');
        }
      });
    } 
  });
  
});