/**
 * JS-Funktionen fuer dumontreise
 *
 * seitenblick interaktive medien gmbh
 * Koenigstrasse 16, 70173 Stuttgart
 * fon: 0711/8599818-0
 * fax: 0711/8599818-40
 * e-Mail : info@seitenblick.de
 *
 * Version: 1.0
 * Bibliotheken: jquery 1.4.1, datePicker 2.1.2, date
 */



/**
 * Globale Variablen
 */
ua = navigator.userAgent;
server_name = 'www.dumontreise.de';




/**
 * Name         : $(document).ready
 * Beschreibung : wird ausgeführt, wenn die Seite geladen ist
 * Parameter    : -
 */
$(document).ready( function() {

/* B E W E R T E N ------------------------------------------------------------------------------ */

  // Mouse-Over einzelne Sterne
  $('#not_clicked .star').hover( function(){
    if($('#not_clicked').html() != undefined) {
      //fuer alle den grauen Hintergrund setzen
      $('#not_clicked .star').css('background-position', 'left 0px');
      //die mit der Maus ueberfahrenen markieren
      var nr = $(this).attr('id').substr(1, 1);
      for(var i = 1; i <=nr; i++) {
        $("#not_clicked #s"+i).css('background-position', 'left -13px');
      }
      //Text einblenden
      $('.rate_text').show();
    }
  },
  function(){
    if($('#not_clicked').html() != undefined) {
      if($(this).attr('class').indexOf('active') > 0)
        $(this).css('background-position', 'left -13px');
      else
        $(this).css('background-position', 'left 0px');
    }
  });
  //Stern-Container => wenn die Maus diesen verlaesst den urspruenglichen Status wieder herstellen
  $('#not_clicked').hover(function(){
  },
  function(){
    if($('#not_clicked').html() != undefined) {
      $('#not_clicked .star').css('background-position', 'left 0px');
      $('#not_clicked .star.active').css('background-position', 'left -13px');
      //Text ausblenden
      //$('#rate_text').hide();
    }
  });
  //Tastatur-Fokus
  $('#not_clicked .star').focus( function(){
    if($('#not_clicked').html() != undefined) {
      //fuer alle den weiss-gruenen Hintergrund setzen
      $('#not_clicked .star').css('background-position', 'left 0px');
      //die mit der Maus ueberfahrenen markieren
      var nr = $(this).attr('id').substr(1, 1);
      for(var i = 1; i <=nr; i++) {
        $("#not_clicked #s"+i).css('background-position', 'left -13px');
      }
    }
  });

  // Klick

  $('.star').click( function do_rate(){

    $('.star').animate({ 'opacity' : 0.25 }, 200);

    //eruieren, ob ein Artikel oder ein Medien-Element bewertet werden soll
    if($('#article_id_for_rating').html() != null) {
      var data_id = $('#article_id_for_rating').val();
      var controller = 'articles';
    }
    else if($('#media_id_for_rating').html() != null) {
      var data_id = $('#media_id_for_rating').val();
      var controller = 'media';
    }

    var star_letter = $(this).attr('id').substr(0, 1);
    var star_number = $(this).attr('id').substr(1, 1);

    $.ajax({
      url: '/'+controller+'/rate/'+data_id+'/star_number:'+star_number,

      success: function(retval){
        //Layer ueber den Sternen einblenden
        $('#dont_click_stars').show();
        //Container fuer Feedback anzeigen
        $('#rated_text').fadeIn('fast');

        //Sterne neu einfaerben
        var percent_counter = 10;
        for(var i=1; i<=5; i++) {
          if(parseInt(retval) >= percent_counter) {
            $('#'+star_letter+''+i).animate({ backgroundPosition: '0px -13px' }, 100);
          } else {
            $('#'+star_letter+''+i).animate({ backgroundPosition: '0px 0px' }, 100);
          }
          percent_counter += 20;
        }
        $('.star').animate({ 'opacity' : 1.0 }, 100);
        
        //Cookie setzen
        var COOKIE_NAME = 'rating_cookie_article_'+data_id;
        var options = { path: '/', expires: 365 };
        $.cookie(COOKIE_NAME, data_id, options);
      },

      error: function(er){
        //Layer ueber den Sternen einblenden
        $('#dont_click_stars').show();
        //Container fuer Feedback neu befuellen und anzeigen
        $('#rated_text').html('Leider konnte Ihre Bewertung nicht gespeichert werden');
        $('#rated_text').fadeIn('fast');
      }
    });

    //id tauschen
    $('#not_clicked').attr('id', 'clicked');
  });




/* H A U P T N A V I ---------------------------------------------------------------------------- */
  //Navigation - Mouse
  $('#navi li').hover(
    function(){
      //die zum aktuellen Punkt gehoerige einblenden
      if($(this).children('ul')) {
        $(this).children('ul').show();
      }
    },
    function(){
      //alle Subnavigationen ausblenden
      $('#navi li').children('ul').hide();
      $('#navi li').css('background', 'none');
    }
  );
  $('#navi li ul').hover(
    function(){
      $(this).css('display', 'block');
      $(this).parent().css('background', '#e8e4e1');
    },
    function(){
      $(this).css('display', 'block');
      $(this).parent().css('background', '#e8e4e1');
    }
  );
  $('#navi li ul li ').hover(
    function(){
      $(this).parent().css('display', 'block');
      $(this).parent().parent().css('background', '#e8e4e1');
    },
    function(){
      $(this).parent().css('display', 'block');
      $(this).parent().parent().css('background', '#e8e4e1');
    }
  );

  //Navigation - Keyboard
  $('#navi li a').focus( function(){
    //die zum aktuellen Punkt gehoerige einblenden
    if($(this).parent().children('ul')) {
      $(this).parent().children('ul').show();
    }
  });
  $('#navi li a').blur( function(){
    //alle Subnavigationen ausblenden
    $('#navi li').children('ul').hide();
  });


/* S T A R T S E I T E : Erstes Bühnenbildern in die Mitte schieben ----------------------------- */

  if($("#home_stage").html() != null){
    var stage_1st_pos = Math.round(( parseInt( $('#stage_element_1 img').attr('height') ) - 335 ) / 2);
    $('#stage_element_1 img').css({ top: '-'+stage_1st_pos+'px' });
  }


/* S T A R T S E I T E : Hauptteaser durchwechseln ---------------------------------------------- */

  if ($('#home_stage') != null ) {
    $('.stage_number a').bind("click", function(event){
      event.preventDefault();
      // Aktive und angeklickte Link-Nummer ermitteln
      var curr = parseInt($(this).text());
      var last = parseInt($(this).parent().parent().children().find(".stage_act").text());
      if (curr != last) {
        // Highlight(CSS) der letzten Nummer wird entfernt
        $(this).parent().parent().children().find(".stage_act").removeAttr('class');
        // Die aktuelle Nummer highlighten (CSS)
        $(this).addClass('stage_act');
        // Letzte grosse Box ausblenden
        $('#stage_element_'+last+'').fadeOut(1000);
        // Danach Bild und Text zur aktuellen Nummer einblenden
        $('#stage_element_'+curr+'').fadeIn(1000);
        // Neues Bild ggf. in die Mitte schieben
        var stage_img_new_pos = Math.round(( parseInt( $('#stage_element_'+curr+' img').attr('height')) - 335 ) / 2);
        $('#stage_element_'+curr+' img').css({ top: '-'+stage_img_new_pos+'px' });
      }
    })

    // Automatische Ueberblendung
    IntervalId = setInterval( "animate_homestage()", 6000 );
    // Waerend man im Bereich ist wird der Intervall angehalten
    $('#home_stage').mouseover(function () {
      IntervalId = clearInterval ( IntervalId );
    })
    // Beim Verlassen geht der Effekt weiter.
    $('#home_stage').mouseleave(function () {
      IntervalId = setInterval( "animate_homestage()", 6000 );
    })
  }


/* S T A R T S E I T E : Ausschnitt bei Artikelbildern vertikal zentrieren ---------------------- */
  var art_img_counter = 0;
  while($('.home_article_img_wrapper:eq('+art_img_counter+')').html() != null ) {
    var artimg_div_size = parseInt( $('.home_article_img_wrapper:eq('+art_img_counter+')').css('height') );
    var artimg_img_size = parseInt ( $('.home_article_img_wrapper:eq('+art_img_counter+') img').attr('height') );
    var artimg_new_pos = Math.round( ( artimg_img_size - artimg_div_size ) / 2 );
    $('.home_article_img_wrapper:eq('+art_img_counter+') .home_article_img').css({
      top: '-'+artimg_new_pos+'px'
    });
    art_img_counter++;
  }


/* S T A R T S EI T E : Impressionen durchwechseln ---------------------------------------------- */

  if($("#galleries").html()!=null){
    // Tatsaechliche Breite des wrapper ermitteln,
    // dazu die Anzahl der enthaltenen Bilder ermitteln
    var is_wrapper_count =  countChildElements('galleries','div');
    var is_wrapper_width = is_wrapper_count * 205;
    $("#galleries").css("width", is_wrapper_width);

    // Bei Klick auf eine Zahl an die jeweilige Position verschieben
    $(".galleries_teaser_head .skim_sites a").bind("click", function(event){
      // Eigentliches Linkziel nicht öffnen
      event.preventDefault();
      // Highlight(CSS) der letzten Nummer wird entfernt
      $(this).parent().find(".act_site").removeClass('act_site');
      // Die aktuelle Nummer highlighten (CSS)
      $(this).addClass('act_site');
      // Aktuelle Position des Bilderwrapper ermitteln
      var current_pos = parseInt($("#galleries").css("margin-left"));
      // geklickte Nummer ermitteln
      var selected = parseInt($(this).text());
      // Neue Position des Bilderwrapper bestimmen
      // Falls der letzte Link in der Nummernliste angeklickt wurde...
      if ($(this).next().html() == null) {
        //...prüfen, wie viele Bilder bei der Teilung durch 3 über bleiben
        if ( (is_wrapper_count % 3) == 1 ) {
          // und den Wrapper ggf. nicht ganz so weit slidern
          // Ältere Browser benötigen ein 'spezielles' margin-left
          if (typeof document.body.style.maxHeight != "undefined") {
            var new_pos = selected * 615 - 1025; // neuere Browser
          } else {
            var new_pos = ( selected * 615 - 1025 ) / 2; // ältere Browser
          }
        } else if ( (is_wrapper_count % 3) == 2 ) {
          if (typeof document.body.style.maxHeight != "undefined") {
            var new_pos = selected * 615 - 820;
          } else {
            var new_pos = ( selected * 615 - 820 ) / 2;
          }
        } else {
          if (typeof document.body.style.maxHeight != "undefined") {
            var new_pos = selected * 615 - 615;
          } else {
            var new_pos = ( selected * 615 - 615 ) / 2;
      } } }
      // Bei sonstigen Nummernlinks einfach immer um 3 Bilder verschieben
      else {
        if (typeof document.body.style.maxHeight != "undefined") {
          var new_pos = selected * 615 - 615;
        } else {
          var new_pos = ( selected * 615 - 615 ) / 2;
        }
      }
      // Und an die neue Position verschieben
      $("#galleries").animate({
        marginLeft: '-'+new_pos+''
      }, 800 );
    })
  }



/* R E P O R T A G E N / K U L T U R K A L E N D E R:
 Bilder in Detailansicht im Fliesstext nachtraeglich formatieren */
  if($('.pwide').html() != null && $('.pwide').html().indexOf('<img ')) {
    //var caption_counter = 0;
    setTimeout("reformat_imgages()", 400);
  }



/* S E H EN S W E R T : Karten und Linkdetails ein-/ausblenden ---------------------------------- */

  // Funktionen einblenden
  $(".pois_detail").click(function () {
    $(this).next().toggle();
    $(this).toggleClass("link_detail_active");
    return false;
  });


/* S L I D E R ---------------------------------------------------------------------------------- */

  // Breite der Vorschauleiste zuweisen

  var counter = 0;
  while ($('.animation_strip:eq('+counter+')').html() != null) {
    // Anzahl der Elemente in der Bildergallery
    var imagenumbers = parseInt($('.animation_strip:eq('+counter+')').children('.gallery_teaser_link').size());
    var wrappersize = imagenumbers*205;
    // Der Wrapper bekommt die richtige Breite zugewiesen. Min 3 Bilder
    $('.animation_strip:eq('+counter+')').css({width: wrappersize});
    $('.animation_strip:eq('+counter+')').css({margin_left: '0'});
    // Falls die Vorschauleiste ganz links ist: Zurück-Pfeil ausgegraut
    if ($('.animation_strip:eq('+counter+')').css('margin_left') == 0 ) {
      // Bei der Galerie-Detailansicht hat der ausgegraute Button abweichende Eigenschaften
      if ( $('.animation_strip:eq('+counter+')').parent().find("div:last").hasClass('gallery_detail_overview_skim') == true ) {
        $('.animation_strip:eq('+counter+')').parent().find("div:last").find("a:last").after('<span class="noskim rewind_d" style="float: left; margin: 0;"></span>');
      } else {
        $('.animation_strip:eq('+counter+')').parent().find("div:last").find("a:last").after('<span class="noskim rewind_d"></span>');
      }
      $('.animation_strip:eq('+counter+')').parent().find("div:last").find("a:last").hide();
    }
    counter = counter+1;
  }


  // Klick auf einen Skip Button bei dem Slider
  $('a.skim_btn').click(function(){
    // Maximaler Margin wird berechnet
    var imagenumbers = parseInt($(this).parent().parent().find("div:first").children('.gallery_teaser_link').size());
    if ( $(this).parent().parent().attr("id") == "gallery_detail_overview" ) {
      var maxmargin = -(imagenumbers*203)+609;
    } else {
      var maxmargin = -(imagenumbers*205)+615;
    }

    // Aktueller Margin wird berechnet
    var margin_left = parseInt($(this).parent().parent().find("div:first").css('marginLeft'));

    // Button Links: Wrapper nach rechts schieben
    if($(this).next().html() == null && margin_left < 0 ){
      // in der Galerie-Detailansicht ist die Sprungweite anders
      if ( $(this).parent().parent().attr("id") == "gallery_detail_overview" ) {
        margin_left = margin_left+203;

      } else {
        margin_left = margin_left+205;
      }
      // Buttons ggf. ein-/ausblenden
      if ( margin_left == 0 ) {
        if (maxmargin == -205 || maxmargin == -203) {
          $(this).parent().find("span").remove();
          $(this).prev().show();
        }
        // Bei der Galerie-Detailansicht hat der ausgegraute Button abweichende Eigenschaften
        if ( $(this).parent().hasClass('gallery_detail_overview_skim') == true ) {
          $(this).before('<span class="noskim rewind_d" style="float: left; margin: 0;"></span>');
        } else {
          $(this).before('<span class="noskim rewind_d"></span>');
        }
        $(this).hide();
      } else {
        $(this).parent().find("span").remove();
        $(this).prev().show();
      }
    }
    // Button Rechts: Wrapper nach links schieben
    if($(this).next().html() != null && margin_left > maxmargin){
      if ( $(this).parent().parent().attr("id") == "gallery_detail_overview" ) {
        margin_left = margin_left-203;
      } else {
        margin_left = margin_left-205;
      }
      // Buttons ggf. ein-/ausblenden
      if ( margin_left <= maxmargin ) {
        if ( margin_left == maxmargin ) {
          $(this).parent().find("span").remove();
          $(this).next().show();
          $(this).after('<span class="noskim forward_d"></span>');
          $(this).hide();
        } else {
          $(this).after('<span class="noskim forward_d"></span>');
          $(this).hide();
        }
      } else {
        $(this).parent().find("span").remove();
        $(this).next().show();
      }
    }
    // Aktion ausfuehren
    // $(this).parent().parent().find("div:first").css({marginLeft: margin_left});
    $(this).parent().append('<div id="dont_click" class="dontclick">&nbsp;</div>');

    $(this).parent().parent().find("div:first").animate({
        marginLeft: margin_left
      }, 300, function() {
        $(this).parent().find("div:last").remove();
      });
  })

  // Bei der Galerie-Detailseite soll der Thumb des aktuellen Bildes in der Mitte stehn
  if ( $('#gallery_detail_overview').html() != null ) {
    var curr_img = parseInt($('#img_nr').text());
    var all_thumbs = $('.animation_strip').children('.gallery_teaser_link').size();

    if ( curr_img > 2 && curr_img < all_thumbs ) {
      // Position berechnen und Wrapper verschieben
      var margin_left = ( curr_img - 2 ) * (-203);
      $('.animation_strip').css({ marginLeft: margin_left });

      if (curr_img == ( all_thumbs - 1 )) {
        // Zurück-Button einblenden
        $('.gallery_detail_overview_skim').find("span").remove();
        $('.gallery_detail_overview_skim').find("a:last").show();
        // Weiter-Button ausblenden
        $('.gallery_detail_overview_skim').find("a:first").after('<span class="noskim forward_d"></span>');
        $('.gallery_detail_overview_skim').find("a:first").hide();
      } else {
        // Zurück-Button einblenden
        $('.gallery_detail_overview_skim').find("span").remove();
        $('.gallery_detail_overview_skim').find("a:last").show();
      }
    } else if ( curr_img == all_thumbs ) {
      // Position berechnen und Wrapper verschieben
      var margin_left = ( all_thumbs - 3 ) * (-203);
      $('.animation_strip').css({ marginLeft: margin_left });
      // Zurück-Button einblenden
      $('.gallery_detail_overview_skim').find("span").remove();
      $('.gallery_detail_overview_skim').find("a:last").show();
      // Weiter-Button ausblenden
      $('.gallery_detail_overview_skim').find("a:first").after('<span class="noskim forward_d"></span>');
      $('.gallery_detail_overview_skim').find("a:first").hide();
    }
  }

/* S U C H E ------------------------------------------------------------------------------------ */

  $("#search_header_text").focus(function() {
    if ('Suchen' ==$(this).val()) {
      $(this).val('');
      $('#search_input_wrapper').css('border', '5px solid #005caa');
    }
  });
  $("#search_header_text").blur(function() {
    if ('' ==$(this).val()) {
      $(this).val('Suchen');
      $('#search_input_wrapper').css('border', '5px solid #ffffff');
    }
  });
// Reiseführer Titelsuche
    $("#bsw3").focus(function() {
    if ('Reiseführer Titelsuche' ==$(this).val()) {
      $(this).val('');
      $('#bsw2').css('border2', '5px solid #005caa');
    }
  });
  $("#bsw3").blur(function() {
    if ('' ==$(this).val()) {
      $(this).val('Reiseführer Titelsuche');
      $('#bsw2').css('border2', '5px solid #ffffff');
    }
  });
  

  //Suche: Reiter-Navigation
  if($('#search_results_head').html() != null) {
    $('.search_reiter').click(function(){
      var reiter_id = $(this).attr('id');

      //alle Reiter zuruecksetzen
      $('.search_reiter').attr('class', 'search_reiter');
      //Inhalt ausblenden
      $('.search_results_block').hide();

      //aktuellen Reiter einfaerben
      $('#'+reiter_id).attr('class', 'search_reiter search_reiter_act');
      //zugehoerigen Inhalt einblenden
      $('#'+reiter_id+'_results').show();
    });
  }

/* S P E C I A L - R E P O R T I N G ------------------------------------------------------------ */

  /*$("a.special").each(function() {
    alert($(this).attr("href"));
  });*/

}); // Ende von  $(document).ready




/**
 * Name         : countChildElements()
 * Beschreibung : Zählt die Kindelemente eines eindeutigen Elternelements
 * Parameter    : ID des Elternelements, Tag-Name der zu zählenden Kinder (z.B. img)
 */
function countChildElements(parent, child) {
  var parent = document.getElementById(parent);
  var childCount = parent.getElementsByTagName(child).length;
  return childCount;
}



/**
 * Name         : handle_bookmark_layer()
 * Beschreibung : Bookmark-Layer einblenden bzw. auf Klick ausserhalb wieder schliessen
 * Parameter    : ID des zu handelnden Layers
 */
function handle_bookmark_layer(id) {
  //reset
  $('html').unbind('click');
  //den Body auf das gesamte Fenster ausdehnen
  $('html').height('100%');
  $('html').width('100%');
  //dem body den Klick-Event zum schliessen hinzufuegen
  $('html').bind("click", function(e){
    var el = e.target;
    var img_class = $(el).parent().attr('class');
    var link_class = $(el).attr('class');
    var layer_id = $(el).attr('id');
    while (true){
      if ( layer_id == id || img_class == "bookmark" || link_class == "bookmark" || link_class == "link_width_icon") {
        return true;
      } else if (el == document) {
        $('#'+id).hide();
        $('html').unbind('click');
        return false;
      } else {
        el = $(el).parent()[0];
      }
    }
  });
  //den Layer anzeigen, falls noch nichts anderes getan wurde
  $('#'+id).show();
}

/**
 * Name         : animate_homestage()
 * Beschreibung : Automatische Überblendung der Galeriebühne auf der Startseite
 */
function animate_homestage() {
  // Aktuell angezeigtes Bild ermitteln
  var current = parseInt($("#stage_element_numbers").children().find(".stage_act").text());
  //alert($('#stage_element_numbers').children().find(".stage_act").text());
  // Nächstes Bild definieren
  if (current < 8) {
    var next = current + 1;
  } else {
    var next = 1;
  }

  // Highlight(CSS) der letzten Nummer wird entfernt
  $("#sn_"+current+"").children().removeAttr("class");
  // Die aktuelle Nummer highlighten (CSS)
  $("#sn_"+next+"").children().addClass("stage_act");
  // Letzte grosse Box ausblenden
  $("#stage_element_"+current+"").fadeOut(1000);
  // Danach Bild und Text zur aktuellen Nummer einblenden
  $("#stage_element_"+next+"").fadeIn(1000);
  // Neues Bild ggf. in die Mitte schieben
  var stage_img_new_pos = Math.round(( parseInt( $("#stage_element_"+next+" img").attr("height")) - 335 ) / 2);
  $("#stage_element_"+next+" img").css({ top: "-"+stage_img_new_pos+"px" });
}

/**
 * Name         : poi_change_city()
 * Beschreibung : Aendert bei Sehenswert den Ort
 */
function poi_change_city() {
  var new_city_id = $("#new_city_id").val();
  var category_id = $("#poi_category_id").val();
  window.location.href='/pois/view/'+new_city_id+'/'+category_id;
}

/**
 * Name         : get_poi_categories()
 * Beschreibung : Laed die verfuegbaren Kategorien fuer einen Ort nach
 */
function get_poi_categories() {
  $("#poi_category_id").html('<option>Lade...</option>');
  $("#poi_category_id").attr("disabled", "disabled");
  var new_city_id = $("#new_city_id").val();
  $.getJSON('/pois/ajax_broker/'+new_city_id, function(data) {
  	$("#poi_category_id").empty();
  	$("#poi_category_id").append('<option value="0">Alle</option>');
    $.each(data, function(id, name) {
      $("#poi_category_id").append('<option value="'+id+'">'+name+'</option>');
    });
    $("#poi_category_id").removeAttr("disabled");
  });  
}

/**
 * Name         : poi_show_mini_map()
 * Beschreibung : Zeigt die Mini-Karte bei einem POI an oder blendet sie wieder aus
 */
function poi_show_mini_map(id, posx, posy){
  // Fall 1 Die Karte wird ausgeblendet und der Link wird veraendert#
  if($('#minicard'+id).parent().prev().prev().children().next().text()=="Karte ausblenden"){
    $('#minicard'+id).parent().prev().prev().children().next().text("Karte anzeigen");
    $('#minicard'+id).parent().hide();
  }
  // Fall 2 Die Karte wird angezeigt und der Link veraendert
  else {
    $('#minicard'+id).parents().show();
    $('#minicard'+id).show();
    $('#minicard'+id).parent().prev().prev().children().next().text("Karte ausblenden");
  }
  // Die Karte wird nur 1x geladen
  if ('' == $('#minicard'+id).html()) {
    setTimeout('poi_load_mini_map('+id+', '+posx+', '+posy+');', 400);
  }
}

/**
 * Name         : poi_load_mini_map()
 * Beschreibung : Laed die Mini-Karte bei einem POI
 */
function poi_load_mini_map(id, posx, posy) {
  // das richtige Koordinatenformat wird gewaehlt
  FalkMapConfiguration.mapCoordinateFormat = "WGS84";

  // create a new map
  map = new FalkMap("minicard"+id);
  map.changeMapLayer("MSMAP");
  overlay = map.getMapOverlay();

  // Zoomnavigation
  var mapControl = new FalkBigMapControl("mycontrol");
  mapControl.setPosition (8, 21, 'right');
  map.addMapControl(mapControl);

  // Ansichtsnavigation
  mapSwitchControl = new FalkMapSwitchControl("switchcontrol");
  mapSwitchControl.setPosition (22, 20, 'left');
  map.addMapControl(mapSwitchControl);

  // Der Punkt wird erstellt
  var geocode1 = new FalkPoint(posx, posy);
  var fmo = new FalkMapObject();
  fmo.setGeocode(geocode1);
  fmo.icon = new FalkIcon();
  fmo.icon.url = "http://"+server_name+"/img/icon_flag"+id+".gif";
  overlay.addFalkMapObject (fmo);

  // Die Karte wird zentriert
  map.centerMapToGeocode(geocode1, 14);
}




/**
 * Name         : show_more_events
 * Beschreibung : mehr Events am Ende der Liste anzeigen
 * Parameter    : total_count => int, Anzahl aller Events in der Liste
 */
function show_more_events(total_count) {
  /* Anzahl der sichtbaren Events ermitteln */
  var visible = -1; /*weil es schon eine erste Zeile im thead gibt*/
  $('#event_table tr').each( function() {
    if($(this).css('display') != 'none') {
      visible++;
    }
  });

  var new_visible = visible + 15;
  if(new_visible > total_count) {
    new_visible = total_count;
    /* mehr-anzeigen-Link ausblenden */
    $('#show_more_events').hide();
  }

  /* weitere Eintraege einblenden */
  for(var i=visible; i<new_visible; i++ ) {
    $('#event_table tr:eq('+i+')').fadeIn('fast');
  }
}




/**
 * Name         : filter_events_by_genre
 * Beschreibung : alle Events in der Liste anzeigen, die zu einem Genre gehoeren
 * Parameter    : genre_id => int, id des Genres, das angezeigt werden soll (steckt jeweils mit in der Klasse des tr)
 *                            wenn genre_id <= 0 werden alle Events angezeigt
 */
function filter_events_by_genre(genre_id) {
  /* mehr-anzeigen-Link ausblenden */
  $('#show_more_events').hide();
  /* evtl. angezeigte Meldung ueber keine Ergebnisse ausblenden */
  $('#no_results_in_genre').hide();

  if(genre_id <= 0) {
    //alle einblenden
    $('#event_table tr').each(function() {
      $(this).fadeIn('fast');
    });

    //alle-anzeigen-Link ausblenden
    // setTimeout("$('#show_all_events').fadeOut('fast')", 300);
  } else {
    //alle ausblenden
    $('#event_table tr').fadeOut('fast');
    //die zum Genre passenden wieder einblenden
    $('#event_table tr.genre_'+genre_id).fadeIn('fast');

    //alle-anzeigen-Link einblenden
    // $('#show_all_events').show();

    //checken, ob Resultate fuer das ausgewaehlte Genre vorhanden
    setTimeout("count_visible_results()", 300);
  }

}




/**
 * Name         : count_visible_results
 * Beschreibung : zaehlen der sichtbaren tr's nach dem Filtern nach Genre,
 *                wenn keine vorhanden sind Meldung ueber keine Ergebnisse einblenden
 */
function count_visible_results() {
  var results_count = $('#event_table .event_title:visible').length;
  if(results_count <= 0) $('#no_results_in_genre').fadeIn('fast');
}




/**
 * Name         : reformat_imgages
 * Beschreibung : Bilder in Detailansicht im Fliesstext nachtraeglich formatieren
 */
function reformat_imgages() {
  $('.pwide img').each( function() {
    var img_width = $(this).width();

    //einen div um das Bild wickeln und diesem die Klasse 'content_img_parent' zuweisen
    $(this).wrap(document.createElement("a"));
    $(this).parent().attr('class', 'content_img_parent');

    //content_img_parent als href den Pfad zur anzuzeigenden Datei mitgeben, da lightbox diesen nicht anders versteht
    var img_name = $(this).attr('src');
    img_name = img_name.substr( parseInt(img_name.indexOf('thumb/'))+6 );
    var img_detail_path = '/upload/standard/'+img_name;
    $(this).parent().attr('href', img_detail_path);
    
    //die Breite des div's an das Bild anpassen
    $(this).parent().css('width', img_width+'px');

    //alt-Text und src des Bilder zwischenspeichern
    var caption_text = $(this).attr('alt');
    
    //den title fuer content_img_parent setzen
    $(this).parent().attr('title', caption_text);
    
    //unter dem Bild den alt-Text als Caption und Lupe zum Vergroessern ausgeben
    $(this).parent().append('<div class="caption"><img src="/img/icon_zoom.gif" class="lupe" alt="Zum Vergr&ouml;&szlig;ern bitte hier klicken" /><span>'+caption_text+'</span></div>');
  
    //fuehrt die Lightbox auf .content_img_parent aus
    $(function() {
      $('.content_img_parent').lightBox();
    })
    
  });
}




/**
 * Name         : load_comments
 * Beschreibung : Laed die Kommentare zu einem Artikel nach
 */
function load_comments(article_id) {
  $("#comments_container").load('/articles/comments/'+article_id);
}




/**
 * Name         : check_comment
 * Beschreibung : die drei Eingabefelder des Kommentar-Formulars ueberpruefen
 */
function check_comment() {
  var field_errors = '';
  
  //wenn kein Facebook-Connect
  if($('a.FB_Link').html() == undefined) {
    //Name
    if($('#comment_name').val().length <= 0)
      field_errors = field_errors + '<br />- Ihren Namen';
    //Email
    var reg_ex = /^[a-zA-Z0-9\._-]+@+[a-zA-Z0-9\._-]+\.+[a-zA-Z]{2,4}$/;
    if(reg_ex.exec($('#comment_email').val()) == null)
      field_errors = field_errors + '<br />- Ihre Email-Adresse';
  }
  //Kommentar
  if($('#comment_text').val().length <= 0)
    field_errors = field_errors + '<br />- Ihren Kommentar';


  //eventuell schon vorhandene Fehlermeldungen ausblenden
  $('#comment_error').hide();

  //wenn Fehler gefunden wurden: Fehlermeldung ausgeben
  if(field_errors.length > 0) {
    $('#comment_error p').html('Bitte f&uuml;llen Sie folgende Felder korrekt aus:'+field_errors);
    $('#comment_error').fadeIn('normal');
  }
  
  // wenn keine Fehler gefunden wurden => Kommentar per AJAX in die DB eintragen
  else {
    //das Formular waehrend des Speicherns teilweise ausfaden
    var form_height = $('#write_comment_form').height();
    $('#write_comment_form').animate({ opacity: 0.25 }, 500);

    //Name, Email bzw Facebook-Link setzen
    var author_name = '';
    var author_email = '';
    var author_fb_link = '';
    if($('a.FB_Link').html() == undefined) {
      author_name = $('#comment_name').val();
      author_email = $('#comment_email').val();
    } else {
      author_name = $('a.FB_Link').html();
      author_fb_link = $('a.FB_Link').attr('href');
    }
    
    
    $.ajax({
      url  : '/comments/add',
      type : 'POST',
      data : ({
        article_id     : $('#article_id').val(),
        author_name    : author_name,
        author_email   : author_email,
        author_fb_link : author_fb_link,
        text           : $('#comment_text').val()
      }),

      success: function(retval){
        if(!retval) {
            //FEHLERMELDUNG AUSGEBEN
          alert('Leider konnte ihr Kommentar nicht gespeichert werden.');

          //Formular leeren
          $('#comment_name').val('');
          $('#comment_email').val('');
          $('#comment_text').val('');
          //das Formular wieder auf urspruengliche Hoehe ausklappen
          $('#write_comment_form').animate({ opacity: 1 }, 200);
        }
        else {
          //neuen Kommentar als HTML zusammenbauen
          var new_comment = '<div id="new_comment" class="comment" style="display: none;">';
            new_comment += '<div class="comment_author">' + author_name + '</div>';
            new_comment += '<div class="comment_facts">' + retval + '</div>';
            new_comment += '<p class="comment_text">' + $('#comment_text').val() + '</p>';
          new_comment += '</div>';

          //Formular leeren
          $('#comment_name').val('');
          $('#comment_email').val('');
          $('#comment_text').val('');

          //neuen Kommentar einfuegen
          $('#write_comment_form').before(new_comment);
          $('#new_comment').fadeIn('normal');
          $('#new_comment').attr('id', '');

          //Anzahl der Kommentare erhoehen
          var old_count = parseInt($('#comments_count').html() );
          $('#comments_count').html( old_count+1 );
        }
        //das Formular wieder auf urspruengliche Hoehe ausklappen
        $('#write_comment_form').animate({ opacity: 1 }, 200);
      },

      error: function(er){
          //FEHLERMELDUNG AUSGEBEN
        alert('Leider konnte ihr Kommentar nicht gespeichert werden.');

        //Formular leeren
        $('#comment_name').val('');
        $('#comment_email').val('');
        $('#comment_text').val('');
        //das Formular wieder auf urspruengliche Hoehe ausklappen
        $('#write_comment_form').animate({ opacity: 1 }, 200);
      }

    });
  }

  //verhindern, dass das Formular wirklich abgeschickt wird (wurde ja alles schon per JS gehandelt)
  return false;
}




/**
 * Name         : load_teaser_events
 * Beschreibung : per AJAX die drei neuesten Termine fuer den aktuellen Tag nachladen
 *                (AJAX weil ein include ueber HTTP auf den Falk-Servern nicht zulaessig ist)
 */
function load_teaser_events(destination_url) {
  $.ajax({
    url  : destination_url,
    type : 'GET',

    success: function(retval){
      $('#teaser_events_wrapper').html(retval);
    },

    error: function(er){
    $('#teaser_events_wrapper').html('<p>Aktuell sind keine Veranstaltungen verf&uuml;gbar.</p>');
    }
  });

  //die Hoehe des letzen Teaser-Elements beschneiden, da es sonst im IE(6) zu Darstellungsproblemen kommt
  //var height = $('#third_event_teaser').height();
  //$('#third_event_teaser').css('height', height+'px');
  //$('#third_event_teaser').css('overflow', 'hidden');
}




/**
 * Name         : perform_web_search
 * Beschreibung : Fuehrt ueber die Google-API eine Websuche aus
 */
function perform_web_search(query, start) {
	if (undefined == start)
	  start = 0;
	
	$("#websearch").empty();

  $.ajax({
    url: "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=" + encodeURIComponent(query) + "&key=ABQIAAAANS-OAG70mH-xr6-jJHtBjhSymAeCsvOS19O6f-wayMzpXBagmxRXykok0BA9j4i8JighS7Dc7GiImg&rsz=small&start="+start,
    dataType: 'jsonp',
    success: function(data) {
      if (0 == data.responseData.results.length) {
        $("#websearch").append('<p>Zu diesem Suchbegriff wurden keine Ergebnisse gefunden.</p>');
      }
      else {
      	if (0 == data.responseData.cursor.currentPageIndex) {
      		$("#localsearch").show();
      	}
      	else {
      		$("#localsearch").hide();
      	}
      	
      	var content = '';
        $.each(data.responseData.results, function(i,item){
        	var last_class = '';
        	if (data.responseData.results.length == i+1) {
        		last_class = ' last_result';
        	}
        	
          content += '<div class="result_article'+last_class+'">'+"\n";
          content += '<a class="web_result_title" href="'+item.url+'" target="_blank">'+item.title+'</a>'+"\n"+'<p class="web_result_text"><a class="web_result_url" href="'+item.url+'" target="_blank">'+item.visibleUrl+'</a> '+item.content+'</p>'+"\n";
          content += '</div>'+"\n";
        });
        
        var jumplist = get_jumplist(data, query, start, "perform_web_search");

        $("#websearch").html(content+jumplist);
      }
    }
  });
}




/**
 * Name         : perform_image_search
 * Beschreibung : Fuehrt ueber die Google-API eine Bildersuche aus
 */
function perform_image_search(query, start) {
	if (undefined == start)
	  start = 0;
	
	$("#imagesearch").empty();

  $.ajax({
    url: "http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q=" + encodeURIComponent(query) + "&key=ABQIAAAANS-OAG70mH-xr6-jJHtBjhSymAeCsvOS19O6f-wayMzpXBagmxRXykok0BA9j4i8JighS7Dc7GiImg&rsz=large&start="+start,
    dataType: 'jsonp',
    success: function(data) {
      if (0 == data.responseData.results.length) {
        $("#imagesearch").append('<p>Zu diesem Suchbegriff wurden keine Bilder gefunden.</p>');
      }
      else {
        $.each(data.responseData.results, function(i,item){
          item.visibleUrl = item.url.match(/:\/\/(.[^/]+)/)[1];
          $("#imagesearch").append('<div class="web_image"><div class="web_img_wrapper"><a href="'+item.url+'" target="_blank"><img src="'+item.tbUrl+'" alt="'+item.titleNoFormatting+'" /></a></div>'+item.contentNoFormatting+'<br /><a href="'+item.url+'" target="_blank">'+item.visibleUrl+'</a></div>');
        });
        
        var jumplist = get_jumplist(data, query, start, "perform_image_search");
        $("#imagesearch").append(jumplist);
      }
    }
  });
}




/**
 * Name         : perform_video_search
 * Beschreibung : Fuehrt ueber die YouTube-API eine Videosuche aus
 */
function perform_video_search(query, start) {
	if (undefined == start)
	  start = 1;
	
	$("#videosearch").empty();

  $.ajax({
    url: "http://gdata.youtube.com/feeds/api/videos?q=" + encodeURIComponent(query) + "&max-results=4&v=2&alt=json&start-index="+start,
    dataType: 'jsonp',
    success: function(data) {
      if (undefined == data.feed.entry) {
        $("#videosearch").append('<p>Zu diesem Suchbegriff wurden keine Videos gefunden.</p>');
      }
      else {
        $.each(data.feed.entry, function(i,item){
          var id = item.id.$t.substr(item.id.$t.lastIndexOf(':')+1);
          $("#videosearch").append('<div class="web_video"><div class="web_video_wrapper"><object width="280" height="231"><param name="movie" value="http://www.youtube.com/v/'+id+'&hl=de_DE&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/'+id+'&hl=de_DE&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="280" height="231"></embed></object></div><a class="video_name" href="'+item.link.href+'">'+item.title.$t+'</a></div>');
        });

        var jumplist = get_yt_jumplist(data, query, start, "perform_video_search");
        $("#videosearch").append(jumplist);
      }
    }
  });
}




/**
 * Name         : get_jumplist
 * Beschreibung : Erstellt die Jumplist fuer die Google-API
 */
function get_jumplist(data, query, start, func_name) {
	var items = data.responseData.results.length;
	
	var jumplist = '';
        
  jumplist += '<div class="go_to_top skimming_poi"><div class="skim_sites">'+"\n";
  if (0 != data.responseData.cursor.currentPageIndex) {
  	jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+(start-items)+');" class="prev">zurück</a><span class="site_seperator">|</span>'+"\n";
  }
  
  $.each(data.responseData.cursor.pages, function(i,item){
  	var act_class = '';
  	if (start == item.start)
  		act_class = ' class="current"';
  	
    jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+item.start+');"'+act_class+'>'+item.label+'</a>'+"\n";
    if (data.responseData.cursor.pages.length > i+1)
      jumplist += '<span class="site_seperator">|</span>'+"\n";
  });

  if (7 > data.responseData.cursor.currentPageIndex && (data.responseData.cursor.currentPageIndex+1) < data.responseData.cursor.pages.length) {
  	jumplist += '<span class="site_seperator">|</span>'+"\n";
  	jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+(start+items)+');" class="next">weiter</a>'+"\n";
  }
  else if (8 == data.responseData.cursor.pages.length) {
  	jumplist += '<span class="site_seperator">|</span>'+"\n";
  	jumplist += '<a href="'+data.responseData.cursor.moreResultsUrl+'" target="_blank" class="next">weitere Ergebnisse bei Google</a>'+"\n";
  }
  jumplist += '</div></div>';
  
  return jumplist;
}




/**
 * Name         : get_yt_jumplist
 * Beschreibung : Erstellt die Jumplist fuer die YouTube-API
 */
function get_yt_jumplist(data, query, start, func_name) {
	var items = data.feed.openSearch$itemsPerPage.$t
	
	var jumplist = '';
        
  jumplist += '<div class="go_to_top skimming_poi"><div class="skim_sites">'+"\n";
  if (1 != data.feed.openSearch$startIndex.$t) {
  	jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+(start-items)+');" class="prev">zurück</a><span class="site_seperator">|</span>'+"\n";
  }
  
  for (var i = 1; i < 9; i++){
  	var new_start = (i-1) * items + 1; 	
  	
  	var act_class = '';
  	if (start == new_start)
  		act_class = ' class="current"';
  	
    jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+new_start+');"'+act_class+'>'+i+'</a>'+"\n";
    if (8 > i)
      jumplist += '<span class="site_seperator">|</span>'+"\n";
  }

  if (8 > data.feed.openSearch$startIndex.$t) {
  	jumplist += '<span class="site_seperator">|</span>'+"\n";
  	jumplist += '<a href="javascript:'+func_name+'(\''+query+'\', '+(start+items)+');" class="next">weiter</a>'+"\n";
  }
  else {
  	jumplist += '<span class="site_seperator">|</span>'+"\n";
  	jumplist += '<a href="http://www.youtube.com/results?search_query='+encodeURIComponent(query)+'" target="_blank" class="next">weitere Ergebnisse bei YouTube</a>'+"\n";
  }
  jumplist += '</div></div>';
  
  return jumplist;
}




/**
 * Name         : recommend_site
 * Beschreibung : Anzeigen des Formulars zum Versenden der Seite
 */
function recommend_site( ) {
  // Style overlay and show it
  var arrPageSizes = ___getPageSize();
  $('#send_overlay').css({
    backgroundColor:  '#000',
    opacity:			    0.8,
    width:				    arrPageSizes[0],
    height:				    arrPageSizes[1]
  });
  
  //Overlay und iFrame einblenden
  $('#recommendation_frame, #send_overlay').fadeIn();
  
  //Overlay und iFrame auf Klick schliessen
  $('#send_overlay').click(function() {
    $('#send_form_overlay, #send_overlay, #recommendation_frame').fadeOut();
  	// Show some elements to avoid conflict with overlay in IE. These elements appear above the overlay.
  	$('embed, object, select').css({ 'visibility' : 'visible' });			
    //die Hohe des Overlays wieder auf Null setzen um zu verhinden, dass etwas ueber dem uebrigen Content liegt
    $('#send_overlay').css('height', '0');						
  });
}




/**
 * Name         : close_recommend_site
 * Beschreibung : Schliessen des Formulars zum Versen der Seite
 */
function close_recommend_site() {
  $('#bookmark_layer', top.document).hide(); 
  $("#recommendation_frame, #send_overlay", top.document).fadeOut();
  $('#send_overlay').css('height', '0');
}




/**
/ THIRD FUNCTION
* getPageSize() by quirksmode.com
 */
function ___getPageSize() {
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
	return arrayPageSize;
}


