var vacations = {
	'Baden-W&uuml;rttemberg' : [
		['23.12.2011', '05.01.2011'],
		['02.04.2012', '13.04.2012'],
		['29.05.2012', '09.06.2012'],
		['26.07.2012', '08.09.2012'],
		['29.10.2012', '02.11.2012']
	],
	'Bayern' : [
		['27.12.2011', '05.01.2012'],
		['20.02.2012', '24.02.2012'],
		['02.04.2012', '14.04.2012'],
		['29.05.2012', '09.06.2012'],
		['01.08.2012', '12.09.2012'],
		['29.10.2012', '03.11.2012']
	],
	'Berlin' : [
		['23.12.2011', '03.01.2012'],
		['02.04.2012', '14.04.2012'],
		['30.04.2012'],
		['18.05.2012'],
		['21.06.2012', '03.08.2012'],
		['01.10.2012', '13.10.2012']
	],
	'Brandenburg' : [
		['23.12.2011', '03.01.2012'],
		['30.01.2012', '04.02.2012'],
		['04.04.2012', '14.04.2012'],
		['30.04.2012'],
		['18.05.2012'],
		['21.06.2012', '03.08.2012'],
		['01.10.2012', '13.10.2012']
	],
	'Bremen' : [
		['23.12.2011', '04.01.2012'],
		['30.01.2012', '31.01.2012'],
		['26.03.2012', '11.04.2012'],
		['29.05.2012'],
		['23.07.2012', '31.08.2012'],
		['22.10.2012', '03.11.2012']
	],
	'Hamburg' : [
		['27.12.2011', '06.01.2012'],
		['30.01.2012'],
		['05.03.2012', '16.03.2012'],
		['30.04.2012', '04.05.2012'],
		['18.05.2012'],
		['21.06.2012', '01.08.2012'],
		['01.10.2012', '12.10.2012']
	],
	'Hessen' : [
		['21.12.2011', '06.01.2012'],
		['02.04.2012', '11.04.2012'],
		['02.07.2012', '10.08.2012'],
		['15.10.2012', '27.10.2012']
	],
	'Mecklenburg-Vorpommern' : [
		['23.12.2011', '03.01.2012'],
		['06.02.2012', '17.02.2012'],
		['02.04.2012', '11.04.2012'],
		['25.05.2012', '29.05.2012'],
		['23.06.2012', '04.08.2012'],
		['01.10.2012', '05.10.2012']
	],
	'Niedersachsen' : [
		['23.12.2011', '04.01.2012'],
		['30.01.2012', '31.01.2012'],
		['26.03.2012', '11.04.2012'],
		['30.04.2012'],
		['18.05.2012'],
		['29.05.2012'],
		['23.07.2012', '31.08.2012'],
		['22.10.2012', '03.11.2012']
	],
	'Nordrhein-Westfalen' : [
		['23.12.2011', '06.01.2012'],
		['02.04.2012', '14.04.2012'],
		['29.05.2012'],
		['09.07.2012', '21.08.2012'],
		['08.10.2012', '20.10.2012']
	],
	'Rheinland-Pfalz' : [
		['22.12.2011', '06.01.2012'],
		['29.03.2012', '13.04.2012'],
		['18.05.2012'],
		['08.06.2012'],
		['02.07.2012', '10.08.2012'],
		['01.10.2012', '12.10.2012']
	],
	'Saarland' : [
		['23.12.2011', '04.01.2012'],
		['20.02.2012', '25.02.2012'],
		['02.04.2012', '14.04.2012'],
		['02.07.2012', '14.08.2012'],
		['22.10.2012', '03.11.2012']
	],
	'Sachsen' : [
		['21.12.2011', '02.01.2012'],
		['13.02.2012', '25.02.2012'],
		['06.04.2012', '14.04.2012'],
		['18.05.2012'],
		['23.07.2012', '31.08.2012'],
		['22.10.2012', '02.11.2012']
	],
	'Sachsen-Anhalt' : [
		['22.12.2011', '07.01.2012'],
		['04.02.2012', '11.02.2012'],
		['02.04.2012', '07.04.2012'],
		['21.05.2012', '26.05.2012'],
		['23.07.2012', '05.09.2012'],
		['29.10.2012', '02.11.2012']
	],
	'Schleswig-Holstein' : [
		['23.12.2011', '06.01.2012'],
		['30.03.2012', '13.04.2012'],
		['18.05.2012'],
		['25.06.2012', '04.08.2012'],
		['04.10.2012', '19.10.2012']
	],
	'Th&uuml;ringen' : [
		['23.12.2011', '31.12.2011'],
		['06.02.2012', '11.02.2012'],
		['02.04.2012', '13.04.2012'],
		['25.05.2012', '29.05.2012'],
		['23.07.2012', '31.08.2012'],
		['22.10.2012', '03.11.2012']
	]
}

var holidays = {'global' : [
		['10.04.2009'],
		['12.04.2009', '13.04.2009'],
		['01.05.2009'],
		['21.05.2009'],
		['31.05.2009','01.06.2009'],
		['03.10.2009'],
		['25.12.2009', '26.12.2009'],
		['01.01.2010'],
		['02.04.2010'],
		['04.04.2010', '05.04.2010'],
		['01.05.2010'],
		['13.05.2010'],
		['23.05.2010','24.05.2010'],
		['03.10.2010'],
		['25.12.2010','26.12.2010'],
		['01.01.2011'],
		['22.04.2011'],
		['24.04.2011','25.04.2011'],
		['01.05.2011'],
		['02.06.2011'],
		['12.06.2011','13.06.2011'],
		['03.10.2011'],
		['25.12.2011','26.12.2011'],
		['01.01.2012'],
		['06.04.2012'],
		['08.04.2012','09.04.2012'],
		['01.05.2012'],
		['17.05.2012'],
		['27.05.2012', '28.05.2012'],
		['03.10.2012'],
		['25.12.2012','26.12.2012'],
		['01.01.2013'],
		['29.03.2013'],
		['31.04.2013','01.04.2013'],
		['01.05.2013'],
		['09.05.2013'],
		['19.05.2013','20.05.2013'],
		['03.10.2013'],
		['25.12.2013','26.12.2013'],
		['01.01.2014'],
		['18.04.2013'],
		['20.04.2013','21.04.2013'],
		['01.05.2014'],
		['29.05.2014'],
		['08.06.2014','09.06.2014'],
		['03.10.2014'],
		['25.12.2014','26.12.2014'],
		['01.01.2015'],
		['03.04.2015'],
		['05.04.2015','06.04.2015'],
		['01.05.2015'],
		['14.05.2015'],
		['24.05.2015','25.05.2015'],
		['03.10.2015'],
		['25.12.2015','26.12.2015'],
		['01.01.2016'],
		['25.03.2016'],
		['27.03.2016','28.03.2016'],
		['01.05.2016'],
		['05.05.2016'],
		['15.05.2016','16.05.2016'],
		['03.10.2016'],
		['25.12.2016','26.12.2016'],
		['01.01.2017'],
		['14.04.2017'],
		['16.04.2017','17.04.2017'],
		['01.05.2017'],
		['25.05.2017'],
		['04.06.2017','05.06.2017'],
		['03.10.2017'],
		['25.12.2017','26.12.2017'],
		['01.01.2018'],
		['30.03.2018'],
		['01.04.2018','02.04.2018'],
		['01.05.2018'],
		['10.05.2018'],
		['20.05.2018','21.05.2018'],
		['03.10.2018'],
		['25.12.2018','26.12.2018'],
		['01.01.2019'],
		['19.04.2019'],
		['21.04.2019','22.04.2019'],
		['01.05.2019'],
		['30.05.2019'],
		['09.06.2019','10.06.2019'],
		['03.10.2019']
		['25.12.2019','26.12.2019']
	]
};

var dpSelectedArea = '';
var selectionBaseModifyRunning = false;
var searchDefaultValues = {};
jQuery(document).ready(searchInit);

/**
 * Initialization function that will be called on dom-ready,
 * calls brand-function.
 *
 * @return mixed
 */
function searchInit() {
	var ret = true;
	var mainContainer = jQuery('.tx-tuisearch-pi1');
	delete selectionCompBkp;
	delete selectionBaseBkp;
	selectBuild(mainContainer);
	helpBuild(mainContainer);
	sliderBuild(mainContainer);
	sliderDoubleBuild(mainContainer);
	raterBuild(mainContainer);
	if(typeof(dpBuildPreCallback) == 'function') {
		dpBuildPreCallback();
	} else {
		dpBuild(mainContainer);
	}
    udfCountries(mainContainer);
	setTimeout(function() {
		mainContainer.find('select').change();
	}, 10);
	setBookingCode();
	if(typeof(searchInitCallback) == 'function') {
		ret = searchInitCallback();
	}
	jQuery('input, select, textarea', mainContainer).each(function() {
		if(jQuery.inArray(jQuery(this).attr('type'), new Array('radio', 'checkbox')) == -1 || jQuery(this).is(':checked')) {
			searchDefaultValues[jQuery(this).attr('name')] = jQuery(this).val();
		}
	});
	jQuery('input[type=reset]', mainContainer).click(function() {
		mainContainer = jQuery(this).parents('.tx-tuisearch-pi1');
		jQuery('input[type!=submit][type!=button], select, textarea', mainContainer).each(function() {
			if(jQuery(this).attr('type') == 'checkbox') {
				jQuery(this).removeAttr('checked');
			}
			if(jQuery.inArray(jQuery(this).attr('type'), new Array('radio', 'checkbox')) != -1) {
				var elm = jQuery('[name=' + jQuery(this).attr('name') + '][value=' + searchDefaultValues[jQuery(this).attr('name')] + ']', mainContainer);
				if(!elm.is(':checked')) {
					elm.attr('checked', 'checked').trigger('click');
				};
			} else {
				jQuery(this).val(searchDefaultValues[jQuery(this).attr('name')]);
			}
		});
		jQuery('.sliderSlide', mainContainer).each(function() {
			for(var i=0; i<jQuery(this).data('elmArr').length; i++) {
				if(jQuery(this).data('elmArr')[i].value == jQuery(this).nextAll('input:first').val()) {
					jQuery(this).slider('value', i);
					break;
				}
			}
		});
		jQuery('.raterRate', mainContainer).each(function() {
			for(var i=0; i<jQuery(this).data('elmArr').length; i++) {
				if(jQuery(this).data('elmArr')[i].value == jQuery(this).nextAll('input:first').val()) {
					jQuery(this).next('.raterLabel').text(jQuery(this).data('elmArr')[i].name);
					jQuery(this).children('ul').css({backgroundPosition:'0 0'});
					break;
				}
			}
		});
		jQuery('.childrenselect').nextAll().hide();
		return false;
	});
	return ret;
}

/**
 * Load search by "id" and reinitialize it.
 *
 * @param int id of the new search
 * @param object elm source-element
 *
 * @return void
 */
function searchLoad(id, elm, event) {
	var container = elm ? jQuery(elm).parents('.tx-tuisearch-pi1') : jQuery('.tx-tuisearch-pi1');
	var loader = buildLoader(container);
	jQuery.get('/specials/ajaxifier/ajax.xml', {'tx_neustatabs_pi2[ce]':id}, function(data) {
		loader.remove();
		container.prev('h2').remove();
		container.replaceWith(data);
		searchInit();
		if(typeof(searchLoadCallback) == 'function') {
			searchLoadCallback(container, event);
		}
	});
}

/**
 * Submit "form" and call brand-function.
 *
 * @param object form source-form
 *
 * @return boolean
 */
function searchSubmit(form) {
    	var ageCounter=0;

        if (jQuery('#alter'.length>0)) {
            /* Ermitteln wieviel Altersangaben in den Felder #alter1-3 gemacht wurden */
            ageCounter += (jQuery('#alter1 :selected',form).val() == -1) ? 0 : 1;
            ageCounter += (jQuery('#alter2 :selected',form).val() == -1) ? 0 : 1;
            ageCounter += (jQuery('#alter3 :selected',form).val() == -1) ? 0 : 1;

            /* Wenn die Altersangaben nicht vollständig warnen und submit verhindern */
            if ( parseInt(jQuery('#alter :selected',form).val()) > ageCounter) {
                alert('Bitte geben sie für jedes ausgewählte Kind ein Alter an.','Eingaben vervollständigen');
                return false;
            }
        }


	if(jQuery('#shotel').length) {
		/* jQuery(form).attr('accept-charset', 'ISO-8859-15'); */
                jQuery('.extendedSearch',form).hide();
                var shotel = escape(jQuery('#shotel').val());
                jQuery('#shotel').val(shotel);}
	fixDate();
	fixFormAction(form);
	if(typeof(searchSubmitCallback) == 'function') {
		return searchSubmitCallback(form);
	}
	return true;
}

/**
 * Change action-url-get-params to hidden-fields.
 *
 * @param object form source-form
 *
 * @return void
 */
function fixFormAction(form) {
	var mainParts = jQuery(form).attr('action').split('?');
	if(mainParts.length > 1) {
		var subParts = mainParts[1].split('&');
		for(i=0; i<subParts.length; i++) {
			var subSubParts = subParts[i].split('=');
			if(jQuery(form).find('input[type=hidden][name=' + subSubParts[0] + ']').length) {
				jQuery(form).find('input[type=hidden][name=' + subSubParts[0] + ']').val(subSubParts[1]);
			} else {
				jQuery(form).append('<input type="hidden" name="' + subSubParts[0] + '" value="' + subSubParts[1] + '" />');
			}
		}
		jQuery(form).attr('action', mainParts[0]);
	}
}

/**
 * Fix dates that was typed in manually
 *
 * @return void
 */
function fixDate() {
	jQuery('.datepicker').each(function() {
		var dpDate = new Array();
		var dateObj = new Date();
		var newDate = new Date();
		if(!jQuery('#conQSStartdateInput').val()) {
			newDate = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 2));
			jQuery('#conQSStartdateInput').val(jQuery.datepicker.formatDate('dd.mm.yy', newDate));
		}
		if(!jQuery('#conQSEnddateInput').val()) {
			newDate = new Date(new Date().getTime() + (1000 * 60 * 60 * 24 * 35));
			jQuery('#conQSEnddateInput').val(jQuery.datepicker.formatDate('dd.mm.yy', newDate));
		}

		if(jQuery(this).val().match(/\D+/g)) {
			dpDate = jQuery(this).val().replace(/\D+/g, ".").split('.');
		} else {
			if(jQuery(this).val().length == 8) {
				dpDate = new Array(jQuery(this).val().substr(0, 2), jQuery(this).val().substr(2, 2), jQuery(this).val().substr(4, 4));
			} else if(jQuery(this).val().length == 7) {
				if(jQuery(this).val().substr(0, 2) <= 31) {
					dpDate = new Array(jQuery(this).val().substr(0, 2), jQuery(this).val().substr(2, 1), jQuery(this).val().substr(3, 4));
				} else if(jQuery(this).val().substr(1, 2) <= 12) {
					dpDate = new Array(jQuery(this).val().substr(0, 1), jQuery(this).val().substr(1, 2), jQuery(this).val().substr(3, 4));
				}
			} else if(jQuery(this).val().length == 6) {
				if(jQuery(this).val().substr(2, 2) <=  12) {
					dpDate = new Array(jQuery(this).val().substr(0, 2), jQuery(this).val().substr(2, 2), jQuery(this).val().substr(4, 2));
				} else {
					dpDate = new Array(jQuery(this).val().substr(0, 1), jQuery(this).val().substr(1, 1), jQuery(this).val().substr(2, 4));
				}
			} else if(jQuery(this).val().length == 4) {
				dpDate = new Array(jQuery(this).val().substr(0, 2), jQuery(this).val().substr(2, 2), dateObj.getFullYear());
			}
		}
		if(dpDate.length == 3) {
			if(dpDate[2].length < 4) {
				if(dpDate[2].length == 0) {
					dpDate[2] = dateObj.getFullYear();
				} else {
					dpDate[2] = dpDate[2]*1+2000;
				}
			}
			newDate = new Date(dpDate[2], dpDate[1]-1, dpDate[0]);
		} else if(dpDate.length == 2) {
			newDate = new Date(dateObj.getFullYear(), dpDate[1]-1, dpDate[0]);
		}
		if(newDate.getTime() < dateObj.getTime()) {
			if (newDate.getMonth() < dateObj.getMonth() || (newDate.getMonth() == dateObj.getMonth() && newDate.getDate() < dateObj.getDate())) {
					newDate.setYear(dateObj.getFullYear() + 1);
				}
				else {
					newDate.setYear(dateObj.getFullYear());
				}
		}
		jQuery(this).val(jQuery.datepicker.formatDate('dd.mm.yy', newDate));
	});
}

/**
 * Bind "eval"-functions in selectboxes.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function selectBuild(mainContainer) {
	if(!jQuery(mainContainer).find('.tourWide').length){
		mainContainer.find('select').each(function() {
			jQuery(this).find('option').each(function() {
				var jsCodeArr = jQuery(this).val().match(/javascript\:(.*?)$/);
				jsCodeArr && jsCodeArr[1] ? jQuery(this).data('js', jsCodeArr[1]) : '';
				jQuery(this).val(jQuery(this).val().replace(/javascript\:(.*?)$/, ''));
			});
			jQuery(this).change(function() {
				eval(jQuery(this).find('option:selected').data('js'));
			});
		});
	}
}

/**
 * Bind help-hints.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function helpBuild(mainContainer) {
	mainContainer.find('.helpopen').click(function() {
		jQuery(this).next('.help').toggle(100);
		jQuery(this).next('.help').css({'top': jQuery(this).position().top, 'left': jQuery(this).position().left+jQuery(this).width()+5});
		if(typeof(searchHelpToggleCallback) == 'function') {
			searchHelpToggleCallback(jQuery(this).next('.help'));
		}
	}).each(function() {
		jQuery(this).next('.help').bgiframe();
	});

	jQuery(mainContainer.find('input[type=checkbox]')).each(function() {
		var label = jQuery(this).next('label[title]');
		if(label.attr('title')) {
			label.data('title', label.attr('title')).removeAttr('title');
			jQuery([jQuery(this), label]).each(function(i) {
				jQuery(this).mousemove(function(e) {
					jQuery(this).next('.help').css({
						left:e.pageX-jQuery(this).offset().left + jQuery(this).position().left + 10,
						top:e.pageY-jQuery(this).offset().top + jQuery(this).position().top + 10
					}).show();
				}).mouseout(function() {
					jQuery(this).next('.help').hide();
				}).after('<div>').next().addClass('help').hide().append('<div>').children().addClass('helpcontent').html(label.data('title'));
			});
		}
	});
}

/**
 * Create slider from selectboxes.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function sliderBuild(mainContainer) {
	mainContainer.find('.slider').each(function() {
		var selIndex = 0;
		var elmArr = new Array();
		jQuery(this).find('option').each(function(i) {
			elmArr.push({'name': jQuery(this).text(), 'value': jQuery(this).val()});
			if(jQuery(this).attr('selected')) selIndex = i;
		});
		jQuery(this).after('<div class="sliderSlide"></div><div class="sliderLabel">' + elmArr[selIndex].name + '</div><input type="hidden" name="' + jQuery(this).attr('name') + '" />');
		jQuery(this).next('.sliderSlide').data('elmArr', elmArr).slider({
			max: elmArr.length-1,
			steps: elmArr.length-1,
			value: selIndex,
			orientation: 'horizontal',
			animate: true,
			change: function(e, ui) {
				jQuery(this).next('.sliderLabel').text(jQuery(this).data('elmArr')[ui.value].name);
				jQuery(this).next('.sliderLabel').next('input[type=hidden]').val(jQuery(this).data('elmArr')[ui.value].value);
			}
		});
		jQuery(this).remove();
	});
}

/**
 * Create double-slider from selectboxes.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function sliderDoubleBuild(mainContainer) {
	mainContainer.find('.sliderdouble').each(function() {
		var elmArr = new Array();
		var selArr = new Array();
		var min = 10000;
		jQuery(this).find('option').each(function(i) {
			elmArr.push({'name': jQuery(this).text(), 'value': jQuery(this).val()});
			if(jQuery(this).attr('selected') && selArr.length < 2) selArr.push(i);
			min = jQuery(this).val() < min && jQuery(this).val() >= 0 ? jQuery(this).val() : min;
		});
		selArr = selArr.length < 2 ? [0, elmArr.length-1] : selArr;
		var html = '<div class="sliderSlideDouble"></div>';
		html += '<div class="sliderLabel">' + elmArr[selArr[0]].name + ' - ' + elmArr[selArr[1]].name + '</div>';
		html += '<input type="hidden" value="' + elmArr[selArr[0]].value + '" name="' +  jQuery(this).attr('name').split('[]')[0] + 'Min" />';
		html += '<input type="hidden" value="' + elmArr[selArr[1]].value + '" name="' +  jQuery(this).attr('name').split('[]')[0] + 'Max" />';
		jQuery(this).after('<div class="sliderCell">' + html + '</div>');
		jQuery(this).next('.sliderCell').find('.sliderSlideDouble').slider({
			min: min == 10000 ? 0 : min-1,
			max: elmArr.length-1,
			values: selArr,
			animate: true,
			range: 'min',
			slide: function (e, ui) {
				sliderDoubleBGPos(jQuery(this));
				jQuery(this).nextAll('.sliderLabel').text(elmArr[selArr[0]].name + ' - ' + elmArr[selArr[1]].name);
				jQuery(this).nextAll('input[type=hidden]:first').val(elmArr[ui.values[0]].value);
				jQuery(this).nextAll('input[type=hidden]:last').val(elmArr[ui.values[1]].value);
			}
		});
		sliderDoubleBGPos(jQuery(this).next('.sliderCell').find('.sliderSlideDouble'));
		jQuery(this).next('.sliderCell').find('.sliderSlideDouble .ui-slider-handle:first').addClass('first-handle');
		jQuery(this).next('.sliderCell').find('.sliderSlideDouble .ui-slider-handle:last').addClass('last-handle');
		jQuery(this).remove();
	});
}

/**
 * Position of double-slider.
 *
 * @param object self destination-double-slider
 *
 * @return void
 */
function sliderDoubleBGPos(self) {
	setTimeout(function() {
		var firstSlider = self.find('.ui-slider-handle:first');
		var lastSlider = self.find('.ui-slider-handle:last');
		var bgWidth = lastSlider.position().left - firstSlider.position().left - (parseInt(firstSlider.css('width'))/2) + (parseInt(lastSlider.css('width'))/2);
		var bgLeft = firstSlider.position().left + (firstSlider.width()/2);
		self.find('.ui-widget-header').css({width: bgWidth, left: bgLeft});
	}, 10);
}

/**
 * Create rater from selectboxes.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function raterBuild(mainContainer) {
	mainContainer.find('.rater').each(function() {
		var elmArr = new Array();
		var lis = '';
		jQuery(this).find('option').each(function(i) {
			elmArr.push({'name': jQuery(this).text(), 'value': jQuery(this).val()});
			if(jQuery(this).attr('selected')) selIndex = i;
			if(jQuery(this).val() && jQuery(this).val()!=-1) lis += '<li></li>';
		});
		jQuery(this).after('<div class="raterRate"><ul>' + lis + '</ul></div><div class="raterLabel">' + (elmArr[selIndex] ? elmArr[selIndex].name : '') + '</div><input type="hidden" name="' + jQuery(this).attr('name') + '" value="' + (elmArr[selIndex] ? elmArr[selIndex].value : '') + '" />');
		jQuery(this).next('.raterRate').data('elmArr', elmArr);
		jQuery(this).next('.raterRate').data('selIndex', selIndex);
		jQuery(this).next('.raterRate').find('li').each(function(i) {
			jQuery(this).click(function() {
				jQuery(this).parent().parent().next('.raterLabel').text(elmArr[i+1].name);
				jQuery(this).parent().parent().next('.raterLabel').next('input[type=hidden]').val(elmArr[i+1].value);
				jQuery(this).parent().parent().data('selIndex', i+1);
			}).mouseover(function() {
				jQuery(this).parent().parent().next('.raterLabel').text(elmArr[i+1].name);
				jQuery(this).parent().css('backgroundPosition', '0 ' + (-(parseInt(jQuery(this).css('height')) * (i+1))) + 'px');
			}).mouseout(function() {
				jQuery(this).parent().parent().next('.raterLabel').text(jQuery(this).parent().parent().data('elmArr')[jQuery(this).parent().parent().data('selIndex')].name);
				jQuery(this).parent().css('backgroundPosition', '0 ' + (-(parseInt(jQuery(this).css('height')) * jQuery(this).parent().parent().data('selIndex'))) + 'px');
			});
			jQuery(this).mouseout();
		});
		jQuery(this).remove();
	});
}

/**
 * Create dependent selectboxes.
 *
 * @param object localSelect first selectbox
 * @param object foreignSelect second selectbox
 * @param object noCallback prevent callback after this function
 *
 * @return void
 */
function dependentSelectChange(localSelect, foreignSelect, noCallback) {
	if(typeof(altDependentSelectChangeCallback) == 'function') {
		altDependentSelectChangeCallback(localSelect, foreignSelect);
	} else {
		var selectionBase = foreignSelect;
		var selectionComp = localSelect;
		localSelect.find('option').each(function() {
			if(jQuery(this).val().indexOf('|')!=-1) {
				selectionBase = localSelect;
				selectionComp = foreignSelect;
				selectionBase.find('option:selected').val() != -1 ? selectionComp.find('option[value=' + (selectionBase.find('option:selected').val().split('|')[1] ? selectionBase.find('option:selected').val().split('|')[1] : -1) + ']').attr('selected', 'selected') : '';
				return false;
			}
		});
		selectionCompBkp = typeof(selectionCompBkp) == 'undefined' ? selectionComp.clone(true) : selectionCompBkp;
		selectionBaseBkp = typeof(selectionBaseBkp) == 'undefined' ? selectionBase.clone(true) : selectionBaseBkp;
		if(!selectionBaseModifyRunning) {
			setTimeout(function() {
				selectionBaseModifyRunning = true;
				selectionBaseModify = selectionBaseBkp.clone(true);
				selectionBaseModify.find('option[value=' + selectionBase.find('option:selected').val() + ']').attr('selected', 'selected');
				selectionBaseModify.find('option').each(function() {
					if(!new RegExp('\\|' + selectionComp.find('option:selected').val() + '$').exec(jQuery(this).val()) && selectionComp.find('option:selected').val()!=-1 && jQuery(this).val()!=-1) {
						jQuery(this).remove();
					};
				});
				selectionBase.replaceWith(selectionBaseModify);
				selectionBaseModifyRunning = false;
				if(typeof(afterDependentSelectChangeCallback) == 'function' && !noCallback) {
					afterDependentSelectChangeCallback(selectionBase, selectionComp);
				}
			}, jQuery.browser.msie ? 200 : 0);
		}
	}
}

/**
 * Build children-selector.
 *
 * @param object elm destination-element
 * @param boolean date extended-flag
 *
 * @return void
 */
function childrenCountChange(elm, date) {
	childSel = parseInt(elm.find(':selected').val());
	/* Löschen der Alterseinträge für Kinder wenn nicht die entsprechende Anzahl von Kindern ausgewählt ist */
	childSel == -1 ? elm.nextAll('select').val('') : jQuery('.childsel'+ childSel).nextAll('select').val('');
	jQuery('.childsel').hide();
	jQuery('.childsel:lt(' + childSel + ')').show();
	childSel != -1 ? elm.nextAll('.posttext').show() : elm.nextAll('.posttext').hide();
	if(date) {
		jQuery('.childsel select').find('option:first').attr('selected','selected');
		jQuery('.childsel select').trigger('change');
		jQuery('.childsel select').change(function() {
			var birth = new Date(jQuery(this).parent().find('.childselyear').val(), jQuery(this).parent().find('.childselmonth').val()-1, jQuery(this).parent().find('.childselday').val());
			var age = new Date(new Date().getTime() - birth.getTime()).getFullYear() - 1970;
			jQuery('.childselage:lt(' + childSel + ')').val(age);
			jQuery('.childselbirth:lt(' + childSel + ')').val(jQuery(this).parent().find('.childselyear').val() + '-' + jQuery(this).parent().find('.childselmonth').val() + '-' + jQuery(this).parent().find('.childselday').val());
			jQuery('.childselage:gt(' + (childSel-1) + '), .childselbirth:gt(' + (childSel-1) + ')').val('');
		});
	} else {
		jQuery('.childsel').find('option:first').attr('selected','selected');
	}
}

/**
 * Toggle container-display-state.
 *
 * @param object elm destination-element
 * @param string triggerPath path for state-check
 * @param string hideLabel label for hide-state
 * @param string showLabel label for show-state
 * @param boolean stay toggle-prevention
 *
 * @return void
 */
function changeDisplayState(elm, triggerPath, hideLabel, showLabel, stay, effect) {
	toggleElm = eval('elm.parents(\'.tx-tuisearch-pi1\').find(\'form\').contents().filter(\'.elm:eq(' + triggerPath.split('-').join(')\').contents().filter(\'.elm:eq(') + ')\')');
	if(typeof(searchContToggleCallback) == 'function') {
		searchContToggleCallback(toggleElm);
	}
	if(!parseInt(stay) || toggleElm.is(':hidden')) {
		toggleElm[effect ? effect : 'toggle'](function() {
			jQuery('.trigger').each(function() {
				var elements = RegExp(/changeDisplayState\((.*),(.*),(.*),(.*),(.*),(.*)\)/).exec(jQuery(this).attr('onclick').toString());
				if ((elements) && (eval(elements[2]) == triggerPath)) {
					jQuery(this).val(toggleElm.is(':hidden') ? eval(elements[4]) : eval(elements[3]));
				}
			});
		});
		if(typeof(afterSearchContToggleCallback) == 'function') {
			afterSearchContToggleCallback(toggleElm);
		}
	}
}

/**
 * Build datepicker.
 *
 * @param object mainContainer destination-search
 *
 * @return void
 */
function dpBuild(mainContainer) {
	if(mainContainer.find('.datepicker').length && !mainContainer.find('.dplayer').length) {
		var selectOptions = '';
		for(var area in vacations) selectOptions += '<option value="' + area + '">' + area + '</option>';
		mainContainer.find('.datepicker').parents('.tx-tuisearch-pi1').prepend('<div class="dplayer" style="display:none;"><div class="dplayerInner"><div class="dpclose">Fenster schliessen</div><iframe class="dplayeriframe" frameborder="0"></iframe><div class="dpfrom" id="dpfrom"></div><div class="dpto" id="dpto"></div><div class="schoolHolidays"><label style="width:75px; padding:5px 0 2px 5px;">Schulferien:</label><select class="dpvac"><option value="">Bundesland w&auml;hlen</option>' + selectOptions + '</select><input type="button" class="dpsubmit" value="&Uuml;bernehmen" /></div></div></div>');
	}
	mainContainer.find('.datepicker').each(function(i) {
		if(i%2) {
			var dpTo = jQuery(this);
			var dpToBtn = dpTo.nextAll('.datepickeropen:first');
			dpTo.addClass('dpToInput');
			jQuery([dpFrom, dpTo]).each(function(i) {
				var dpParts = jQuery(this).attr('alt').split('|');
				var dpMax = dpParts[0] ? dpParts[0].split('.') : [31, 12, new Date().getFullYear()+1];
				var dpMin = dpParts[1] ? dpParts[1].split('.') : [new Date().getDate(), new Date().getMonth()+1, new Date().getFullYear()];
				jQuery(this).data('maxDate', new Date(dpMax[2], dpMax[1]-1, dpMax[0]));
				jQuery(this).data('minDate', new Date(dpMin[2], dpMin[1]-1, dpMin[0]));
				jQuery(this).bind("blur", function() {
					fixDate();
					jQuery(this).removeClass('datepicker');
					jQuery('.' + jQuery(this).attr('class'), '.tx-tuisearch-pi1').val(jQuery(this).val());
					jQuery(this).addClass('datepicker');
				});
			});
			dpFromBtn.data('dp', {from:dpFrom, to:dpTo});
			dpToBtn.data('dp', {from:dpFrom, to:dpTo});
			dpFromBtn.click(function() {
				dpShow(jQuery(this).data('dp').from, jQuery(this).data('dp').to);
			});
			dpToBtn.click(function() {
				dpShow(jQuery(this).data('dp').from, jQuery(this).data('dp').to);
			});
		} else {
			dpFrom = jQuery(this);
			dpFrom.addClass('dpFromInput');
			dpFromBtn = dpFrom.nextAll('.datepickeropen:first');
		}
	});
}

/**
 * Show datepicker.
 *
 * @param object dpFrom from-datepicker
 * @param object dpTo to-datepicker
 *
 * @return void
 */
function dpShow(dpFrom, dpTo) {
	dpLayer = jQuery('.tx-tuisearch-pi1 .dplayer');
	dpLayer.find('.dpfrom').data('maxDate', dpFrom.data('maxDate'));
	dpLayer.find('.dpfrom').data('minDate', dpFrom.data('minDate'));
	dpLayer.find('.dpfrom').data('elm', dpFrom);
	dpLayer.find('.dpto').data('maxDate', dpTo.data('maxDate'));
	dpLayer.find('.dpto').data('minDate', dpTo.data('minDate'));
	dpLayer.find('.dpto').data('elm', dpTo);
	jQuery('.dpvac option[value=' + dpSelectedArea + ']').attr('selected', 'selected');
	dpLayer.find('.dpfrom').datepicker('destroy');
	dpLayer.find('.dpto').datepicker('destroy');
	dpLayer.find('.dpfrom').datepicker(dpGetConf(0));
	dpLayer.find('.dpto').datepicker(dpGetConf(1));
	if(dpFrom.val()) {
		var dpDate = dpFrom.val().split('.');
		if(dpDate.length == 3) {
			dpLayer.find('.dpfrom').datepicker('setDate', new Date(dpDate[2], dpDate[1]-1, dpDate[0]));
		}
	}
	if(dpTo.val()) {
		var dpDate = dpTo.val().split('.');
		if(dpDate.length == 3) {
			dpLayer.find('.dpto').datepicker('setDate', new Date(dpDate[2], dpDate[1]-1, dpDate[0]));
		}
	}
	dpLayer.find('.dpvac').change(function() {
		dpSelectedArea = jQuery('.dpvac').find('[selected]').attr('value').replace('ü', '&uuml;');
		var dpOldFromMonthYear = jQuery('#dpfrom .monthyearcombo select option:selected').val();
		var dpOldToMonthYear = jQuery('#dpto .monthyearcombo select option:selected').val();
		dpInit();
		jQuery('#dpfrom .monthyearcombo select option[value=' + dpOldFromMonthYear + ']').attr('selected', 'selected');
		jQuery('#dpto .monthyearcombo select option[value=' + dpOldToMonthYear + ']').attr('selected', 'selected');
		dpChangeMonthYear('#dpfrom');
		dpChangeMonthYear('#dpto');
	});
	dpLayer.find('.dpclose, .dpsubmit').click(function() {dpLayer.hide();});
	dpLayer.find('.dpsubmit').click(function() {
		jQuery('.dpFromInput').val(jQuery.datepicker.formatDate('dd.mm.yy', dpLayer.find('.dpfrom').datepicker('getDate')));
		jQuery('.dpToInput').val(jQuery.datepicker.formatDate('dd.mm.yy', dpLayer.find('.dpto').datepicker('getDate')));
	});
	dpInit();
	dpLayer.css({left:dpFrom.offset().left, top:dpFrom.position().top});
	dpLayer.show();
	if(typeof(dpShowCallback) == 'function') {
		dpShowCallback(dpLayer);
	}
	if(dpTo.parent(':hidden').length) {
		dpLayer.find('.dpto').prepend('<div id="dptoOverlay"></div>');
		if(jQuery.browser.msie) {
			dpLayer.find('.dpto select').css('visibility', 'hidden');
		}
	}
	dpLayer.find('.dplayeriframe').css({'width':dpLayer.outerWidth(), 'height':dpLayer.outerHeight()});
}

/**
 * Init single datepicker.
 *
 * @return void
 */
function dpInit() {
	var dpFrom = jQuery('.dpfrom').datepicker('getDate');
	jQuery('.dpfrom').datepicker('change', dpGetConf(0));
	if(dpFrom) {
		jQuery('.dpfrom').datepicker('setDate', dpFrom);
	}
	dpBuildMonthYear(0, '#dpfrom', 'Hinreise');

	var dpTo = jQuery('.dpto').datepicker('getDate');
	jQuery('.dpto').datepicker('change', dpGetConf(1));
	if(dpTo) {
		jQuery('.dpto').datepicker('setDate', dpTo);
	}
	dpBuildMonthYear(1, '#dpto', 'R\xFCckreise');
}

/**
 * Get configuration for given section ("section").
 *
 * @param int section datepicker-section
 *
 * @return object
 */
function dpGetConf(section) {
	if(!section) {
		return {
			beforeShowDay: singleDayCheck,
			onSelect: dpInit,
			minDate: jQuery('.dpfrom').data('minDate'),
			maxDate: jQuery('.dpfrom').data('maxDate'),
			changeMonth:true,
			changeYear:true
		};
	} else {
		return {
			beforeShowDay: singleDayCheck,
			minDate: jQuery('.dpfrom').datepicker('getDate').addDays(+1),
			maxDate: jQuery('.dpto').data('maxDate'),
			changeMonth:true,
			changeYear:true
		};
	}
}

/**
 * check if single day is valid or has special class.
 *
 * @param object dateElm to change
 *
 * @return array
 */
function singleDayCheck(dateElm) {
	var defaultCheck = dpMarkVac(dateElm);
	if(typeof(singleDayCheckCallback) == 'function') {
		return singleDayCheckCallback(jQuery(this), dateElm, defaultCheck);
	}
	return defaultCheck;
}

/**
 * Build combined month-year selectbox.
 *
 * @param int section datepicker-section
 * @param string preSel selection-id
 * @param string label destination-label
 *
 * @return void
 */
function dpBuildMonthYear(section, preSel, label) {
	var maxDate = jQuery(section ? '.dpto' : '.dpfrom').data('maxDate');
	var minDate = dpGetConf(section)['minDate'];
	var selYear = jQuery(preSel + ' .ui-datepicker-new-year').length ? jQuery(preSel + ' .ui-datepicker-new-year option:selected').val() : jQuery(preSel + ' select.ui-datepicker-year option:selected').val();
	var selMonth = jQuery(preSel + ' .ui-datepicker-new-month').length ? jQuery(preSel + ' .ui-datepicker-new-month option:selected').val() : jQuery(preSel + ' select.ui-datepicker-month option:selected').val();
	var monthYearCombo = '<div class="monthyearcombo"><div class="monthYearComboLabel">' + label + '</div><div class="prevmonth">&laquo;</div><select onchange="dpChangeMonthYear(\'' + preSel + '\')">';
	for(var year=minDate.getFullYear(); year<=maxDate.getFullYear(); year++) {
		var monthsArr = new Array('Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
		var monthOffset = 0;
		if(year == minDate.getFullYear()) {
			monthOffset = minDate.getMonth();
			monthsArr = monthsArr.slice(monthOffset, 12);
		}
		monthsArr = year == maxDate.getFullYear() ? monthsArr.slice(0, monthsArr.length-(11-maxDate.getMonth())) : monthsArr;
		for (var i=0; i<monthsArr.length; i++) {
			monthYearCombo += '<option value="' + year + '_' + (i+monthOffset) + '"' + (selYear == year && selMonth == (i+monthOffset) ? ' selected="selected"' : '') + '>' + monthsArr[i] + ' ' + year + '</option>';
		}
	}
	monthYearCombo += '</select><div class="nextmonth">&raquo;</div></div>';
	jQuery(preSel + ' .monthyearcombo').remove();
	jQuery(preSel).prepend(monthYearCombo);
	dpCheckArrows(jQuery(preSel + ' .monthyearcombo select'));
	jQuery(preSel + ' .monthyearcombo .prevmonth').click(function() {
		jQuery(this).next('select').find('option:eq(' + (jQuery(this).next('select').get(0).selectedIndex-1) + ')').attr('selected', 'selected');
		jQuery(this).next('select').change();
		dpCheckArrows(jQuery(this).next('select'));
	});
	jQuery(preSel + ' .monthyearcombo .nextmonth').click(function() {
		jQuery(this).prev('select').find('option:eq(' + (jQuery(this).prev('select').get(0).selectedIndex+1) + ')').attr('selected', 'selected');
		jQuery(this).prev('select').change();
		dpCheckArrows(jQuery(this).prev('select'));
	});
}

/**
 * Pre-adjust month-year selectbox.
 *
 * @param string preSel selection-id
 *
 * @return void
 */
function dpChangeMonthYear(preSel) {
	var monthYear = jQuery(preSel + ' .monthyearcombo option:selected').val().split('_');
	
	var hiddenYearSelect = jQuery(preSel + ' .ui-datepicker-new-year').length ? jQuery(preSel + ' .ui-datepicker-new-year') : jQuery(preSel + ' select.ui-datepicker-year');
	jQuery('option[value=' + monthYear[0] + ']', hiddenYearSelect).attr('selected', 'selected');
	jQuery.datepicker._selectMonthYear(preSel, document.getElementById(preSel.split('#')[1]).getElementsByTagName('select')[2], 'Y');
	
	var hiddenMonthSelect = jQuery(preSel + ' .ui-datepicker-new-month').length ? jQuery(preSel + ' .ui-datepicker-new-month') : jQuery(preSel + ' select.ui-datepicker-month');
	jQuery('option[value=' + monthYear[1] + ']', hiddenMonthSelect).attr('selected', 'selected');
	jQuery.datepicker._selectMonthYear(preSel, document.getElementById(preSel.split('#')[1]).getElementsByTagName('select')[1], 'M');
	
	dpCheckArrows(jQuery(preSel + ' .monthyearcombo select'));
}

/**
 * Hide or show month-year-navigation-arrows.
 *
 * @param object elm destination-element
 *
 * @return void
 */
function dpCheckArrows(elm) {
	elm.prev('.prevmonth').css('visibility', 'visible');
	elm.next('.nextmonth').css('visibility', 'visible');
	if(!elm.get(0).selectedIndex) {
		elm.prev('.prevmonth').css('visibility', 'hidden');
	}
	if(elm.get(0).selectedIndex == elm.find('option').length-1) {
		elm.next('.nextmonth').css('visibility', 'hidden');
	}
}

/**
 * Mark vacation for given dateElm.
 *
 * @param object dateElm to change
 *
 * @return object
 */
function dpMarkVac(dateElm) {
	if(dpSelectedArea) {
		if(vacations[dpSelectedArea].length) {
			return showDays(vacations[dpSelectedArea].concat(holidays['global']), dateElm, 'ui-datepicker-vacation') ;
		}
	}
	if(holidays) {
		return showDays(holidays['global'], dateElm, 'ui-datepicker-vacation');
	}
	return [true, ''];
}

/**
 * Mark vacation helper.
 *
 * @param array markedDays source-array
 * @param object dateElm to change
 * @param string dateClass destination-class-name
 *
 * @return object
 */
function showDays(markedDays, dateElm, dateClass) {
	for(i=0; i<markedDays.length-1; i++) {
		var dpFromParts = markedDays[i][0].split('.');
		var dpFrom = new Date(dpFromParts[2], dpFromParts[1]-1, dpFromParts[0]).getTime();
		if(markedDays[i].length == 2) {
			var dpToParts = markedDays[i][1].split('.');
			var dpTo = new Date(dpToParts[2], dpToParts[1]-1, dpToParts[0]).getTime();
			if(dateElm.getTime() >= dpFrom && dateElm.getTime() <= dpTo) {
				return [true, dateClass];
			}
		}
		if(dateElm.getTime() == dpFrom) {
			return [true, dateClass];
		}
	}
	return [true, ''];
}

/**
 * Set bookingcode as hidden-elements.
 *
 * @return void
 */
function setBookingCode() {
	var bookingsequence = get('bookingsequence');
	if(bookingsequence) {
		tmp = jQuery('#input_crs').parent();
		jQuery('#input_crs').val(bookingsequence);
		jQuery('#input_crs').removeAttr('onclick');
		jQuery('#input_crs').attr({'id':'input_crs_set', 'readonly':'readonly', 'name':'input_crs_full'});
		tmp.append('<input name="input_crs" id="input_crs" type="hidden" value="' + bookingsequence.substr(0, 8) + '" />');
		tmp.append('<input name="sleistung" id="sleistung" type="hidden" value=";' + bookingsequence.substr(8, 2) + ';' + bookingsequence.substr(10, 3) + '" />');
	}
}

/**
 * Add an option to a select tag. Cross browser
 *
 * @return void
 */
function addSelectOption (elementSelect,selectText,selectValue) {
    var optNew = document.createElement('option');
    optNew.text = selectText;
    optNew.value = selectValue;
    try {
        elementSelect.add(optNew,null);
    } catch(exeption) {
        elementSelect.add(optNew); // IE only
    }
}

/**
 * Handler for udf regions select changes
  *
 * @return void
 */
function onRegionChange() {
    jQuery('#detail','.tx-tuisearch-pi1').val(parseInt(jQuery('#udfRegion option:selected','.tx-tuisearch-pi1').val())>=0 ? 'hotel' : 'zielgebiet');
}

/**
 * Handler for udf country select changes
 *
 * @return void
 */
function onSelectCountryChange() {
    /* Entferne alle Option-Tags aus dem Select der Regionen */
    jQuery('#udfRegion','.tx-tuisearch-pi1').children().remove();
    /* Ermittle ausgewähltes Land */
    var selected = jQuery("#udf option:selected");
    /* Hole Selectelement zur Wiedervendung der Referenz */
    regionSelect=document.getElementById('udfRegion');
    /* Setzte Standardauswahl */
    addSelectOption(regionSelect,'Alle Regionen','-1');
    if (selected.val() != '-1') jQuery.getScript(udfBaseUrl+'regions_'+( (selected) && (selected.val() != '-1') ? selected.val() : '0') +'.js',function() {
        /* Setze veränderlichen Arraybezeichner auf Standardbezeichner um */
        eval('var regions=ttUdfRegions_'+ttPort+'_'+((selected.val() != '-1') ? selected.val() : '0'));
        /* Breite Sortierung vor*/
	var regionArray=new Array(regions.length);
        /* Für jedes Element des Arrays */
        jQuery.each(regions, function (index,value) {
            /* Für jedes Element des SubArrays*/
            regionArray[index]=value['titleJS']+'$'+selected.val()+'|'+value['topRegion'];
        });

	regionArray.sort();

        /* Für jedes Element des Arrays */
        jQuery.each(regionArray, function (index,value) {
            /* Für jedes Element des SubArrays füge neue Option hinzu*/
            addSelectOption(regionSelect,value.split('$')[0],value.split('$')[1]);
        });
		/* Setzte Standardauswahl */
		var udfRegion = null;
		var locationSearch = decodeURIComponent(window.location.search);
		if(udfRegion = locationSearch.match(/udfRegion=(?:-1|(\d+\|\d+))/)) {
			udfRegion = udfRegion[0].split('=')[1];
		}
		udfRegion = udfRegion ? udfRegion : jQuery('.tx-tuisearch-pi1 input[name=udfRegionPreset]').val();
		udfRegionOption = jQuery('#udfRegion option[value=' + udfRegion + ']').attr('selected', 'selected');
    });
}

/**
 * set udf destinations and regions in search forms
 *
 * @return void
 */

var udfBaseUrl = '';

function stringComparison(a, b)	{
	a = a.split('|')[0];
	a = a.toLowerCase();
	a = a.replace(/ä/g,"a");
	a = a.replace(/ö/g,"o");
	a = a.replace(/ü/g,"u");
	a = a.replace(/ß/g,"s");

	b = b.split('|')[0];
	b = b.toLowerCase();
	b = b.replace(/ä/g,"a");
	b = b.replace(/ö/g,"o");
	b = b.replace(/ü/g,"u");
	b = b.replace(/ß/g,"s");

	return (a==b) ? 0 : (a>b) ? 1:-1;
}

ttPort=654;

function udfCountries(mainContainer) {
	mainContainer.find('#udf').each(function() {
		/* first flush the init values */
		jQuery(this).find('option').remove();
		jQuery('#udfRegion').find('option').remove();

		ttPort=(mainContainer.find('.udfpackage').length>0) ? 654 : 653;
		udfBaseUrl='http://www.tui.com/fileadmin/common/templates/js/udf/'+ttPort+'/';

		jQuery.getScript(udfBaseUrl+'destinations.js', function () {
			/* Entferne alle Option-Tags aus dem Select der Länder */
			jQuery(this).children().remove();
			/* Hole Selectelement zur Wiedervendung der Referenz */
			addSelect=document.getElementById('udf');
			/* Setze defaut Option */
			addSelectOption(addSelect,'Alle Reiseziele','-1');
			addSelectOption(addSelect,'Ihre Lieblingsreiseziele','0');
			/* Vereinheitliche den Array-Bezeichner */
			eval('var ttUdfDestinations=ttUdfDestinations_'+ttPort);
			/* Füge alle Länder als Option zu Select hinzu */
			var countryArray = new Array(ttUdfDestinations.length);
			/* Bereite Sortierung vor */
			jQuery.each(ttUdfDestinations, function (index,value) {
				/* Für jedes Element des Arrays */
				countryArray[index]=value['titleJS']+'|'+value['id'];
			});
			countryArray.sort(stringComparison);

			jQuery.each(countryArray, function (index,value) {
				/* Für jedes Element des Arrays */

				var country=countryArray[index].split('|')[0];
				var countryID=countryArray[index].split('|')[1];

				if (countryID != 0) addSelectOption(addSelect,country,countryID);
			});
			/* Füge Handler für Änderungen in der Landesauswahl zu */
			jQuery('#udf').change(onSelectCountryChange);

		    addSelectOption(addSelect=document.getElementById('udfRegion'),'Alle Regionen','-1');
			/* Füge Handler für Änderungen in der Regionsauswahl zu */
			jQuery('#udfRegion','.tx-tuisearch-pi1').change(onRegionChange);
			/*set defaults of #udf & #udfRegion and trigger #udf jQuery('#udf').trigger('change')*/
			udfPreset(mainContainer);
			//* Stosse Aktualisierung der Regionen an */
			//jQuery('#udf').trigger('change');
		});
	});
}

function udfPreset(mainContainer) {
	var udfVvalue = null;
	if(udfVvalue = window.location.search.match(/udf=\d+/)) {
		udfVvalue = udfVvalue[0].split('=')[1];
	}
	udfOption = mainContainer.find('#udf option[value=' + (udfVvalue ? udfVvalue : mainContainer.find('input[name=udfPreset]').val()) + ']');
	if(udfOption.length) {
		udfOption.attr('selected', 'selected').parent('select').change();
	}
}



/**
 * apply form vars to extended search url
 * @param DOM Object element: which called the event
 * @param string targetUrl: the target URL
 */
function triggerExtendedSearch(element, targetUrl) {
	jQuery(element).parents('form').each(function(index) {
		var thisForm = jQuery(this);
		var formValues = [];
		jQuery(thisForm).find('select, input[type=text], input[type=hidden], input[type=radio]:checked, input[type=checkbox]:checked, hidden').each(function(){
			formValues.push(jQuery(this).attr('name') + '=' + jQuery(this).val());
		});
		formValues.push('no_cache=1');
		/**
		 * url path fixes for
		 * last-minute, staedtereisen, staedtereisen, luxusreisen
		 */
		if(targetUrl.match(/pauschalreisen/)) {
			if(window.location.href.match(/last-minute/)) {
				targetUrl = targetUrl.replace('pauschalreisen', 'last-minute');
			}
			if(window.location.href.match(/staedtereisen/)) {
				targetUrl = targetUrl.replace('pauschalreisen', 'staedtereisen');
			}
			if(window.location.href.match(/luxusreisen/)) {
				targetUrl = targetUrl.replace('pauschalreisen', 'luxusreisen');
			}
			if(window.location.href.match(/familienreisen/)) {
				targetUrl = targetUrl.replace('pauschalreisen', 'familienreisen');
			}
		} else if(targetUrl.match(/sport-wellness-reisen/)){
			if(window.location.href.match(/unsere-marken\/tui/)) {
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/unsere-marken/tui/erweiterte-suche/');
			} else if(window.location.href.match(/unsere-marken\/1-2-fly/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/unsere-marken/1-2-fly/erweiterte-suche/');
			} else if(window.location.href.match(/unsere-marken\/club-magic-life/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/unsere-marken/club-magic-life/erweiterte-suche/');
			} else if(window.location.href.match(/unsere-marken\/robinson-clubs/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/unsere-marken/robinson-clubs/erweiterte-suche/');
			} else if(window.location.href.match(/unsere-marken\/fox-tours/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/unsere-marken/fox-tours/erweiterte-suche/');
			} else if(window.location.href.match(/sport-wellness-reisen\/wintersport-reisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/sport-wellness-reisen/wintersport-reisen/erweiterte-suche/');
			} else if(window.location.href.match(/sport-wellness-reisen\/golf-reisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/sport-wellness-reisen/golf-reisen/erweiterte-suche/');
			} else if(window.location.href.match(/sport-wellness-reisen\/wellness-reisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/erweiterte-suche/', '/sport-wellness-reisen/wellness-reisen/erweiterte-suche/');
			} else if(window.location.href.match(/familienreisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/', '/familienreisen/');
			} else if(window.location.href.match(/fernreisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/', '/fernreisen/');
			} else if(window.location.href.match(/pauschalreisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/', '/pauschalreisen/');
			} else if(window.location.href.match(/staedtereisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/', '/staedtereisen/');
			} else if(window.location.href.match(/luxusreisen/)){
				targetUrl = targetUrl.replace('/sport-wellness-reisen/', '/luxusreisen/');
			}
		}
		var formActionParts = targetUrl.split('?');
		var extendedSearchUrl = formActionParts[0] + ((formActionParts[0].substr(-1)=='/') ? '' : '/') + '?' + (formActionParts[1] ? formActionParts[1] : '') + formValues.join('&');
		window.location.href=extendedSearchUrl;
	});
}

