/*
             \|/
            .-*-
           / /|\
          _L_
        ,"   ".
    (\ /  O O  \ /)
     \|    _    |/
       \  (_)  /
       _/.___,\_
     (_/ doom  \_)
         ready, the end is near
*/

	var doomready = new Object();

	
    
	doomready = {
		add: function(fn) {
			if (doomready.loaded) return fn();
			var observers = doomready.observers;
			if (!observers) observers = doomready.observers = [];
			observers[observers.length] = fn; // Arraypush is not supported by Mac IE 5
			if (doomready.callback) return;
			doomready.callback = function() {
				if (doomready.loaded) return;
				doomready.loaded = true;
				if (doomready.timer) {
					clearInterval(doomready.timer);
					doomready.timer = null;
				}
				var observers = doomready.observers;
				for (var i = 0, length = observers.length; i < length; i++) {
					var fn = observers[i];
					observers[i] = null;
					fn(); // make 'this' as window
				}
				doomready.callback = doomready.observers = null;
			};
	
			var ie = !!(window.attachEvent && !window.opera);
			var webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;
			if (document.readyState && webkit) { // Apple WebKit (Safari, OmniWeb, ...)
				doomready.timer = setInterval(function() {
					var state = document.readyState;
					if (state == 'loaded' || state == 'complete') {
						doomready.callback();
					}
				}, 50);
			}
			else if (document.readyState && ie) { // Windows IE
				var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
				document.write(
					'<script type="text/javascript" defer="defer" src="' + src + '" ' +
					'onreadystatechange="if (this.readyState == \'complete\') doomready.callback();"' +
					'><\/script>');
			}
			else {
				if (window.addEventListener) { // for Mozilla browsers, Opera 9
					document.addEventListener("DOMContentLoaded", doomready.callback, false);
					window.addEventListener("load", doomready.callback, false); // Fail safe
				}
				else if (window.attachEvent) {
				window.attachEvent('onload', doomready.callback);
				}
				else { // Legacy browsers (e.g. Mac IE 5)
					var fn = window.onload;
					window.onload = function() {
						doomready.callback();
						if (fn) fn();
					}
				}
			}
		}
	}


/*-- spam protection --*/

	function getAdr(prefix, postfix, text) {
		document.write('<a href="mailto:' + prefix + '@' + postfix + '">' + (text ? text.replace(/&quot;/g, '"').replace(/%EMAIL%/, prefix + '@' + postfix) : prefix + '@' + postfix) + '</a>');
	}

/*-- swap image --*/

	function swapImage(element, newimage) {
		var oldsrc = element.src;
		element.src = newimage;
		if (!element.onmouseout) {
			element.onmouseout = function () {
				swapImage(this, oldsrc);
			}
		}
	}

/*-- add/remove class --*/

	function addClass(obj, newclass) {
		if(obj.className.indexOf(newclass) == -1)
			obj.className += " " + newclass;
	}
	
	function removeClass(obj, oldclass) {
		var classes = obj.className.split(' ');
		for(i=0; i<classes.length; i++) {
			if(classes[i] == oldclass)
				classes[i] = "";
		}
		obj.className = classes.join(' ');
	}

/*-- getElementsByClassName --*/

	function getElementsByClassName(strClass, strTag, objContElm) {
		strTag = strTag || "*";
		objContElm = objContElm || document;
		var objColl = objContElm.getElementsByTagName(strTag);
		if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
		var arr = new Array();
		var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
		var arrClass = strClass.split(delim);
		for (var i = 0, j = objColl.length; i < j; i++) {
			var arrObjClass = objColl[i].className.split(' ');
			if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
			var c = 0;
			comparisonLoop:
			for (var k = 0, l = arrObjClass.length; k < l; k++) {
				for (var m = 0, n = arrClass.length; m < n; m++) {
					if (arrClass[m] == arrObjClass[k]) c++;
					if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
						arr.push(objColl[i]);
						break comparisonLoop;
					}
				}
			}
		}
		return arr;
	}

/*-- validform --*/

	var custom_required_text = new Object();
	function init_forms() {
		var content = document.getElementById('content');
		if(content) {
			var forms = content.getElementsByTagName('form');
			for(f=0; f<forms.length; f++) {
				init_form(forms[f]);
			}
		}
		var email_empfaenger;
		var inputs = document.getElementsByTagName('*');
		for(i=0; i < inputs.length; i++) {
			if(inputs[i].name) {
				if(inputs[i].name == 'email_empfaenger') {
					email_empfaenger = inputs[i];
				}
			}
		}
		if(email_empfaenger) {
			if(email_empfaenger.tagName.toLowerCase() == 'select') {
				var options = email_empfaenger.getElementsByTagName('option');
				for(o=0; o<options.length; o++) {
					options[o].value = options[o].value.replace('+at+', '@');
				}
			}
			else {
				email_empfaenger.value = email_empfaenger.value.replace('+at+', '@');
			}
		}
	}

	function init_form(form) {
		var required = getElementsByClassName('required', '*', form);
		for(i=0; i<required.length; i++) {
			required[i].oldformonblur = required[i].onblur;
			required[i].onblur = function() {
				validate(this);
				if(this.oldformonblur)
					this.oldformonblur();
			}
		}
		form.onsubmit = function() {
			var doSubmit = true;
			var list = new Array();
			var required = getElementsByClassName('required', '*', this);
			for(v=0; v<required.length; v++) {
				if(! validate(required[v])) {
					doSubmit = false;
					list.push(required[v]);
				}
			}
			var checkboxeles = getElementsByClassName('required_checkbox', '*', this);
			for(i=0; i<checkboxeles.length; i++) {
				valid = false;
				checkboxes = checkboxeles[i].getElementsByTagName('input');
				for(c=0; c<checkboxes.length; c++) {
					if(checkboxes[c].type == 'checkbox') {
						checkboxeles[i].name = checkboxes[c].name; // we need the name to check for custom_required_texts
						if(checkboxes[c].checked)
							valid = true;
					}
				}
	
				if(valid == false) {
					doSubmit = false;
					set_msg(checkboxeles[i], label_valid_checkbox);
					list.push(checkboxeles[i]);
				} 
				else {
					clear_msg(checkboxeles[i]);
				}
			}
			var radioeles = getElementsByClassName('required_radio', '*', this);
			for(i=0; i<radioeles.length; i++) {
				valid = false;
				radios = radioeles[i].getElementsByTagName('input');
				for(c=0; c<radios.length; c++) {
					if(radios[c].type == 'radio') {
						radioeles[i].name = radios[c].name; // we need the name to check for custom_required_texts
						if(radios[c].checked)
							valid = true;
					}
				}
	
				if(valid == false) {
					doSubmit = false;
					set_msg(radioeles[i], label_valid_radio);
					list.push(radioeles[i]);
				} 
				else {
					clear_msg(radioeles[i]);
				}
			}

		if(doSubmit == false)
			show_error(list);
			return doSubmit;
		}
	}

	function validate(el) {
		var valid = true;
		clear_msg(el);
		switch(el.type) {
			case 'text':
			case 'textarea':
			case 'select-one':
				if(el.value != '') {
					if(el.className.indexOf('email') > -1) {
						var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
						if(el.value.toUpperCase().match(regEmail)){
							valid = true;
						}
						else {
							valid = false;
							set_msg(el, label_valid_email);
						}
					}
					if(el.className.indexOf('number') > -1) {
						if(el.value == Math.round(el.value)) {
							valid = true;
						}
						else {
							valid = false;
							set_msg(el, label_valid_postal_code);
						}
					}
				}
				else {
					valid = false;
					set_msg(el);
				}
				break;
		}
	
		return valid;
	}

	function set_msg(el, msg) {
		if(msg == undefined) {
			msg = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;
		}

		if(custom_required_text[el.name])
			msg = custom_required_text[el.name];

		el.errorMessage = msg;
		if(el.parentNode.className.indexOf('error') == -1)
			el.parentNode.className += ' error';
	}

	function clear_msg(el) {
		var classes = el.parentNode.className.split(' ');
		for(i=0; i<classes.length; i++) {
			if(classes[i].indexOf('error') > -1)
				classes[i] = "";
		}
		el.parentNode.className = classes.join(' ');
		el.errorMessage = "";
	}

	function show_error(list) {
		errorlist = '<ul>';
		for(i=0; i<list.length; i++) {
			el = list[i];
			if(el.errorMessage != undefined)
				errorMessage = el.errorMessage;
			else
				var errorMessage = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;
	
			errorlist += '<li>' + errorMessage + '</li>';
		};
		errorlist += '</ul>';
	
		var validationMessage = document.getElementById('validationMessage');
		validationMessage.innerHTML = '<h2 title="' + label_valid_error + '">' + label_valid_error + '</h2>' + errorlist;
		document.location.href = '#validationMessage';
	}

	doomready.add(function() {
		init_forms();
		/*left_show = document.getElementById('left_show');
			right_show = document.getElementById('right_show');
		bilder = left_show.getElementsByClassName('hidestart');
		bilder2 = right_show.getElementsByClassName('hidestart');*/
	});

/*-- search --*/


/*-- display elements onmouseover --*/

	var hover_links = new Array();
	hover_links.push(new Array('fontchange', 'fontsize'));
	// To add more links, follow the same pattern
	// hoverLinks.push(new Array('linkid', 'elementid'));

	function init_show_elements() {
		for (i = 0; i < hover_links.length; i++) {
			var link = document.getElementById(hover_links[i][0]);
			if (link) {
				link.el = document.getElementById(hover_links[i][1]);
				if (link.el) {
					link.onmouseover = function() {
						this.el.style.display = 'block';
					};
					link.onmouseout = function() {
						this.el.style.display = 'none';
					}
					link.onclick = function() {
						return false;
					}
				}
			}
		}
	}

	doomready.add(function() {
		init_show_elements();
	});

/*-- fader --*/

	// more info: atikon-forum -> tutorials

	var faderQueue = new Array();
	var faderInterval;

	function fader(options) {
		var obj = options.obj;
		var inout = options.inorout;
		var maxopacity = options.maxopacity;
		var alphastep = options.alphastep;
		var oncomplete = options.oncomplete;

		obj.oncomplete = oncomplete;
		obj.alphastep = alphastep;
		obj.maxopacity = maxopacity;
		if(!obj.currentopacity) {
			if(inout == 'in') {
				obj.currentopacity = 0;
				opacity(obj, 0);
			}
			else {
				obj.currentopacity = maxopacity;
				opacity(obj, maxopacity);
			}
		}
		obj.fade = inout;
		obj.style.display = 'block';

		faderQueue.push(obj);
		if(!faderInterval) {
			faderInterval = window.setInterval('darthFader()', 20);
		}
	}

	function darthFader() {
		if(faderQueue.length > 0) {
			for(i=0; i<faderQueue.length; i++) {
				var obj = faderQueue[i];

				if(obj.fade == 'in') {
					obj.currentopacity += obj.alphastep;
					opacity(obj, obj.currentopacity);

					if(obj.currentopacity >= obj.maxopacity) {
						if(obj.oncomplete) {
							obj.oncomplete(obj);
						}
						faderQueue.splice(i, 1); // remove object from queue
					}
				}
				else {
					obj.currentopacity -= obj.alphastep;

					opacity(obj, obj.currentopacity);

					if(obj.currentopacity <= 0 ) {
						obj.style.display = 'none';
						if(obj.oncomplete) {
							obj.oncomplete(obj);
						}
						faderQueue.splice(i, 1); // remove object from queue
					}
				}
			}

			if(faderQueue.length <= 0) {
				window.clearInterval(faderInterval);
				faderInterval = undefined;
			}
		}
	}

	function opacity(obj, value) {
		if(value < 0)
			value = 0;
		if(value > 1)
			value = 1;
		value = Math.round(value*100)/100;
		obj.style.opacity = value;
		obj.style.filter = 'alpha(opacity=' + value*100 + ')';
	}

/*-- check resolution --*/

	var check_resolution_elements = new Array();
	check_resolution_elements.push(new Array('client_login', '0', '595'));

	function check_resolution() {
		for (i = 0; i < check_resolution_elements.length; i++) {
			var id = document.getElementById(check_resolution_elements[i][0]);
			if (id) {
				var size = check_resolution_elements[i][1];
				var px = check_resolution_elements[i][2];
				if (size == 1) {
					var viewport = document.body.offsetWidth;
				}
				else {
					var viewport = document.body.offsetHeight;
				}
				if (viewport < px) {
					id.style.display='none';
				}
				else {
					id.style.display='block';
				}
			}
		}
	}

	window.onresize = function() {
	    check_resolution();
	}

	doomready.add(function() {
		check_resolution();
	});


    // fading sujet images
    var sujet_counters = new Object();
    var fade_speed = 1800;
    
    function change_sujet(sujet_location) {
                     
        if(sujet_counters[sujet_location] == undefined) {
            sujet_counters[sujet_location] = -1;
        }

        var sujet_list = $('#' + sujet_location + ' .sujetitems');
        var sujet_size = sujet_list.length;

        if(sujet_size > 1) {

            if(sujet_counters[sujet_location] >= 0) {
                $('#' + sujet_location + ' .sujet_' + sujet_counters[sujet_location]).fadeOut(fade_speed);
            }
            
            sujet_counters[sujet_location]++;
            
            if( sujet_counters[sujet_location] >= sujet_size ) {
                sujet_counters[sujet_location] = 0;
            }
    
            $('#' + sujet_location + ' .sujet_' + sujet_counters[sujet_location]).fadeIn(fade_speed);
    
            setTimeout('change_sujet("' + sujet_location + '")', 4500);
        
        }
        else {
            $('#' + sujet_location + ' .sujet_0').fadeIn(fade_speed);
        }

    }   

    
    $(function() {

        if($('.startpage').length) {
            change_sujet('left_show');
            change_sujet('right_show');
        }
        else {
            change_sujet('sujet');

            // round_tour select
            if( $('#roundtour_overview').length ) {

                $('#roundtour_overview select').change(function() {
                
                    $('.round_subnav').hide();
                
                    // vom aktuellen option element das zugehörige div mit dem untermenü einblenden
                    $("option:selected", this).each(function () {
                        var current_class = $(this).attr('class');
                        $('#content_' + current_class).fadeIn(800);
                    });
                })
            }
        }

    });
    
/*-- datepicker -- */

	// Last modification: 08/24/2010

	(function($){
		$.fn.datePicker = function(options){
			// Plugin options
			var now = new Date();
			var defaults = {
				hideInput: false, // Hide the coresponding input
				disablePast: true, // Use the past
				month: now.getMonth(), // Start month
				year: now.getFullYear(), // Start year
				format: "d.m.y", // Date format
				disableWeekend: false, // Disable Sa/So clicks
				speed: 200 // in km/h 
			};
			var options = $.extend(defaults, options);
			var dp_count = 0;
			// Init plugin to each
			return this.each(function(){
				// Pass vars
				var op = options;
				var el = $(this);
				var mp = ( $(this).parent().is('label')) ? $(this).parent() : $(this); //mp as in mountpoint
				dp_count++;
				// Generate main .datepicker
				if(op.hideInput == true) el.hide();
				$('<div id="dp'+dp_count+'" class="datepicker"><h2>init</h2><a class="dpprev" href="#" title="'+back+'">'+back+'</a><a class="dpnext" href="#" title="'+next+'">'+next+'</a><table><thead><tr></tr></thead><tbody></tbody></table></div>').insertAfter(mp);
				var datepicker = $("#dp"+dp_count);
				$.each(days_list, function(index, value){ $("thead tr", datepicker).append('<th>'+value+'</th>') });
				//Measure fill
				for(t=0;t<=6;t++){ $("table", datepicker).append("<tr><td class='dpday dpclickable active'>19</td><td class='dpday dpclickable'>20</td><td class='dpday dpclickable'>21</td><td class='dpday dpclickable'>22</td><td class='dpday dpclickable'>23</td><td class='dpday'>24</td><td class='dpday'>25</td></tr>"); }  
				//CSS settings
				datepicker.css( { "width":$("table", datepicker).width()+"px","height":datepicker.height()+"px","overflow":"hidden" });
				// Fill init selected month
				fillDateTable( datepicker, el, op.month, op.year, op );
				// Generate the buttons
				$('a', datepicker).click(function(event){
					event.preventDefault();
					mont = jQuery.inArray($("h2 .dpmonth", datepicker).html(), mont_list);
					year = $("h2 .dpyear", datepicker).html();
					direction = $(this).hasClass("dpprev");
					if( direction ) mont--;
					else mont++;
					if(mont>11){
						mont = 0;
						year++;
					}
					if(mont<0){
						mont = 11;
						year--;  
					}
					// Refill in selected direction
					$("table", datepicker).stop(true, true).animate({marginLeft: (direction) ? '100%' : '-100%'}, op.speed, function(){
						fillDateTable( datepicker, el, mont, year, op );
						$("table", datepicker).css("marginLeft", (direction) ? '-100%' : '100%').animate({marginLeft:0}, op.speed);
					});
				});
			});
			// Fill the .datepicker with data
			function fillDateTable(datepicker, el, mont, year, op){
				$("h2", datepicker).html('<span class="dpmonth">'+mont_list[mont] +'</span> <span class="dpyear">'+ year+'</span>');
				$("tbody tr", datepicker).remove();
				$("tbody", datepicker).append( generateMonthTable(mont, year, op));
				$('tbody td.dpclickable', datepicker).click(function(){

  					var format = op.format;
  					format = format.replace('m', ((jQuery.inArray($("h2 .dpmonth", datepicker).html(), mont_list))+1));
  					format = format.replace('d', $(this).html());
  					format = format.replace('y', $("h2 .dpyear", datepicker).html());
  					
                    if(validateDatepickers(el.attr('name'), format)) {    					
                        el.val(format)
    					$('tbody td.active', datepicker).removeClass("active");
    					$(this).addClass("active");
    				}
				});
			}
			
            /*--- validate datepicker custom ---*/
            function validateDatepickers(field, validateDate) {
                if( $('[name=anreise]').length && $('[name=abreise]').length ) {
                      validateDate = validateDate.split("/");
                      validateDate = new Date( validateDate[2], validateDate[1], validateDate[0] )
                      
                      if(field == "anreise") {
                        if( $('#dp2 .active').length ) {
                          dateOut = $('[name=abreise]').val().split("/");
                          dateOut = new Date( dateOut[2], dateOut[1], dateOut[0] )
                          dateOut .setDate(dateOut .getDate()-1);

                          if(dateOut<validateDate) {
                            alert(error_anreise);
                            return false;
                          }
                        }                      
                      }
                      else if(field == "abreise") {
                        if( $('#dp1 .active').length ) {
                          dateIn = $('[name=anreise]').val().split("/");
                          dateIn = new Date( dateIn[2], dateIn[1], dateIn[0] )
                          dateIn .setDate(dateIn .getDate()+1);
                          if(dateIn>validateDate) {
                            alert(error_abreise);
                            return false;
                          }
                        }                      
                      }

                    }
                return true;
            }			
			
			// Generate the tbody
			function generateMonthTable(mont, year, op){
				var date = new Date(year, mont)
				var days = date.getDate();
				var firs = (date.getDay());
				if(firs == 0) {
					firs = 7; // begin with Sundays
				}
				var last = (new Date((new Date(year, mont+1,1))-1)).getDate();
				var now = new Date();
				var html = "<tr>";
				var d = 1;

				for(c=1;c<= Math.ceil(((last+(firs-1))/7))*7 ;c++){
					var tdclass = ''; 
                    var dday = new Date(year, mont, d+1)  
                    var isPast = now>dday;  
                    var isWeekend = !(!((c % 7 == 0) || ((c+1) % 7 == 0)));    
					if(c>=firs && d<=last) tdclass += "dpday";
					if(isWeekend && d<=last) tdclass += " dpweekend";
					if(isPast) tdclass += " dppast";
					
					if(!(isPast && op.disablePast) && !(isWeekend && op.disableWeekend) && c>=firs && d<=last)
					   tdclass += " dpclickable";
					if(mont==now.getMonth() && year==now.getFullYear() && d==now.getDate()) tdclass += " dptoday";
					html += "<td class='"+tdclass+"'>";
					if(c>=firs&&d<=last) html += d++;
					html += "</td>";
					if (c % 7 == 0 && d<=last) html += "</tr><tr>";
				}
			return html + "</tr>";
			}
		};
	})(jQuery);                                                                        
	
	
	$(function(){
 		// Datepicker
		$('input.date').datePicker({ hideInput: true, format: "d/m/y", disableWeekend: false,  disablePast: true });		
	});
	
