// Qucksearch stuff (have to be global because setTimeout always fires in the global context)
var quicksearch_timer_id = null; // global timer that fires the search request, cleared and set on every keypress of the search field
var quicksearch_last_search_term = null; // last inserted search term (to filter out keypressed that did not change it)
var quicksearch_hide_timer_id = null; // timer to hide the search results, set on search field blur, cleared on search field focus

function quicksearch_lookup() {
  var current_search_term = $('#quicksearch').val();
  
  if (current_search_term == '')
    return;
  
  quicksearch_last_search_term = current_search_term;
  
  // Set the loading class for the search field
  $('#quicksearch').addClass('loading');
  
  // Fire the request
  $.get('/search/quick.html?term=' + encodeURI(current_search_term), function(data){
    var search_field = $('#quicksearch');
    var search_field_offset = search_field.offset();
    var results = $(data);
    results.css({
      top: search_field_offset.top + search_field.outerHeight() - 1,
      left: search_field_offset.left + search_field.outerWidth() - 528 // 525 (width of results) - 2px (two borders)
    })
    
    search_field.removeClass('loading');
    $('#quicksearch_results').remove();
    $('body').append(results);
  });
}

$(document).ready(function(){	
	
  // Quicksearch timer. Wait some milliseconds before actually searching because
  // we don't want to search for each key press. Also only does something if the
  // keypress changes the search term.
  $('#quicksearch').keyup(function(){
    var current_search_term = $(this).val();
    if ( quicksearch_last_search_term == current_search_term )
      return;
    
    quicksearch_last_search_term = current_search_term;
    clearTimeout(quicksearch_timer_id);
    quicksearch_timer_id = setTimeout(quicksearch_lookup, 500);
  });
  
  // Hide the quicksearch results 500 ms after the search box lost the focus.
  // The timeout is important to let enought time for the click event to fire
  // (and thus the hypelinks to work).
  $('#quicksearch').blur(function(){
    quicksearch_hide_timer_id = setTimeout(function(){
      $('#quicksearch_results').hide();
    }, 300);
  });
  $('#quicksearch').focus(function(){
    clearTimeout(quicksearch_hide_timer_id);
    $('#quicksearch_results').show();
  });
});

// This class is assigned to form fields which only contain the default text
// (taken from its title attribute) right now
var empty_class = 'empty';

$(document).ready(function(){
  
  // Hover effect for the main navigation menu
  $('div#header > ul#nav > li > a').click(function(){
    $('div#header > ul#nav > li').removeClass('active');
    $(this).parents('div#header > ul#nav > li').addClass('active');
    return false;
  });
  
  // Section switcher of the eye catcher
  $('div#eye_catcher ul.selector > li').click(function(){
    $('div#eye_catcher ul.selector > li').removeClass('active');
    $('div#eye_catcher ul.sections > li').removeClass('active').parent().find('li.' + $(this).attr('class')).addClass('active');
    $(this).addClass('active');
    return false;
  });
  
  // Show the title of form elements as default text
  var form_elements = $('input[title], textarea[title]');
  
  form_elements.focus(function(){
    var elem = $(this);
    if (elem.hasClass(empty_class)) {
      elem.val('').removeClass(empty_class);
    }
  });
  
  form_elements.blur(function(){
    var elem = $(this);
    if (elem.val() == '' || elem.val() == elem.attr('title')) {
      elem.addClass(empty_class).val(elem.attr('title'));
    }
  });
  
  // Insert the default texts on loading. The pageshow event is bound for
  // firefox when loading pages from the cache (F5).
  form_elements.each(function(){
    $(this).blur();
  });
  
  // Achtung, window.addEventListener('pageshow', function(){ wirft Fehler im IE8!
  // Deshalb jquery
  
  $(window).bind("pageshow", function(){
    form_elements.blur();
  });
  
  $('form').submit(function(){
    $(this).find('input[title], textarea[title]').each(function(){
      var elem = $(this);
      if (elem.hasClass(empty_class)) {
        elem.val('');
      }
    });
  });
});

// jQuery autocomplete specific functions (so we don't have to copy this stuff
// into each view).
var parse_remote_city_data = function(data){
  var rows = (new Function('return ' + data))(); // taken from the jQuery 1.4.1 parseJSON function
  var parsed = [];
  
  for (var i in rows) {
    parsed[parsed.length] = {
      data: rows[i],
      value: rows[i].ort,
      result: rows[i].ort
    };
  };
  
  return parsed;
};

var format_city_item = function(row){
  return '<em>' + row.count + '</em>' + row.ort + ' (' + row.kreis + ')';
};

//
// Search details
//
$(document).ready(function(){
  $('#suche_stadtteile_alle').click(function(){
    var other_checkboxes = $(this).parents('fieldset').find('input:checkbox:not(#suche_stadtteile_alle)');
    if (this.checked)
      other_checkboxes.each(function(){ this.checked = true; });
    else
      other_checkboxes.each(function(){ this.checked = false; });
  });
  $('fieldset.destricts input:checkbox:not(#suche_stadtteile_alle)').click(function(){
    if (this.checked == false)
      $('input#suche_stadtteile_alle').get(0).checked = false;
  });
});

//
// Partner country selector on the start page
//
$(document).ready(function(){
  $('select#partner_country_select').click(function(){
    var target_class = $(this).val();
    $('ul#partner_list').find('> li').hide().end().find('> li.' + target_class).show();
  });
});

//
// Dropdown buttons of a toolbar
//
$(document).ready(function(){
  $('.dropdown.button > a').click(function(){
    return false;
  }).focus(function(){
    $(this).parent().find('> ul').fadeIn('fast');
  }).blur(function(){
    $(this).parent().find('> ul').fadeOut('fast');
  });
});


// 
// Expose Bildergallerie
$(document).ready(function(){
	
	// Gesamtzahl Spalten & Breite einer Spalte
	var total_cols = $('li.slider ul').size() - 1; // Als Programmierer zählen wir ab 0
	var col_width = $('li.slider ul:first').outerWidth({includeMargin: true});
	
	// Alle kleinen Bilder transparent machen
	$('li.slider li').addClass('inactive');
	// Erstes Bild sichtbar machen - slice(0,1) ist äquivalent zu first()
	$('li.slider ul li').slice(0,1).removeClass('inactive');
	$('li.slider ul li').slice(0,1).addClass('active');
		
	$('li.slider ul').each(function(index) {
		
		var active_col = index;
		
		$(this).children('li').children('a').click(function() {		
			
			var id = $(this).parent('li').attr('id').match(/^(.*)_preview$/)[1];
			
			// Großes Bild anzeigen
			$('ul.big-image li').css('display', 'none');			
			$('li#'+id).css('display', 'block');
			
			// Kleines Bild klar darstellen
			$('li.slider li').addClass('inactive');
			$('li.slider li').removeClass('active');
			$(this).parent('li').removeClass('inactive');
			$(this).parent('li').addClass('active');
			
			
			// Nur animieren, wenn mehr als 3 Spalten (Wir zählen ab 0)
			if (total_cols > 2) {
				// Reihe der kleinen Bilder hoch/ runter rutschen
				if (active_col == 0) 
					active_col = 1;
				
				if (active_col == total_cols) 
					active_col = total_cols - 1;
				
				$('li.slider').animate({
					marginLeft: (col_width * -active_col) + col_width
				}, 400);
			}
			return false;
		});
	});
	
	// Buttons für nächstes und voriges Bild
	$('div.gallery a.next').click(function() {
		trigger_image_change(1);
		return false;
	});
	$('div.gallery a.prev').click(function() {
		trigger_image_change(-1);
		return false;
	});
	
	var trigger_image_change = function(index_change) {
		var current = $('li.slider li.active');
		var all_thumbs = $('li.slider li');
		$(all_thumbs[all_thumbs.index(current)+index_change]).children('a').trigger('click');		
	}
});
