/**
 * Replaces a DOM Element with another, but keeps the classes and IDs of the old one.
 * usage example:  jQuery('a#fooid').replaceWith('<span></span>');
 * before:         <a id="fooid" class="whatever">some text</a>
 * after:          <span id="fooid" class="whatever">some text</span>
 */
jQuery.fn.replaceWith = function(replacement) {
	return this.each (function() {
        var $this = jQuery(this);
        if (replacement === undefined) {
            $this.parent().append($this.html());
        }
        else {
            $this.after(replacement).next().html($this.html());
			for (var i = 0; i < this.attributes.length; i++) {
                $this.next().attr(this.attributes[i].nodeName, this.attributes[i].nodeValue);
			}
		}
        $this.remove();
    });
};

/**
 * Get the anchor from the uri
 */
jQuery.fn.extend({
	getAnchor: function(){
		if(window.location.href.indexOf("#") != -1){
			var url = window.location.href;
			var uanchor = window.location.href.split("#");
			if(uanchor[1]){
				return uanchor[1];
			}
		}
	}
});

/**
 * Init configuration for the calendartool
 */
function initBeraterToolCalendar() {
 var ms = jQuery('input#qf-months-texts').val();
 var ma = "";
 if (ms) {
     ma = ms.split(",");
 }

 var ws = jQuery('input#qf-weekday-texts-short').val();
 var wa = "";
 if (ws) {
     wa = ws.split(",");
 }

 var cs = jQuery('input#qf-cal-close-text').val();

 calman.config = {
     "today"           : new Date(),
     "viewPeriodS"     : parseUserDateInput("01.01.1900"),
     "viewPeriodE"     : parseUserDateInput("31.12.2099"),
     "dataPeriodS"     : parseUserDateInput("01.01.1900"),
     "dataPeriodE"     : parseUserDateInput("31.12.2099"),
     "monthsTexts"     : ma,
     "weekdaysTexts"   : wa,
     "closeText"       : cs,
     "showShortYear"   : false,
     "styleClass"      : "calendardiv",
     "useWeekdays"     : false
 }
}

/**
 * DB Bahn JavaScript
 * Copyright (c) 2008, namics (deutschland) gmbh. All rights reserved.
 * Code licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * */

/** verhindern von Konflikten mit dem '$' anderer JS-Bibliotheken wie z. B. Prototype */
jQuery.noConflict();

var BAHN = {
	key_tab: 9,
	key_return: 13,
	key_space: 32,
	key_backspace: 8,

	key_pageup: 33,
	key_pagedown: 34,

	key_left: 37,
	key_up: 38,
	key_right: 39,
	key_down: 40,

	key_minus: 86,
	key_plus: 93,
	key_add: 132,
	key_substract: 140,

	aCampaignImg: [], // new Array for Campaign Images

	bcbToolTipData: [], // new Array for BahnCard-Berater teaser tooltips

	// Initialize
	init: function() {
		// Handle fields with default values
		BAHN.initDefaults();
		BAHN.initHoverOverButton();
		// Language Selector
		BAHN.initLanguageSelection();
		// Enable accordeon function in "Schnelleinstieg" on home page
		BAHN.initHomeSchnelleinstieg();
		// Enable buttons to scroll through offers on start page
		BAHN.carouselInit();
		// Handle row opening in FAQ
		BAHN.initRowOpener();
		// Handle Tab opening in Content
		BAHN.initTabElement();
		// Initialize the main navigation
		BAHN.initNav();
		// Initialize the autocomplete
		BAHN.initAutocomplete();
		// Servicemenu Selector
		BAHN.initServicemenu();
		// Font resizr
		BAHN.initFontResize();
		// Handle Toggling Elements
		BAHN.initClapContent();
		// Init Countryselector
		BAHN.initCountrySelect();
		// Tochtersite RegioSelect
		BAHN.initRegioSelect();
		// Folding boxes
		BAHN.initAccordionBox();
		// Tooltips
		BAHN.initTooltips();
		// Init Scramblecode
		BAHN.initScramblecode();
		// Fahrgastrechte
		BAHN.initFormFahrgastrechte();
		// Quickfinder Stadtverkersites
		BAHN.initQuickfinderStadtverkehr();
		// Initialize Berater Tools Functions
		BAHN.initBeraterToolsWidget();
		// Enable BahnCard-Berater tooltips
		BAHN.initBcbToolTips();
		// Init BahnCard-Berater form submit
		BAHN.initBcbFormSubmit();
		// Set international location cookie
		BAHN.setIntLocationCookie();
		// Add pseudo hover to buttons
		BAHN.initIE6ButtonHover();
		// Add abbr element in IE 6-7
		document.createElement('abbr');
		// Remove alt-text as tool-tips in IE
		//jQuery( 'img' ).attr( 'title', '' );
		// Initialize the campaign tool on a start page and pre-load images after the rest of the page is ready
		jQuery( window ).load( BAHN.initCampaignTool );
		// Initialize the search lightbox
		if ( typeof search_tb_init !== 'undefined' ) {
			search_tb_init('#search');
		}
	},

	// init fields with default values
	initDefaults: function() {
		// Set event listeners to input elements with default text
		jQuery('input.hasDefault, textarea.hasDefault')
			.blur( BAHN.inputDefaults )
			.focus( BAHN.inputDefaults )
			.click( BAHN.inputDefaults );
		// Defaulttexte in Eingabefeldern anzeigen
		jQuery('input.hasDefault, textarea.hasDefault').blur();
		// Defaulttexte eines Forms durch Klick eines Submitbuttons (Button o. Input) mit dieser CSS-Klasse loeschen
		jQuery('button.deleteDefaults').click(BAHN.delInputDefaults);
		jQuery('input.deleteDefaults').click(BAHN.delInputDefaults);
		jQuery('textarea.deleteDefaults').click(BAHN.delInputDefaults);
	},

	// Handle row opening in FAQ
	initRowOpener: function() {
		// FAQ pages:
		var preventOnce = 0;

		//var thisElement = jQuery(this);
		//var jQuery(this).parent() = thisElement.parent();
		//var jQuery(this).parent().next() = thisElement.parent().next();

		BAHN.setFaqTabindex();

		// open all rows
		jQuery('#openAll').click(function(){
			BAHN.openRow();
		}).keydown(function(event){
			if(BAHN.isKeyOk(event) === true) {
				BAHN.openRow();
			}
		}).mouseover(function(){
			jQuery(this).toggleClass('active');
		}).mouseout(function(){
			jQuery(this).toggleClass('active');
		});


		// close all rows
		jQuery('#closeAll').click(function(){
			BAHN.closeRow();
		}).keydown(function(event){
			if(BAHN.isKeyOk(event) === true) {
				BAHN.closeRow();
			}
		}).mouseover(function(){
			jQuery(this).toggleClass('active');
		}).mouseout(function(){
			jQuery(this).toggleClass('active');
		});

		// toggle points
		// mod: to become more generic and to be able to use the opener class outside the threeColumnContainer
		//jQuery('h2.opener, h3.opener', 'div.threeColumnContainer').click(function() {
		jQuery('h2.opener, h3.opener').click(function() {
			if (preventOnce == 1) {
				preventOnce = 0;
				jQuery(this).toggleClass('openerActive');
			}
			jQuery(this).next().toggle();
			jQuery(this).next().next().toggle();
			preventOnce = 1;
		}).keydown(function(event) {
			if(BAHN.isKeyOk(event) === true) {
				jQuery(this).next().toggle();
				jQuery(this).next().next().toggle();
				jQuery(this).toggleClass('openerActive');
			}
		}).mouseover(function() {
			if (preventOnce == 1) {
				preventOnce = 0;
			} else {
				jQuery(this).toggleClass('openerActive');
			}
		}).mouseout(function() {
			if (preventOnce == 1) {
				preventOnce = 0;
			} else {
				jQuery(this).toggleClass('openerActive');
			}
		}).attr( BAHN.nTabindex(), '0' );

		if(jQuery('#content h2.opener, #content h3.opener').length > 0)  {
			var elementToOpen = jQuery(document).getAnchor() - 1;

			jQuery("h2.opener:eq(" + elementToOpen + ")").toggleClass('openerActive');
			jQuery("h2.opener:eq(" + elementToOpen + ")").next().toggle();
			jQuery("h2.opener:eq(" + elementToOpen + ")").next().next().toggle();

		}

		//Sitemap
		jQuery('h2.openSection, a.openSection, h3.openerSection').click(function() {
			BAHN.openSitemapSection(this);
		}).keydown(function(event){
			if(BAHN.isKeyOk(event) === true) {
				BAHN.openSitemapSection(this);
			}
		}).mouseover(function(event){
			//jQuery(this).toggleClass('openerActive');
		});

		jQuery('h2.closeSection, a.closeSection, h3.closeSection').click(function() {
			BAHN.closeSitemapSection(this);
		}).keydown(function(event){
			if(BAHN.isKeyOk(event) === true) {
				BAHN.closeSitemapSection(this);
			}
		});

		// toggle points in tables
		jQuery('td.opener').click(function() {
			jQuery(this).parent().next().children('td.opener-content').children('div.more').toggle();
			if (jQuery(this).parent().next().children('td.opener-content').children('div.more').length) {
				jQuery(this).parent().toggleClass('active');
				jQuery(this).parent().next().toggleClass('active');
			}
		}).keydown(function( event ){
			if(BAHN.isKeyOk(event) === true) {
				jQuery(this).parent().next().children('td.opener-content').children('div.more').toggle();
				if (jQuery(this).parent().next().children('td.opener-content').children('div.more').length) {
					jQuery(this).parent().toggleClass('active');
					jQuery(this).parent().next().toggleClass('active');
				}
			}
		}).mouseover(function() {
			jQuery(this).parent().toggleClass('hover');
		}).mouseout(function() {
			jQuery(this).parent().toggleClass('hover');
		}).attr( BAHN.nTabindex(), '0' );

		// A-Z Index
		jQuery( '#a-z-show-hide-button a' ).click( function( event ) {
			var sNewValue = jQuery( '#a-z-toggle-description' ).val();
			var sCurValue = jQuery( '#a-z-show-hide-button a span' ).text();
			//alert(sNewValue + '|' + sCurValue);
			jQuery( '#a-z-toggle-description' ).val(sCurValue);
			jQuery( '#a-z-show-hide-button a span' ).text(sNewValue);
			event.preventDefault();
			jQuery( 'div.a-z li li p' ).toggle();
		});

		BAHN.updateBuffer();
	},

	// Handle tab opening in tabelements
	initTabElement: function() {
		jQuery( 'ul.reiterlist li a' ).each( function( i ) {
			jQuery(this).attr('aria-controls', 't-content-' + (i + 1) );
		}).attr( BAHN.nTabindex(), '0' );
		jQuery( 'ul.reiterlist' ).each( function () {
			jQuery(this).removeClass('hide');
		});
		jQuery( 'ul.reiterlist li.first' ).each( function () {
			jQuery(this).addClass('active');
		});
		jQuery( 'div.tabcontent' ).hide();
		jQuery( 'ul.reiterlist' ).next().show();
		jQuery( 'ul.reiterlist li a' ).each( function () {
			jQuery(this).click( BAHN.tabClick );
			jQuery(this).keydown( BAHN.tabClick );
		});

		// Update screenreader buffer
		BAHN.updateBuffer();
	},

	// Tab click in tabelement
	tabClick: function( event ) {
		// Set variables
		var oTarget = BAHN.getTarget( event ), sType = event.type, nodeName = oTarget.nodeName.toLowerCase(), bAltKey = event.altKey, iKey = event.keyCode, bKeydown = (!bAltKey && (iKey === BAHN.key_return || iKey === BAHN.key_down || iKey === BAHN.key_space));
		// Return if event happened on an irrelevant element or wrong key was pressed
		if ( nodeName !== 'a' || ( sType === 'keydown' && bKeydown === false ) ) {
			return;
		} else {
			// Remove active class from all li-elements and hide tabcontent
			jQuery( oTarget ).parents( 'li' ).siblings().removeClass('active');
			jQuery( oTarget ).parents( 'ul' ).siblings( 'div.tabcontent' ).hide();
			// Add active class to li-element and show tabcontent
			var dTarget = '#' + jQuery( oTarget ).attr('aria-controls');
			jQuery( oTarget ).parents( 'li' ).addClass('active');
			jQuery( dTarget ).show();
			// Update screenreader buffer
			BAHN.updateBuffer();
			return false;
		}
	},

	isKeyOk: function (event) {
		var iKey = event.keyCode;
		if (iKey == BAHN.key_right || iKey == BAHN.key_down || iKey == BAHN.key_left || iKey == BAHN.key_up || iKey == BAHN.key_return || iKey == BAHN.key_space) {
			return true;
		}
		return false;
	},

	openSitemapSection: function( object ) {
		var oContainer = jQuery(object).parent().prev();
		oContainer.find("div.threeColumnRow").show();
		oContainer.find("div.liner").hide();
		oContainer.find("h2.opener").addClass('openerActive');
	},
	closeSitemapSection: function (object) {
		var oContainer = jQuery(object).parent().prev();
		oContainer.find("div.threeColumnRow").hide();
		oContainer.find("div.liner").show();
		oContainer.find("h2.opener").removeClass('openerActive');
	},
	openRow: function() {
		jQuery('div.threeColumnContainer div.threeColumnRow').show();
		jQuery('div.threeColumnContainer div.oneColumnContainerAnswer').show();
		jQuery('div.foldingBox.simple div.foldingBoxRow').show();
		jQuery('div.liner').hide();
		jQuery('h2.opener, h3.opener').addClass('openerActive');
	},
	closeRow: function() {
		jQuery('div.threeColumnContainer div.threeColumnRow').hide();
		jQuery('div.threeColumnContainer div.oneColumnContainerAnswer').hide();
		jQuery('div.foldingBox.simple div.foldingBoxRow').hide();
		jQuery('div.liner').show();
		jQuery('h2.opener, h3.opener').removeClass('openerActive');
	},

	initHoverOverButton: function() {
		jQuery('button.linkButton').mouseover( function() {
			jQuery('button.linkButton').toggleClass('linkButtonHover');
		});
		jQuery('button.linkButton').mouseout( function() {
			jQuery('button.linkButton').toggleClass('linkButtonHover');
		});
	},

	// return integer
	qfInteger: function( sId ) {
		return sId ? parseFloat( sId.replace(/[^\d]*/, '') ) : false;
	},

	// Toggle between input field defaults and selected input text
	inputDefaults: function( event ) {
		// Get default value from hidden input element
		var sDefaultValue = jQuery( '#' + this.id + '-default' ).val();
		// If field is empty on blur, fill with default value
		if ( event.type === 'blur' && this.value === '' ) {
			jQuery( this ).val( sDefaultValue );
		}
		// field is clicked on, remove default value
		else if ( event.type === 'click' && this.value === sDefaultValue ) {
			this.value = '';
			return false;
		}
		// Field receives focus
		else if ( event.type === 'focus' ) {
			this.select();
		}
	},

    // Inputfelder leeren
    delInputDefaults: function(event) {
        oTarget = BAHN.getTarget(event);
        // Formular ermitteln, in dem das Event stattfand
        var oForm = oTarget.form || oTarget;
        // Klick in alle Felder mit Default-Texten des aktuellen Formulars,
        // wodurch die Default-Texte geloescht werden
        jQuery('#' + oForm.id + ' :input.hasDefault').click();
    },

	// Enable accordeon function in "Schnelleinstieg" on home page
	initHomeSchnelleinstieg: function() {
		jQuery( '#schnelleinstieg h3' ).each( function( i ) {
			jQuery(this).attr('aria-controls', 's-content-' + (i + 1) );
		}).attr( BAHN.nTabindex(), '0' ).removeClass('open');
		jQuery( '#schnelleinstieg h3.first' ).addClass('open');
		jQuery( '#schnelleinstieg' ).mouseover( BAHN.accordeonHover )
			.focus( BAHN.accordeonHover )
			.mouseout( BAHN.accordeonHover )
			.blur( BAHN.accordeonHover )
			.click( BAHN.accordeonClick )
			.keydown( BAHN.accordeonClick );
	},
	// Accordeon hover in "Schnelleinstieg" on home page
	accordeonHover: function( event ) {
		// Set variables
		var oTarget = BAHN.getTarget( event ), sType = event.type, nodeName = oTarget.nodeName.toLowerCase();
		// Return if event happened on an irrelevant element
		if ( nodeName !== 'h3' ) {
			return;
		} else {
			// Set jQuery target object
			oTarget = jQuery( oTarget );
			// Check event type and if div is open
			var bOverType = ( sType === 'mouseover' || sType === 'focus');
			var bDisplay = ( oTarget.next().css( 'display' ) === 'block' );
			if ((bOverType && bDisplay) || (!bOverType && !bDisplay)) {
				oTarget.removeClass('open'); // show closed icon
			} else {
				oTarget.addClass('open'); // show open icon
			}
		}
	},
	// Accordeon click in "Schnelleinstieg" on home page
	accordeonClick: function( event ) {
		// Set variables
		var oTarget = BAHN.getTarget( event ), sType = event.type, nodeName = oTarget.nodeName.toLowerCase(), bAltKey = event.altKey, iKey = event.keyCode, bKeydown = (!bAltKey && (iKey === BAHN.key_return || iKey === BAHN.key_down || iKey === BAHN.key_space));
		// Return if event happened on an irrelevant element or wrong key was pressed
		if ( nodeName !== 'h3' || ( sType === 'keydown' && bKeydown === false ) ) {
			return;
		} else {
			// Remove openess from all h3 and div children
			jQuery( 'h3', this ).removeClass('open');
			jQuery( 'div', this ).hide();
			// Add open class to h3 and show div
			jQuery( oTarget ).addClass('open').next().show();
			// Update screenreader buffer
			BAHN.updateBuffer();
			return false;
		}
	},

	/* Rollover Navigation
	 * Add events to 1st level a-tag */
	initNav: function() {
		var lastId = false;

		// Add events to the first level navigation
		jQuery( '#main-nav a.jhover' ).mouseover( function() {

			//var thisElement = jQuery(this);
		    //var jQuery(this).parent() = thisElement.parent();
		    var thisparentid = jQuery(this).parent().attr('id');

			jQuery(this).parent().addClass( 'rollover' );


			if ( lastId && lastId !== thisparentid ) {
				jQuery( '#' + lastId ).removeClass( 'rollover' );
			}
			lastId = thisparentid;
		}).focus( function() {
			jQuery( this ).parent().addClass( 'rollover' );
		}).blur( function() {
			if ( lastId ) {
				jQuery( '#' + lastId ).removeClass('rollover');
			}
			jQuery( this ).parent().removeClass( 'rollover' );
		});

		// Add events to layers in the left part of the main navigation
		jQuery( '#main-nav-left li h3, #main-nav-left li ul' ).mouseout( function() {
			if ( lastId ) {
				jQuery( '#' + lastId ).removeClass( 'rollover' );
			}
			jQuery( this ).parents( 'li' ).removeClass( 'rollover' );
		}).mouseover( function() {
			jQuery( this ).parents( 'li' ).addClass( 'rollover' );
		}).bgiframe(); // Fix z-index bug in IE6

		// Add events to login layer
		jQuery( '#main-nav-right li h3, #main-nav-right li ul' ).mouseover( function() {
			jQuery( this ).parent().addClass( 'rollover' );
		});
		// Add events to some div container to fix login layer
		jQuery('#key-visual, #header, #content').mouseover(function(){
			jQuery('#mn-login').removeClass('rollover');
		}).bgiframe(); // Fix z-index bug in IE6

		// Add keyboard events to new layer a-tags */
		jQuery( '#main-nav ul ul a' ).focus( function() {
			jQuery( this ).parent().parent().parent().addClass( 'rollover' );
			lastId = jQuery( this ).parents( 'li' ).attr( 'id' );
		}).blur( function() {
			if ( lastId ) {
				jQuery( '#' + lastId ).removeClass('rollover');
			}
			jQuery( this ).parent().parent().parent().removeClass( 'rollover' );
		});

		// Special events for login layer
		jQuery( '#main-nav li#mn-login a.jhover' ).mouseover( function() {
			jQuery( '#mn-login-username' ).focus();
		}).focus( function() {
			jQuery( '#mn-login-username' ).focus();
			jQuery(this).next().addClass( 'rollover' );
			jQuery(this).next().next().addClass( 'rollover' );
		});

		// Language Selector
		jQuery( '#language-selector-layer span' ).click( function( event ) {
			jQuery(this).parent().toggleClass('active');
		}).focus( function( event ) {
			jQuery(this).parent().toggleClass('active');
		}).keydown(function( event ){
			if(BAHN.isKeyOk(event) === true) {
				jQuery(this).parent().toggleClass('active');
			}
		}).attr( BAHN.nTabindex(), '0' );
		jQuery( '#language-selector-layer' ).mouseover( function() {
			jQuery(this).addClass('hover');
		}).mouseout( function() {
			jQuery(this).removeClass('hover');
		});

		// Site Actions
		jQuery( '#link-print' ).click( function( event ) {
			if ( window.print ) {
				window.print();
				return false;
			}
		});

		jQuery( '#link-close' ).click( function( event ) {
			if ( window.close ) {
				window.close();
				return false;
			}
		});
	},

	// init function for the input field in the header
	initAutocomplete: function() {
		if( jQuery( '#search-ac' ).length > 0 && jQuery( '#search-ac' ).val() == 1) {
			jQuery( '#search-query' ).autocomplete( null, {	multiple: true,
															multipleSeparator: ' ',
															customcacheUrl: '/q/l',
															customcacheSite: jQuery( '#search-site' ).val(),
															customcacheLang: jQuery( '#search-lang' ).val(),
															formatItem: function(row) { return row; }
												});

			if(jQuery.browser.safari() || (jQuery.browser.msie() && jQuery.browser.version.number() < 7)) {
				jQuery( '#search-query' ).keydown( function( event ) {
					if(event.keyCode == BAHN.key_backspace && jQuery( '#search-query' ).val().length-1 > 0) {
						jQuery( '#search-query' ).search();
					}
				});
			}
		}
	},

	// init function for the input field in the ajax searchresult
	initContentSearch: function() {
		if( jQuery( '#search-ac' ).length > 0 && jQuery( '#search-ac' ).val() == 1) {
			jQuery( '#contentSearch-query' ).autocomplete( null, {	multiple: true,
																	multipleSeparator: ' ',
																	customcacheUrl: '/q/l',
																	customcacheSite: jQuery( '#contentSearch-site' ).val(),
																	customcacheLang: jQuery( '#contentSearch-lang' ).val(),
																	formatItem: function(row) { return row; }
														});

			if(jQuery.browser.safari() || (jQuery.browser.msie() && jQuery.browser.version.number() < 7)) {
				jQuery( '#contentSearch-query' ).keydown( function( event ) {
					if(event.keyCode == BAHN.key_backspace && jQuery( '#contentSearch-query' ).val().length-1 > 0) {
						jQuery( '#contentSearch-query' ).search();
					}
				});
			}
		}
	},

	initIE6ButtonHover: function() {
		if ( jQuery.browser.msie() && jQuery.browser.version.number() < 7 ) {
			jQuery( 'button' ).mouseover( function() {
				jQuery(this).addClass('hover');
			}).mouseout( function() {
				jQuery(this).removeClass('hover');
			});
		}
	},

	initLanguageSelection: function() {
		if(jQuery( '#country-select' ).length > 0) {
			jQuery( '#country-select' ).selectbox();
		}else if(jQuery( '#language-select' ).length > 0) {
			jQuery( '#language-select' ).change( function() {
				location.href = jQuery( '#language-select' ).val();
			});
		}
	},

	// Font resize
	initFontResize: function() {
		jQuery( '#font-sizer' ).click( BAHN.fontResize );
		var fontSize = jQuery.cookie( 'bahn-font' );
		// Resize font if cookie is set and font size hasn't been set by the backend
		if ( fontSize !== '' ) {
			BAHN.fontResize( null, fontSize );
		}
	},
	fontResize: function( event, fontSize ) {
		// Set variables
		var oTarget = BAHN.getTarget( event ), fontsize = ( event ) ? jQuery( oTarget ).attr( 'class' ) : fontSize;

		// Generate servername
		var tld = window.location.hostname;
		if(tld != 'localhost') {
			tld = tld.split(".");
			tld.shift();
			tld = '.' + tld.join('.');
		}

		// Set font size
		jQuery( 'body' ).attr( 'class', fontsize );
		jQuery.cookie( 'bahn-font', fontsize, { expires: '', path: '/', domain: tld } );
		return false;
	},

	/* Carousel function based on jCarouselLite 1.0.1
	 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
	 * Dual licensed under the MIT and GPL licenses:
	 * http://www.opensource.org/licenses/mit-license.php
	 * http://www.gnu.org/licenses/gpl.html */
	carouselInit: function() {
		var o = jQuery( '#carousel' ), iKey;
		if ( o.length > 0 ) {
			( function($) {
				jQuery.fn.jCarouselLite = function( o ) {
					o = jQuery.extend( {
						btnPrev: jQuery('#carousel-prev'), btnNext: jQuery('#carousel-next'), btnGo: null, mouseWheel: false, auto: null,
						speed: 300, easing: null,
						vertical: false, circular: true, visible: 2, start: 0, scroll: 2,
						beforeStart: null, afterEnd: null, autorotate: true
					}, o || {} );
					return this.each ( function() {
						var running = false, animCss = 'left', sizeCss = 'width';
						var div = jQuery( '#carousel-wrapper' ), ul = jQuery( '#carousel' ), tLi = ul.children( 'li' ), tl = tLi.size(), v = o.visible;

						// Allow circular carousel
						ul.prepend( tLi.slice( tl - v - 1 + 1 ).clone() ).append( tLi.slice( 0, v ).clone() );
						o.start += v;

						var li = ul.children( 'li' ), itemLength = li.size(), curr = o.start;
						div.css('visibility', 'visible');
						BAHN.setTabindex( vis() );

						var liSize = BAHN.width( li );
						var ulSize = liSize * itemLength + 16;
						ul.css( sizeCss, ulSize + 'px' ).css( animCss, -(curr * liSize) );

						if ( o.btnPrev ) {
							jQuery( o.btnPrev ).removeAttr( 'aria-disabled' ).attr( BAHN.nTabindex(), 0 ).click( function() {
								// Stop autorotate
								window.clearInterval(autorotateInterval);
								return go( curr - o.scroll );
							}).keydown( function( event ) {
								if (!event.altKey) {
									if ((iKey = event.keyCode) && (iKey == BAHN.key_return || iKey == BAHN.key_left || iKey == BAHN.key_up)) {
										return go(curr - o.scroll);
									} else if ( iKey == BAHN.key_right || iKey == BAHN.key_down ) {
										return go(curr + o.scroll);
									} else {
										return;
									}
								}
							});
						}
						if ( o.btnNext ) {
							jQuery( o.btnNext ).removeAttr( 'aria-disabled' ).attr( BAHN.nTabindex(), 0 ).click( function() {
								// Stop autorotate
								window.clearInterval(autorotateInterval);
								return go( curr + o.scroll );
							}).keydown( function( event ) {
								if (!event.altKey) {
									if ((iKey = event.keyCode) && (iKey == BAHN.key_return || iKey == BAHN.key_right || iKey == BAHN.key_down)) {
										return go(curr + o.scroll);
									} else if ( iKey == BAHN.key_left || iKey == BAHN.key_up ) {
										return go(curr - o.scroll);
									} else {
										return;
									}
								}
							});
						}

						function vis() {
							return li.slice( curr ).slice( 0, v );
						}

						function go( to ) {
							if (!running) {
								if (to <= o.start - v - 1) { // If first, then goto last
									ul.css(animCss, -((itemLength - (v * 2)) * liSize) + 'px');
									// If "scroll" > 1, then the "to" might not be equal to the condition; it can be lesser depending on the number of elements.
									curr = (to == o.start - v - 1) ? itemLength - (v * 2) - 1 : itemLength - (v * 2) - o.scroll;
								} else if (to >= itemLength - v + 1) { // If last, then goto first
									ul.css(animCss, -((v) * liSize) + "px");
									// If "scroll" > 1, then the "to" might not be equal to the condition; it can be greater depending on the number of elements.
									curr = (to == itemLength - v + 1) ? v + 1 : v + o.scroll;
								} else {
									curr = to;
								}

								running = true;

								ul.animate(
									{ left: -(curr * liSize) }, o.speed, o.easing,
									function() {
										BAHN.setTabindex( vis() );
										BAHN.updateBuffer();
										running = false;
									}
								);
							}
							return false;
						}

						// Autorotate
						var autorotateInterval;
						if( o.autorotate ) {
							autorotateInterval = window.setInterval(function() {
																		go( curr + o.scroll );
																	}, 7000);
						}
					});
				};
			}) ( jQuery );
			o.jCarouselLite();
		}
	},

	css: function( elm, prop ) {
		return parseInt( jQuery.css( elm[0], prop ), 10 ) || 0;
	},

	width: function( elm ) {
		return elm[0].offsetWidth + BAHN.css( elm, 'marginLeft' ) + BAHN.css( elm, 'marginRight' );
	},

	// Initialize the campaign tool on the start page
	initCampaignTool: function() {
		var obj = document.getElementById( 'kampagnen' );
		var oKeyvisual = document.getElementById( 'key-visual-content' );
		// Run only when the campaign tool is present
		if ( obj ) {
			// Get values from hidden input fields
			jQuery( 'input.cvalue', '#kampagnen-defaults' ).each( function(i) {
				var aValues = jQuery( this ).val().split('::');
				// Pre-load images in cache
				BAHN.aCampaignImg[i] = new Image;
				BAHN.aCampaignImg[i].src = aValues[0];
				BAHN.aCampaignImg[i].alt = aValues[1];
				BAHN.aCampaignImg[i].longdesc = aValues[2];
			});
			// Add event listeners
			jQuery( obj ).mouseover( BAHN.campaignHover ).mouseout( BAHN.campaignOut ).bind( 'focusin', BAHN.campaignHover ).bind( 'focusout', BAHN.campaignOut );
			if (obj.addEventListener) {
				obj.addEventListener('focus', BAHN.campaignHover, true);
				obj.addEventListener('blur', BAHN.campaignOut, true);
			}
			if (obj.attachEvent) {
				obj.attachEvent('focus', BAHN.campaignHover);
				obj.attachEvent('blur', BAHN.campaignOut);
			};
		}
	},

	// Mouseover for campaign tool
	campaignHover: function( event ) {
		// Set variables
		var oDOMTarget = BAHN.getTarget( event ), nodeName = oDOMTarget.nodeName.toLowerCase(), oTarget = jQuery( oDOMTarget ), sId = oTarget.attr( 'id' );
		if ( nodeName === 'a' ) {
			BAHN.campaignReplaceImage( sId );
		}
	},

	campaignOut: function( event ) {
		// Set variables
		var oDOMTarget = BAHN.getTarget( event ), nodeName = oDOMTarget.nodeName.toLowerCase(), oTarget = jQuery( oDOMTarget ), sId = oTarget.attr( 'id' ), iTarget = BAHN.qfInteger( sId );
		if ( nodeName === 'a' ) {
			BAHN.campaignMarkLink( oTarget );
		}
	},

	campaignReplaceImage: function( id ) {
		var iTarget = BAHN.qfInteger( id ), oImg = BAHN.aCampaignImg[iTarget - 1];
			// Do something only if image is available
			if ( oImg ) {
				jQuery( '#key-visual-content' ).attr( 'href', oImg.longdesc ); // Change URI
				jQuery( '#key-visual img' ).attr( 'alt', oImg.alt ); // Change alt-text
				// Append new image
				var oReplacement = document.createElement( 'img' );
				oReplacement.src = oImg.src;
				oReplacement.id = 'key-visual-replacement';
				document.getElementById( 'key-visual' ).appendChild( oReplacement );
				// Swap images
				jQuery( '#key-visual-content img' ).fadeOut('fast', function() {
					jQuery( '#key-visual-content img' ).show().attr( 'src', oImg.src ).css( 'opacity', '1' ); // Show swapped image
					jQuery( '#key-visual-replacement' ).remove(); // Remove temporary image
				});
			}
	},

	campaignMarkLink: function( target ) {
		target.parent().attr( 'class', 'active' ); // Mark active
		jQuery( '#kampagnen a' ).not( jQuery( target ) ).parent().removeAttr( 'class' ); // Mark inactive
			BAHN.updateBuffer(); // Update screen reader buffer
	},

	/****************************
	 * General helper functions *
	 ****************************/

	// Force screen reader buffer update
	updateBuffer: function() {
		jQuery( '#bufferUpdater' ).val( Math.random() );
	},

	// Return the event target element, not a text node
	getTarget: function( event, resolveTextNode ) {
		if (!event) {
			return false;
		}
		var t = event.target || event.srcElement;
		return t;
	},

	// Set the tabindex on all carousel links to -1, except for those of the active items
	setTabindex: function( aElms ) {
		jQuery( '#carousel a' ).attr( BAHN.nTabindex(), '-1' );
		jQuery('a', aElms).removeAttr( BAHN.nTabindex() );
	},

	// Normalize tabindex attribute
	nTabindex: function() {
		return jQuery.browser.msie() ? 'tabIndex' : 'tabindex';
	},

	setFaqTabindex: function() {
		jQuery('h2.opener').attr(BAHN.nTabindex(), '0');
		jQuery('h2#openAll').attr(BAHN.nTabindex(), '0');
		jQuery('h2#closeAll').attr(BAHN.nTabindex(), '0');
	},

	// Sortierfunktion fuer Selectboxoptionen nach ihrem Anzeigetext
        optionTextSorter: function(o1, o2) {
                return o1.text !== o2.text ? (o1.text < o2.text ? -1 : 1 ) : 0;
	},


	/*******************************************************************/
	/***** Tablist *****/
	/*******************************************************************/

	// Initialize all Functions for the Widget
	initBeraterToolsWidget: function() {
		// Activate tab navigation
		BAHN.initTabs();
		// Init Datepickers
		BAHN.initBeraterToolDatepickers();
		// Filter Regions by Country selection
		BAHN.initFilterRegionByCountry();
		// Filter Hinflug/Rueckflug
		BAHN.initFilterFlugTyp();
		// Formular Submit
		BAHN.initBeraterFormSubmit();
		// Calendar navigation pervious / next
		jQuery( '#content-shadow span.calendar-nav a, #berater-widget span.calendar-nav a' ).click( BAHN.tabSetDate );
		// set first radio as checked on first load
		//if ( jQuery( '#berater-widget ul.tablist li input.radio' ).length > 0 ) {
		//	jQuery( '#berater-widget ul.tablist li input.radio:first' ).attr('checked', 'checked')
		//}
		// Tarifberater
		BAHN.initTarifberater();
	},

	initTabs: function() {
		var aTablist = jQuery( '#berater-widget ul.tablist' ), i = 0;
		jQuery( '#berater-widget ul.tablist li' ).attr( BAHN.nTabindex(), '-1' );
		jQuery( '#berater-widget ul.tablist li.active' ).attr( BAHN.nTabindex(), '0' );
		// disable a links in tablist
		jQuery( '#berater-widget ul.tablist a' ).attr('rel','link').removeAttr('href').click(function () { jQuery(this).parent('li').focus(); return false; });

		// make radio clickable an focus the tab element (does not work with IE)
		jQuery( '#berater-widget ul.tablist input:radio' ).click(function () { jQuery(this).parent('li').focus(); return true; });

		// remove the A and NOBR element to fix the "clickability" problems in the internet explorer browser
		jQuery('#berater-widget ul.tablist a').replaceWith();
		jQuery('#berater-widget ul.tablist nobr').replaceWith();

		// make the input.radio element and the a-element clickable
		jQuery('#berater-widget ul.tablist input.radio, #berater-widget ul.tablist a').click(function(){
			jQuery(this).parent().bind('click', BAHN.onTabClick).click();
		});
		while ( aTablist[i] ) {
			if ( aTablist[i].addEventListener ) {
				aTablist[i].addEventListener('click', BAHN.onTabClick, true);
				aTablist[i].addEventListener('focus', BAHN.onTabClick, true);
				aTablist[i].addEventListener('keydown', BAHN.onTabKeydown, false);
				aTablist[i].addEventListener('keypress', BAHN.onTabKeypress, false);
			}
			else if ( aTablist[i].attachEvent ) {
				jQuery( '#berater-widget ul.tablist' ).bind('click', BAHN.onTabClick).keydown( BAHN.onTabKeydown ).keypress( BAHN.onTabKeypress );
			}
			i++;
		}
	},
	onTabClick: function( e ) {
		if ( typeof e.type !== 'undefined' ) var event = e || window.event;
		var oTarget = ( typeof event !== 'undefined' ) ? BAHN.getTarget( event ) : e;
		// Find the active sibling
		var oActive = jQuery( oTarget ).siblings( 'li.active' );
		// If the clicked tab wasn't the active tab, proceed
		if (oActive.length > 0) {
			// Adjust class name, change tabindex on former active element
			oActive.removeClass('active').attr(BAHN.nTabindex(), '-1');
			// Hide corresponding tabpanel
			var iActivePanelId = oActive.attr('id').replace(/(tab-)([0-9])/, "tabpanel-$2");
			jQuery('#' + iActivePanelId).removeClass('active');

			// Add class name, change tabindex on new active element
			jQuery(oTarget).addClass('active').attr(BAHN.nTabindex(), '0').focus();
			// Show corresponding tabpanel
			iActivePanelId = jQuery(oTarget).attr('id').replace(/(tab-)([0-9])/, "tabpanel-$2");
			jQuery('#' + iActivePanelId).addClass('active');

			// check to select the radio button
			jQuery(oTarget).children('input.radio').addClass('checked').attr('checked','checked');
			//BAHN.checkRadioButton( jQuery(oTarget) );

			// Update screenreader buffer
			BAHN.updateBuffer();
		}
	},
	// alle Kalender initialisieren
	initBeraterToolDatepickers: function() {
		// Einstellungen fuer alle Kalender
		initBeraterToolCalendar();
		jQuery( '#content-shadow span.date-picker a, #berater-widget span.date-picker a' ).each(
				function(i){
					var inputId = jQuery(this).attr('aria-controls');
					var inputName = jQuery('#' + inputId).attr('name');
					var calId = i+8;
					var refId = 'callink' + calId;
					jQuery(this).attr('id', refId);

					qfInitCalendar(calId.toString(), inputId, inputName);
					jQuery(this).click(function(){return calman.toggleDisplay(refId);});
				}
		);
    } ,
	// Set previous or next day on calendar input field
	tabSetDate: function( event ) {
		var oTarget = BAHN.getTarget( event ), dNewDate;
		oTarget = ( oTarget.nodeName.toLowerCase() == 'img' ) ? jQuery( oTarget ).parent() : jQuery( oTarget );
		var sId = oTarget.attr( 'aria-controls' );
		var oControls = jQuery( '#' + sId );

		var aCurDate = new Array();
		var aNewDate = new Array();

		aCurDate[sId] = BAHN.tabGetDate( oControls );
		aNewDate[sId] = aCurDate[sId] = ( oTarget.attr( 'class' ).indexOf( 'next' ) != -1 ) ? new Date( aCurDate[sId].getTime() - 24 * 3600 * 1000 ) : new Date( aCurDate[sId].getTime() + 24 * 3600 * 1000 );

		// Concat date string
		var sD = aNewDate[sId].getDate(),
			sDay = ( sD < 10 ) ? ( '0' + sD ) : sD,
			sM = aNewDate[sId].getMonth() + 1,
			sMonth = ( sM < 10 ) ? ( '0' + sM ) : sM;
		// Output date string in input field
		oControls.val( sDay + '.' + sMonth + '.' + aNewDate[sId].getFullYear() );
		return false;
	},
	tabGetDate: function( obj ) {
		var aDate = obj.val().split('.');
		var dCurDate = new Date();
		dCurDate.setYear(aDate[2]);
		dCurDate.setMonth(aDate[1]-1);
		dCurDate.setDate(aDate[0]);
		return dCurDate;
	},
	onTabKeydown: function( e ) {
		var event = e || window.event, k = new BAHN.KeyObject( event );
		var iNum = k.oTarget.id.match(/[tab-]([0-9]*)/), iNum = iNum[1];
		// Previous tab
		if ( ( ( k.iKey === BAHN.key_left || k.iKey === BAHN.key_up ) && !k.bAltKey && !k.bShiftKey && !k.bCtrlKey )
			|| ( k.iKey === BAHN.key_tab && k.bCtrlKey && k.bShiftKey ) ) {
			if ( jQuery( k.oTarget ).is( ':first-child' ) ) {
				BAHN.onTabClick( jQuery( k.oTarget ).siblings(':last') );
			}
			else {
				BAHN.onTabClick( jQuery( k.oTarget ).prev() );
			}
			BAHN.stopPropagation( event );
		}
		// Next tab
		else if ( ( ( k.iKey === BAHN.key_right || k.iKey === BAHN.key_down ) && !k.bAltKey && !k.bShiftKey && !k.bCtrlKey )
			|| ( k.iKey === BAHN.key_tab && k.bCtrlKey && !k.bShiftKey ) ) {
			if ( jQuery( k.oTarget ).is( ':last-child' ) ) {
				BAHN.onTabClick( jQuery( k.oTarget ).siblings(':first') );
			}
			else {
				BAHN.onTabClick( jQuery( k.oTarget ).next() );
			}
			BAHN.stopPropagation( event );
		}
	},
	onTabKeypress: function( e ) {
		var event = e || window.event, k = new BAHN.KeyObject( event );
		if ( ( ( k.iKey === BAHN.key_left || k.iKey === BAHN.key_up || k.iKey === BAHN.key_right || k.iKey === BAHN.key_down ) && !k.bAltKey && !k.bShiftKey && !k.bCtrlKey ) || ( k.iKey === BAHN.key_tab && k.bCtrlKey ) ) {
			BAHN.stopPropagation( event );
		}
	},
	stopPropagation: function ( event ) {
		// Prevent scrolling
		if (event.stopPropagation) event.stopPropagation();
		if (event.preventDefault) event.preventDefault();
		event.cancelBubble = true;
		event.returnValue = false;
	    return false;
	},
	KeyObject: function( event ) {
		var obj = {
			iKey: event.keyCode,
			bCtrlKey: event.ctrlKey,
			bAltKey: event.altKey,
			bShiftKey: event.shiftKey,
			oTarget: BAHN.getTarget( event )
		}
		return obj;
	},
	checkRadioButton: function( obj ) {
		var checkedRadio = obj + ' > input.radio';
		//if (jQuery(obj).hasClass('active') ) alert('active: '+jQuery(obj));
		//if (jQuery(obj).children('.radio')) alert('radio: '+jQuery(obj));

		if (jQuery(obj).hasClass('active') && jQuery(obj).children('.radio')) {
			jQuery(checkedRadio).attr('checked','checked');
			//alert(jQuery(checkedRadio));
			//for (a in jQuery(checkedRadio)) alert(a);
		}
		//if (jQuery(obj).attr('rel')=='link') {
		//	jQuery(obj).click(function () {
		//		alert('ein toter link');
		//		jQuery(this).prev(':radio').attr("checked", "checked");
		//	});
		//}
	},

	// Select Box Land kommuniziert mit Region
	initFilterRegionByCountry: function() {
		if (jQuery('#berater-widget select.land').length) {
			var original_options = '';
			jQuery('#berater-widget select.land').change(function () {
				var selected_value = this.value;
				var selected_split = selected_value.split('_');
				// die ID der abhaengigen Select Box wird mit dem rel-Attribut uebergeben
				var select_option_filter = '#' + jQuery(this).attr('rel');
				// einen moeglichen Filter wieder zuruecksetzen
				if (selected_value == '' && original_options != '') {
					jQuery(select_option_filter).html(original_options);
				}
				// Filtern, wenn 2stelliger Laendercode gefunden wurde
				else if (selected_split.length > 2) {
					// Auswahl Land ermitteln
					var countries = new Array();
					var j = 0;
					for (var i = 0; i < selected_split.length; ++i) {
						// nach 2stelligen Laendercodes suchen
						if (selected_split[i].length == 2 && selected_split[i] === selected_split[i].toUpperCase()) {
							countries[j++] = '_' + selected_split[i] + '_';
						}
					}
					// Filter Region
					if (jQuery(select_option_filter).length) {
						if (original_options != '') jQuery(select_option_filter).html(original_options);
						var options = jQuery(select_option_filter).children('option');
						var new_options = '';
						var all_options = '';
						var j = 0;
						// alle Option Eintraege durchsuchen
						for (var i = 0; i < options.length; ++i) {
							//new_options[j++] = options[i].value + '--' + options[i];
							all_options += '<option value="' + options[i].value + '">' + options[i].innerHTML + '</option>';
							// nach allen moeglichen Regionen suchen
							for (var x = 0; x < countries.length; ++x) {
								var showme = options[i].value.indexOf(countries[x]);
								if (showme > 0) new_options += '<option value="' + options[i].value + '">' + options[i].innerHTML + '</option>';
							}
						}
						jQuery(select_option_filter).html('<option value="">beliebig</option>' + new_options);
						if (original_options == '') original_options = all_options;
					}
				}
			});
		}
	},
	// Hinflug / Rueckflug Filter
	initFilterFlugTyp: function() {
		if (jQuery('#berater-widget select.onewayswitch').length) {
			jQuery('#berater-widget select.onewayswitch').change(function () {
				// bei "nur Hinflug" wird das Rueckdatum ausgeblendet
				if (this.value==1) {
					// die ID der abhaengigen Select Box wird mit dem rel-Attribut uebergeben
					jQuery('#' + jQuery(this).attr('rel')).hide();
				} else {
					jQuery('#' + jQuery(this).attr('rel')).show();
				}
			});
		}
	},
	// Formular Submit
	initBeraterFormSubmit: function() {
		// Grauer Hintergrund beim Stoebern
		if (jQuery('#berater-widget form input[name=MEWurl]').length) {
			jQuery('#berater-widget form input[name=MEWurl]').click(function () {
				jQuery(this).parent().parent().children('label').removeClass('checked');
				jQuery(this).parent().addClass('checked');
				jQuery('#wid-trip-type-form').submit();
			});
		}
		// Klick auf den Link Erweiterte Suche
		if (jQuery('#berater-widget input.link').length) {
			jQuery('#berater-widget input.link').click(function () {
				// ohne Parameter Start
				if (jQuery('#berater-widget input[name=start]').length) {
					jQuery('#berater-widget input[name=start]').val('');
				}
			});
		}
		// Fomular Submit
		if (jQuery('#berater-widget .tabpanel form').length) {
			jQuery('#berater-widget .tabpanel form').submit(function () {
				// Parameter fdyfr, fmofr, fdyto und fmoto fuellen
				var f_fr = jQuery('[name=f-fr]',this).val();
				var f_to = jQuery('[name=f-to]',this).val();
				if (f_fr && f_fr.length) {
					jQuery('[name=fdyfr]',this).val(f_fr.substr(0,2));
					jQuery('[name=fmofr]',this).val(f_fr.substr(6,4) + f_fr.substr(3,2));
				}
				if (f_to && f_to.length) {
					jQuery('[name=fdyto]',this).val(f_to.substr(0,2));
					jQuery('[name=fmoto]',this).val(f_to.substr(6,4) + f_to.substr(3,2));
				}
				// Parameter startDateDay, startDateMonth, startDateYear, endDateDay, endDateMonth und endDateYear fuellen
				var start_date = jQuery('[name=startDate1]',this).val();
				var end_date = jQuery('[name=endDate1]',this).val();
				if (start_date && start_date.length) {
					jQuery('[name=startDateDay]',this).val(start_date.substr(0,2));
					jQuery('[name=startDateMonth]',this).val(start_date.substr(3,2));
					jQuery('[name=startDateYear]',this).val(start_date.substr(6,4));
					jQuery('[name=startDate]',this).val(start_date.substr(6,4) + '-' + start_date.substr(3,2) + '-' + start_date.substr(0,2));
				}
				if (end_date && end_date.length) {
					jQuery('[name=endDateDay]',this).val(end_date.substr(0,2));
					jQuery('[name=endDateMonth]',this).val(end_date.substr(3,2));
					jQuery('[name=endDateYear]',this).val(end_date.substr(6,4));
					jQuery('[name=endDate]',this).val(start_date.substr(6,4) + '-' + end_date.substr(3,2) + '-' + end_date.substr(0,2));
				}
				// Parameter day, month_1, RetDay und month_2 fuellen
				var start_date2 = jQuery('[name=startDate2]',this).val();
				var end_date2 = jQuery('[name=endDate2]',this).val();
				if (start_date2 && start_date2.length) {
					if (start_date2.substr(0, 1) === '0') jQuery('[name=Day]', this).val('0' + start_date2.substr(1, 1));
					else jQuery('[name=Day]', this).val(start_date2.substr(0, 2));
					// --- add "day" fuer neue ibe
					if (start_date2.substr(0, 1) === '0') jQuery('[name=day]', this).val('0' + start_date2.substr(1, 1));
					else jQuery('[name=day]', this).val(start_date2.substr(0, 2));
					// --- end add "day"
					if (start_date2.substr(3,1)==='0') jQuery('[name=month_1]',this).val('0' + start_date2.substr(4,1) + '-' + start_date2.substr(6,4));
					else jQuery('[name=month_1]',this).val(start_date2.substr(3,2) + '-' + start_date2.substr(6,4));
				}
				if (end_date2 && end_date2.length) {
					if (end_date2.substr(0,1)==='0') jQuery('[name=RetDay]',this).val('0' + end_date2.substr(1,1));
					else jQuery('[name=RetDay]',this).val(end_date2.substr(0,2));
					// --- add "retDay" fuer neue ibe
					if (end_date2.substr(0,1)==='0') jQuery('[name=retDay]',this).val('0' + end_date2.substr(1,1));
					else jQuery('[name=retDay]',this).val(end_date2.substr(0,2));
					// --- end add "retDay"
					if (end_date2.substr(3,1)==='0') jQuery('[name=month_2]',this).val('0' + end_date2.substr(4,1) + '-' + end_date2.substr(6,4));
					else jQuery('[name=month_2]',this).val(end_date2.substr(3,2) + '-' + end_date2.substr(6,4));
				}
			});
		}
	},

	/*******************************************************************/
	/***** BahnCard Berater *****/
	/*******************************************************************/

	// Enable BahnCard-Berater tooltips
	initBcbToolTips: function() {
		BAHN.addBcbToolTip(251);
		BAHN.addBcbToolTip(252);
		BAHN.addBcbToolTip(501);
		BAHN.addBcbToolTip(502);
	},
	addBcbToolTip: function(id) {
		if(jQuery('#bcbLinkBc'+id) && jQuery('#bcbTipBc'+id)) {
			BAHN.bcbToolTipData[id] = [];
			BAHN.bcbToolTipData[id]['linkHover'] = false;
			BAHN.bcbToolTipData[id]['tipHover'] = false;
			jQuery('#bcbLinkBc'+id).mouseover(function() {
				BAHN.bcbToolTipData[id]['linkHover'] = true;
				BAHN.bcbToolTipData[id]['tipHover'] = false;
				jQuery('#bcbTipBc'+id).show();
				window.clearTimeout(BAHN.bcbToolTipData[id]['timeout']);
			}).focus(function() {
				BAHN.bcbToolTipData[id]['linkHover'] = true;
				BAHN.bcbToolTipData[id]['tipHover'] = false;
				jQuery('#bcbTipBc'+id).show();
				window.clearTimeout(BAHN.bcbToolTipData[id]['timeout']);
			}).mouseout(function() {
				BAHN.bcbToolTipData[id]['linkHover'] = false;
				BAHN.bcbToolTipData[id]['timeout'] = window.setTimeout("BAHN.removeBcbToolTip"+id+"()", 10);
			}).blur(function() {
				//BAHN.bcbToolTipData[id]['linkHover'] = false;
				//BAHN.bcbToolTipData[id]['timeout'] = window.setTimeout("BAHN.removeBcbToolTip"+id+"()", 10);
			});
			jQuery('#bcbTipBc'+id).mouseover(function() {
				BAHN.bcbToolTipData[id]['tipHover'] = true;
				BAHN.bcbToolTipData[id]['linkHover'] = false;
				jQuery('#bcbTipBc'+id).show();
				window.clearTimeout(BAHN.bcbToolTipData[id]['timeout']);
			}).mouseout(function() {
				BAHN.bcbToolTipData[id]['tipHover'] = false;
				BAHN.bcbToolTipData[id]['timeout'] = window.setTimeout("BAHN.removeBcbToolTip"+id+"()", 10);
			});
			jQuery('#bcbTipBc'+id+' a.link-highlight').focus(function() {
				BAHN.bcbToolTipData[id]['tipHover'] = true;
				BAHN.bcbToolTipData[id]['linkHover'] = false;
				jQuery('#bcbTipBc'+id).show();
				window.clearTimeout(BAHN.bcbToolTipData[id]['timeout']);
			}).blur(function() {
				BAHN.bcbToolTipData[id]['tipHover'] = false;
				BAHN.bcbToolTipData[id]['timeout'] = window.setTimeout("BAHN.removeBcbToolTip"+id+"()", 10);
			});
			jQuery('#bcbTipBc'+id+' > a.closeButton').click(function() {
				BAHN.bcbToolTipData[id]['linkHover'] = false;
				BAHN.bcbToolTipData[id]['tipHover'] = false;
				jQuery('#bcbTipBc'+id).hide();
			});
		}
	},
	removeBcbToolTip251: function() {
		if(BAHN.bcbToolTipData[251]['linkHover'] == false && BAHN.bcbToolTipData[251]['tipHover'] == false) {
			jQuery('#bcbTipBc251').hide();
		}
	},
	removeBcbToolTip501: function() {
		if(BAHN.bcbToolTipData[501]['linkHover'] == false && BAHN.bcbToolTipData[501]['tipHover'] == false) {
			jQuery('#bcbTipBc501').hide();
		}
	},
	removeBcbToolTip252: function() {
		if(BAHN.bcbToolTipData[252]['linkHover'] == false && BAHN.bcbToolTipData[252]['tipHover'] == false) {
			jQuery('#bcbTipBc252').hide();
		}
	},
	removeBcbToolTip502: function() {
		if(BAHN.bcbToolTipData[502]['linkHover'] == false && BAHN.bcbToolTipData[502]['tipHover'] == false) {
			jQuery('#bcbTipBc502').hide();
		}
	},
	// Init BahnCard-Berater form submit
	initBcbFormSubmit: function() {
		if (jQuery('#bcbForm')) {
			jQuery('#bcbForm button[type=reset]').click(function () {
				jQuery('div.bcbResult').hide();
				jQuery('#bcbStart').show();
			});

			jQuery('#bcbForm button[type=submit]').click(function () {
				if(!(jQuery('input[@name=travelBehaviour]:checked').length)) {
					jQuery('#bcbForm div.questionContainer p.bcbError:eq(0)').show().fadeOut(2000);
					return false;
				}

				if(!(jQuery('input[@name=travelDistance]:checked').length)) {
					jQuery('#bcbForm div.questionContainer p.bcbError:eq(1)').show().fadeOut(2000);
					return false;
				}

				if(!(jQuery('input[@name=travelFrequence]:checked').length)) {
					jQuery('#bcbForm div.questionContainer p.bcbError:eq(2)').show().fadeOut(2000);
					return false;
				}

				if(!(jQuery('input[@name=travelPreferences]:checked').length)) {
					jQuery('#bcbForm div.questionContainer p.bcbError:eq(3)').show().fadeOut(2000);
					return false;
				}

				var a = [];
				var id = '';
				a[0] = jQuery('input[@name=travelBehaviour]:checked').val()
				a[1] = jQuery('input[@name=travelDistance]:checked').val()
				a[2] = jQuery('input[@name=travelFrequence]:checked').val()
				a[3] = jQuery('input[@name=travelPreferences]:checked').val()

				if(a[0] == 'spontaneous' && a[1] == 'supraRegional'  && a[2] == 'often') {
					id = 'bcb50';
				}else if(a[1] == 'supraRegional'  && a[2] == 'veryOften') {
					id = 'bcb50';
				}else{
					id = 'bcb25';
				}

				if(a[3] == 'comfort') {
					id += '1';
				}else{
					id += '2';
				}

				jQuery('div.bcbResult').hide();
				jQuery('#bcbStart').hide();
				jQuery('#' + id).show();
				return false;
			});
		}
	},

	initTarifberater: function() {
		// Tarifberater
		var tarifvergleich_button = jQuery( '#inhalt #tarifvergleich button' );
		var tarifvergleich_checkboxes = jQuery( '#inhalt #tarifvergleich input.checkbox' );
		var tarifvergleich_error = jQuery( '#inhalt #tarifvergleich p.error-msg, #tarifvergleich-ergebnis p.error-msg' )
		if( tarifvergleich_button.length > 0 ) {
			tarifvergleich_button.click(function() {
				var tarifvergleich_checked = jQuery( '#inhalt #tarifvergleich input:checked' );

				if( tarifvergleich_checked.length > 1 ) {
					tarifvergleich_error.hide();

					jQuery('#tarifvergleich-ergebnis table').show();
					jQuery('#tarifvergleich-ergebnis thead th').hide();
					jQuery('#tarifvergleich-ergebnis tbody td').hide();
					jQuery('#tarifvergleich-ergebnis tfoot td').hide();

					tarifvergleich_checked.each(function() {
						var checkbox_value = jQuery(this).val();
						jQuery('#tarifvergleich-ergebnis thead th[id=' + checkbox_value + ']').show();
						jQuery('#tarifvergleich-ergebnis tbody td[headers=' + checkbox_value + ']').show();
						jQuery('#tarifvergleich-ergebnis tfoot td[headers=' + checkbox_value + ']').show();
					});
				}
				else {
					tarifvergleich_error.show();
					jQuery('#tarifvergleich-ergebnis table').hide();
				}
			});
		};
		if( tarifvergleich_checkboxes.length > 0 ) {
			tarifvergleich_checkboxes.change(function() {
				var tarifvergleich_checked = jQuery( '#inhalt #tarifvergleich input:checked' );
				if (tarifvergleich_checked.length > 1) {
					tarifvergleich_error.hide();
					tarifvergleich_button.removeClass('no-thickbox');
				}
				else {
					tarifvergleich_button.addClass('no-thickbox');
				}
			});
		};
	},



	/*******************************************************************/
	/***** Servicemenu *****/
	/*******************************************************************/

	// Initialize all Functions for the Servicemnu
	initServicemenu: function() {
		// Draw select-box
		BAHN.initServiceSelect();
	},
	// Draws the select-box on init
	initServiceSelect: function() {
		jQuery('#frmservicemenu').append('<select id="0data_servicegroup_basis" onchange="BAHN.setServicemenu(this.value)">');
		jQuery('#0data_servicegroup_basis').append('<option value="0">Alle Services</option>');
		jQuery('#0data_servicegroup_basis').append('<option value="3">Vielfahrer und Pendler</option>');
		jQuery('#0data_servicegroup_basis').append('<option value="1">Gesch&auml;ftlich unterwegs</option>');
		jQuery('#0data_servicegroup_basis').append('<option value="4">Reisen mit Kindern</option>');
		jQuery('#0data_servicegroup_basis').append('<option value="8">Senioren</option>');
		jQuery('#0data_servicegroup_basis').append('<option value="6">Barrierefreies Reisen</option>');
		//jQuery('#0data_servicegroup_basis').append('<option value="2">Privat (alleine)</option>');
		//jQuery('#0data_servicegroup_basis').append('<option value="5">In einer Gruppe</option>');
		//jQuery('#0data_servicegroup_basis').append('<option value="7">International</option>');
		jQuery('#frmservicemenu').append('</select>');
	},
	setServicemenu: function(val) {
		if (val == '0')	{
			jQuery('.threeColumnRow').find('li').removeClass('inactive');
		}
		else {
			jQuery('.threeColumnRow').find('li').each(function (el) {
				rel = this.getAttribute('rel');
				bit = rel.substr(val-1,1);
				if (bit == '1') {
					this.className='';
				}
				else {
					this.className='inactive';
				}
			});
		}
	},


	/*******************************************************************/
	/***** Initialise Scramblecode *****/
	/*******************************************************************/

	// Initialize
	initScramblecode: function() {
		BAHN.initScramblecodeRCP();
		BAHN.initScramblecodeRCPSND();
	},
	// Check recipient
	initScramblecodeRCP: function() {
		if (jQuery('form.validate-rcp input.rcp')) {
			jQuery('form.validate-rcp input.rcp').change(function() {
				var url = '/pbin/scramble.pl?m=a;X=R:' + encodeURI(jQuery('form.validate-rcp input.rcp').val());
				jQuery.getJSON(url,
					function(data){
						jQuery("form.validate-rcp img.scramble").attr({
							src: data.img,
							width: data.width,
							heigth: data.height
				        });
						jQuery('form.validate-rcp input.scramble').val(data.scramble);
						jQuery('form.validate-rcp div.jsscramble').removeClass('jsscramble');
				})
			});
		}
	},
	// Check recipient and sender
	initScramblecodeRCPSND: function() {
		if (jQuery('form.validate-rcp-snd input.rcp') && jQuery('form.validate-rcp-snd input.snd')) {
			jQuery('form.validate-rcp-snd input.rcp').change(function() {
				if(jQuery('form.validate-rcp-snd input.rcp').val().length == 0 || jQuery('form.validate-rcp-snd input.snd').val().length == 0) return;

				var url = '/pbin/scramble.pl?m=a;X=R:' + encodeURI(jQuery('form.validate-rcp-snd input.rcp').val()) +
						  ';X=S:' + encodeURI(jQuery('form.validate-rcp-snd input.snd').val());
				jQuery.getJSON(url,
					function(data){
						jQuery("form.validate-rcp-snd img.scramble").attr({
							src: data.img,
							width: data.width,
							heigth: data.height
				        });
						jQuery('form.validate-rcp-snd input.scramble').val(data.scramble);
						jQuery('form.validate-rcp-snd div.jsscramble').removeClass('jsscramble');
				})
			});
			jQuery('form.validate-rcp-snd input.snd').change(function() {
				if(jQuery('form.validate-rcp-snd input.rcp').val().length == 0 || jQuery('form.validate-rcp-snd input.snd').val().length == 0) return;

				var url = '/pbin/scramble.pl?m=a;X=R:' + encodeURI(jQuery('form.validate-rcp-snd input.rcp').val()) +
						  ';X=S:' + encodeURI(jQuery('form.validate-rcp-snd input.snd').val());
				jQuery.getJSON(url,
					function(data){
						jQuery("form.validate-rcp-snd img.scramble").attr({
							src: data.img,
							width: data.width,
							heigth: data.height
				        });
						jQuery('form.validate-rcp-snd input.scramble').val(data.scramble);
						jQuery('form.validate-rcp-snd div.jsscramble').removeClass('jsscramble');
				})
			});
		}
	},
		/**
	 * Handle Toggling Elements
	 *
	 * Adds an Event to <h2> and <h3> with the specified className "clap"
	 * and opens/closes the next <div> Element with the className "clap-content"
	 * with mouseOver it adds the className "clap-active" to the <h2>/<h3> element.
	 *
	 * Second and third functionality is the open-all-clap-content and
	 * close-all-clap-content thing.
	 */
	initClapContent: function() {
		if ( jQuery('#inhalt h2.clap').length || jQuery('#inhalt h3.clap').length ) {
			var preventOnce = 0;
			jQuery('#inhalt h2.clap, #inhalt h3.clap').click(function() {
				if (preventOnce == 1) {
					preventOnce = 0;
					jQuery(this).toggleClass('clap-active');
				}
				if ( jQuery(this).children('div.clap-content').length ) jQuery(this).children('div.clap-content').toggle();
				else if ( jQuery(this).parent().next().children('div.clap-content').length ) jQuery(this).parent().next().children('div.clap-content').toggle();
				preventOnce = 1;
			}).keydown(function(event) {
				if(BAHN.isKeyOk(event) === true) {
					if ( jQuery(this).children('div.clap-content').length ) jQuery(this).children('div.clap-content').toggle();
					else if ( jQuery(this).parent().next().children('div.clap-content').length ) jQuery(this).parent().next().children('div.clap-content').toggle();
					jQuery(this).toggleClass('clap-active');
				}
			}).mouseover(function() {
				if (preventOnce == 1) {
					preventOnce = 0;
				} else {
					jQuery(this).toggleClass('clap-active');
				}
			}).mouseout(function() {
				if (preventOnce == 1) {
					preventOnce = 0;
				} else {
					jQuery(this).toggleClass('clap-active');
				}
			}).attr( BAHN.nTabindex(), '0' );
		}
		if ( jQuery('#inhalt #open-all-clap-content').length && jQuery('#inhalt div.clap-content').length &&
			 ( jQuery('#inhalt h2.clap').length || jQuery('#inhalt h3.clap').length) ) {
			jQuery('#open-all-clap-content').click(function() {
				if ( jQuery('#inhalt h2.clap').length ) jQuery('#inhalt h2.clap').addClass('clap-active');
				else if ( jQuery('#inhalt h3.clap') ) jQuery('#inhalt h3.clap').addClass('clap-active');
				jQuery('#inhalt div.clap-content').show();
			}).keydown(function(event){
				if(BAHN.isKeyOk(event) === true) {
					if ( jQuery('#inhalt h2.clap').length ) jQuery('#inhalt h2.clap').addClass('clap-active');
					else if ( jQuery('#inhalt h3.clap') ) jQuery('#inhalt h3.clap').addClass('clap-active');
					jQuery('#inhalt div.clap-content').show();
				}
			}).mouseover(function(){
				jQuery( this ).toggleClass('clap-active');
			}).mouseout(function(){
				jQuery( this ).toggleClass('clap-active');
			});
		}
		if ( jQuery('#inhalt #close-all-clap-content').length && jQuery('#inhalt div.clap-content').length &&
			 ( jQuery('#inhalt h2.clap').length || jQuery('#inhalt h3.clap').length) ) {
			jQuery('#close-all-clap-content').click(function() {
				if ( jQuery('#inhalt h2.clap').length ) jQuery('#inhalt h2.clap').removeClass('clap-active');
				else if ( jQuery('#inhalt h3.clap') ) jQuery('#inhalt h3.clap').removeClass('clap-active');
				jQuery('#inhalt div.clap-content').hide();
			}).keydown(function(event){
				if(BAHN.isKeyOk(event) === true) {
					if ( jQuery('#inhalt h2.clap').length ) jQuery('#inhalt h2.clap').removeClass('clap-active');
					else if ( jQuery('#inhalt h3.clap') ) jQuery('#inhalt h3.clap').removeClass('clap-active');
					jQuery('#inhalt div.clap-content').hide();
				}
			}).mouseover(function(){
				jQuery( this ).toggleClass('clap-active');
			}).mouseout(function(){
				jQuery( this ).toggleClass('clap-active');
			});
		}
	},



	/*******************************************************************/
	/***** Tochtersites Regioselect *****/
	/*******************************************************************/

	initRegioSelect: function() {
		if(jQuery("#regioselect")){

			jQuery("#regiomap area").mouseover(function(ev){
				var e = (ev) ? ev : window.event;
				var mouseX = e.clientX+jQuery('html').scrollLeft()-jQuery("#regioselect").offset()['left'];
				var mouseY = e.clientY+jQuery('html').scrollTop()-jQuery("#regioselect").offset()['top'];

				var curId = jQuery(this).attr("rel");
				var ttHeight = jQuery("#"+curId+"-tt").outerHeight()+10;
				var ttWidth = jQuery("#"+curId+"-tt").outerWidth();
				var mapHeight = jQuery("#regioselect").outerHeight();
				var mapWidth = jQuery("#regioselect").outerWidth()-2;

				var top = (mouseY-ttHeight > 0) ? mouseY-ttHeight : (mouseY+ttHeight>mapHeight) ? mapHeight-ttHeight+5 : mouseY+10;
				var left = (mouseX-ttWidth*0.75 < 0) ? 2 : (mouseX+ttWidth*0.25 > mapWidth) ? mapWidth-200 : mouseX-ttWidth*0.75;

				jQuery("#"+curId).show();
				jQuery("#"+curId+"-tt").css('top',top).css('left',left).show();
			});

			jQuery("#regiomap area").mouseout(function(){
				var curId = jQuery(this).attr("rel");
				jQuery("#"+curId+", #"+curId+"-tt").hide();
			});
		}
	},

	// Enable accordion function in folding boxes on 'Tochtersites'
	initAccordionBox: function() {
		jQuery( '.foldingBox.accordeon h3' )
			/*.each( function( i ) {
				jQuery(this).attr('aria-controls', 's-content-' + (i + 1) );
			})*/
			.attr( BAHN.nTabindex(), '0' ).removeClass('open');
		jQuery( '.foldingBox.accordion h3.first' ).addClass('open');
		jQuery( '.foldingBox.accordion' ).mouseover( BAHN.accordeonHover )
			.focus( BAHN.accordeonHover )
			.mouseout( BAHN.accordeonHover )
			.blur( BAHN.accordeonHover )
			.click( BAHN.accordeonClick )
			.keydown( BAHN.accordeonClick );
	},


	/*******************************************************************/
	/***** Tooltip *****/
	/*******************************************************************/

	initTooltips: function() {
		jQuery('.showtt' ).each(
			function() {
				var el = jQuery(this);
				el.tooltip({
					track: true,
				    delay: 0,
				    fade: 250
				});
			}
		);
	},


	/*******************************************************************/
	/***** Formular Fahrgastrechte *****/
	/*******************************************************************/

	initFormFahrgastrechte: function() {
		if(jQuery( '#cf-fahrgastrechte' )) {
			jQuery( '#cf-fahrgastrechte-ausfallversp' ).change( function() {
				var selectedValue = jQuery(this).val();

				if( selectedValue.length === 0) {
					jQuery( '#cf-fahrgastrechte-zugausfall' ).hide();
					jQuery( '#cf-fahrgastrechte-anschlussverpasst' ).hide();
				}

				if( selectedValue === 'verspaetet' ) {
					jQuery( '#cf-fahrgastrechte-zugausfall' ).hide();
					jQuery( '#cf-fahrgastrechte-anschlussverpasst' ).show();
				}

				if( selectedValue === 'ausgefallen' ) {
					jQuery( '#cf-fahrgastrechte-zugausfall' ).show();
					jQuery( '#cf-fahrgastrechte-anschlussverpasst' ).hide();
				}
			}).change();

			jQuery( '#cf-fahrgastrechte-entschaedigung' ).change( function() {
				var selectedValue = jQuery(this).val();

				if( selectedValue.length === 0 || selectedValue === 'gutscheinvk25' || selectedValue === 'auszahlungvk26') {
					jQuery( '#cf-fahrgastrechte-persdata' ).hide();
					jQuery( '#cf-fahrgastrechte-bankverbindung' ).hide();
				}

				if( selectedValue === 'gutscheinpost27' ) {
					jQuery( '#cf-fahrgastrechte-persdata' ).show();
					jQuery( '#cf-fahrgastrechte-bankverbindung' ).hide();
				}

				if( selectedValue === 'ueberwsg28' ) {
					jQuery( '#cf-fahrgastrechte-persdata' ).show();
					jQuery( '#cf-fahrgastrechte-bankverbindung' ).show();
				}
			}).change();
		}
	},


	/*******************************************************************/
	/***** CountrySelect *****/
	/*******************************************************************/

	initCountrySelect: function() {
		//Array mit Kuerzeln der Laender, die mehrsprachig sind:
		var multipleLanguageCountries = [ "che", "bel", "deu" ];

		if(jQuery("#country-select-large")){

			jQuery("#country-map area").click(function(ev){
				var country = jQuery(this).attr("country");

				//wenn über ein Land das in multipleLanguageCountries definiert ist, wird die Sprachauswahl eingeblendet
				if ( jQuery.inArray(country, multipleLanguageCountries) != "-1" ) {
					ev.preventDefault();
					BAHN.showCountryLanguagesLayer(ev, country);
				}
			});

			jQuery("#country-map area").mouseover(function(ev){
				var country = jQuery(this).attr("country");

				//Andere eventuell eingeblendete Karten de-highlighten
				jQuery("div#country-select-large .map").hide();

				//Gehighlightete Länderkarte einblenden
				jQuery("#country_"+country).show();

				//Hover in der Länder UL für das entsprechende Land setzen
				jQuery("ul.countries span."+country).addClass("lihover");
			});

			jQuery("#country-map area").mouseout(function(ev){
				var country = jQuery(this).attr("country");
				jQuery("#country_"+jQuery(this).attr("country")).hide();
				jQuery("ul.countries span."+country).removeClass("lihover");
			});

			/* Mouseover für Länderliste-UL */
			jQuery("ul.countries li span").mouseover(function(ev){
				var country = jQuery(this).attr("class");
				jQuery("#country_"+country).show();
			});

			/* Mouseout für Länderliste-UL */
			jQuery("ul.countries li span").mouseout(function(ev){
				var country = jQuery(this).attr("class");
				jQuery("#country_"+country).hide();
			});

			jQuery(".countries .bel").click(function(ev){
				ev.preventDefault();
				BAHN.showCountryLanguagesLayer(ev, "bel");
			});

			jQuery(".countries .che").click(function(ev){
				ev.preventDefault();
				BAHN.showCountryLanguagesLayer(ev, "che");
			});

			jQuery(".countries .deu").click(function(ev){
				ev.preventDefault();
				BAHN.showCountryLanguagesLayer(ev, "deu");
			});

			jQuery("div.close").click(function(){
				jQuery(".country-languages-layer, #country-select-large .map").hide();
				jQuery("ul.countries span.bel").removeClass("lihover");
				jQuery("ul.countries span.che").removeClass("lihover");
				jQuery("ul.countries span.deu").removeClass("lihover");
			});

			// Drecksbrowser
			if(jQuery.browser.msie() && jQuery.browser.version.number() < 7) {
				jQuery( '#country-map area' ).trigger( 'mouseout' );
			}
		}
	},

	showCountryLanguagesLayer: function (ev, country) {
		var e = (ev) ? ev : window.event;
		var mouseX = e.clientX+jQuery('html').scrollLeft()-jQuery("#country-select-large").offset()['left'];
		var mouseY = e.clientY+jQuery('html').scrollTop()-jQuery("#country-select-large").offset()['top'];
		var ttHeight = jQuery(".country-languages-layer").outerHeight()+10;
		var ttWidth = jQuery(".country-languages-layer").outerWidth();
		var mapHeight = jQuery("#country-select-large").outerHeight();
		var mapWidth = jQuery("#country-select-large").outerWidth()-2;
		var top = (mouseY-ttHeight > 0) ? mouseY-ttHeight : (mouseY+ttHeight>mapHeight) ? mapHeight-ttHeight+5 : mouseY-70;
		var left = (mouseX-ttWidth*0.75 < 0) ? 2 : (mouseX+ttWidth*0.25 > mapWidth) ? mapWidth-200 : mouseX;

		//erstmal "alle" (eventuell) vorhandenen Sprachauswahlen ausblenden
		jQuery(".country-languages-layer").hide();

		//Die Sprachauswahl einblenden
		jQuery("#country-languages-layer_"+country).css('top',top-20).css('left',left).show();

		//Während über die SPrachauswahl gehovert wird muss auch das Land fortwährend eingeblendet werden.
		jQuery("#country-languages-layer_"+country).mouseover(function(ev){
			jQuery("#country_"+country).show();
		});

		//den Unterstrich unter der Länder-ul einblenden
		jQuery("ul.countries span."+country).addClass("lihover");
	},


	/*******************************************************************/
	/***** Quickfinder Stadtverkehr *****/
	/*******************************************************************/

	initQuickfinderStadtverkehr: function() {
		jQuery( '#quickfinder-stadtverkehr ul.tablist a' ).click( function(ev) {
			ev.preventDefault();
			jQuery( '#quickfinder-stadtverkehr div.wrapper' ).toggleClass( 'with-linklist' );
			jQuery( '#qf-stadtverkehr-content' ).toggle();
			//jQuery( '#qf-stadtverkehr-content' ).toggleClass( 'hide' );
		} );
	},


	/*******************************************************************/
	/***** Auslandsvertrieb Cookie *****/
	/*******************************************************************/

	setIntLocationCookie: function() {
		if(jQuery( '#p-intlocation' ).length > 0) {
			jQuery.cookie( 'bahn-intlocation', jQuery( '#p-intlocation' ).val(), { expires: '', path: '/' } );
		}
	}
};

jQuery(document).ready(function() {
	BAHN.init();
});
