ck24 = {
	vars : [],
	delays : [],
	isIE6 : $.browser.msie && $.browser.version.substr(0,3)=='6.0',
	isIE7 : $.browser.msie && $.browser.version.substr(0,3)=='7.0',
	isIE8 : $.browser.msie && $.browser.version.substr(0,3)=='8.0',
	isFF2 : $.browser.mozilla && (parseFloat($.browser.version) < 1.9), 
	
	set : function(name, value) {
		this.vars[name] = value;
	},
	
	get : function(name) {
		return this.vars[name];
	},	
		
	delaySet : function(id, ms, func) {
		this.delayClear(id);
		this.delays[id] = setTimeout(func +'()' , ms);
	},
	
	delayClear : function(id) {
		if (this.delays[id]) {
			clearTimeout(this.delays[id]);
			this.delays[id] = false;
		}
	},	
	
	include : function(src, id) {
		var script = document.createElement('script');
		script.src = src;
		script.type = 'text/javascript';
		script.defer = true;
		if (id) script.id = id;

		var head = document.getElementsByTagName('head').item(0);
		head.appendChild(script);
	},
	
	popup : function() {
		var w = arguments[0] ? arguments[0] : '580';
		var h = arguments[1] ? arguments[1] : '360';
		var popup = window.open('', 'popup', 'width='+w+',height='+h+',scrollbars=yes, toolbar=no,status=no,resizable=yes,menubar=no,location=no,directories=no,top=10,left=10');
		popup.focus();
	}
};

ck24_faqtip = {
	active : false,
	
	//register faqtips
	register : function() {
		
		$('.ck24-faqtip').each(function () {
			var faqtip = $(this);
			var faqtip_content = faqtip.find('.ck24-faqtip-content');
			
			faqtip_content.html(
				'<div class="ck24-faqtip-inner">' +
					faqtip_content.html() +					
					'<div class="ck24-faqtip-corner">&nbsp;</div>' +
					'<div class="ck24-faqtip-close">&nbsp;</div>' +
				'</div>'
			);
			//faqtip_content.bgiframe(); Not needed for faqtip
			
			faqtip.click(function(e) {
				faqtip.addClass('maximize-zindex');
				if(ck24.isIE6){
					faqtip_content.show();
					if(ck24_faqtip.active!=faqtip_content){
						if (ck24_faqtip.active) {
							ck24_faqtip.active.hide();
						}
						ck24_faqtip.active = faqtip_content;
						e.stopPropagation();
					}
				}
				else{
					faqtip_content.fadeIn('fast', function() {
						ck24_faqtip.active = faqtip_content;
					});
				}
			});
			
			
			faqtip.find('.ck24-faqtip-title').hover(
				function() {
					$(this).addClass('ck24-faqtip-hover');
				},
				function() {
					$(this).removeClass('ck24-faqtip-hover');
				}
			);
			
		});
		
		$(document).click(function() {
			ck24_faqtip.close();
		});
	},
	
	close : function() {
		if (this.active) {
			this.active.closest('.ck24-faqtip').removeClass('maximize-zindex');
			if(ck24.isIE6){
				this.active.hide();
			}
			else{
				this.active.fadeOut('fast');
			}
			this.active=false;
		}			
	}
};


ck24_hotlinetip = {
	//register hotlinetips
	register : function() {
		$('.ck24-hotlinetip').each(function () {
			var hotlinetip = $(this);
			var hotlinetip_content = hotlinetip.find('.ck24-hotlinetip-content');
			
			hotlinetip_content.html(
				'<div class="ck24-hotlinetip-inner">' +
				hotlinetip_content.html() +					
					'<div class="ck24-hotlinetip-corner">&nbsp;</div>' +
				'</div>'
			);

			if (hotlinetip.hoverIntent) {
				hotlinetip.hoverIntent({
					sensivity: 3,
					interval: 200,
					over: function(e) { hotlinetip_content.fadeIn('fast'); },
					out: function(e) { hotlinetip_content.fadeOut('fast'); },
					timeout: 500
				});
			}
		});
	}
};


ck24_navi = {
	init : function() {
	
		if (ck24.get('menu')) {
			$('.navi-arrow').show().mouseover(function() {
				ck24.delaySet('navi_open', 222, 'ck24_navi.open');
			});			
			
			$('#navi_clickable').mouseover(function() {
				ck24.delaySet('navi_open', 222, 'ck24_navi.open');
			});	
			
			$('#navi').mouseout(function(event) {
				var node = $(event.relatedTarget);
				var id = node.attr('id');
				
				if (id != 'navi') {	
					if (id == '') {
						var mt =  new Date().getTime();
						id =  'bubble' + mt;
						node.attr('id', 'bubble' + mt);
					}
					
					if ($('#navi').find('#'+ id).length == 0) {
						ck24.delaySet('navi_close', 333, 'ck24_navi.close');
					}
				}
			});
			
			$('#navi_content').mouseover(function() {
				ck24.delayClear('navi_close');
			});
			
			$('.navi-arrow').mouseout(function() {
				ck24.delayClear('navi_open');
			});
		} else {
			
		}
		
		//register sub menus
		$('.navi-sub').mouseover(function() {
			ck24.delayClear('navi_sub');
			ck24_navi.closeSub();
			$(this).find('.navi-sub-list').show();
		});
		
		$('.navi-sub').mouseout(function() {
			ck24.delaySet('navi_sub', 333, 'ck24_navi.closeSub');
		});		
	},
	
	open : function(instant) {
		var navi = $('#navi_content');
		
		if (navi.attr('open') != '1') {
			ck24_faqtip.close();		
			navi.attr('open', 1);
			$('.navi-arrow').addClass('navi-arrow-hovered');
			$('#navi_clickable').addClass('navi-clickable-hovered');
			navi.show(instant || ck24.isIE6 ? null : 'blind', 333);
			if (ck24.isIE6 || ck24.isIE7) $('.navi').css('zIndex', '100');
		}		
	},
	
	close : function(instant) {
		var navi = $('#navi_content');
		
		if (navi.attr('open') == '1') {
			ck24_faqtip.close();
			navi.attr('open', 0);
			
			navi.hide(instant || ck24.isIE6 ? null : 'blind', 333, function(){
				$('.navi-arrow').removeClass('navi-arrow-hovered');
				$('#navi_clickable').removeClass('navi-clickable-hovered');
				if (ck24.isIE6 || ck24.isIE7) {
					$('.navi').css('zIndex', '1');
				}
			});
		}		
	},
	
	closeSub : function () {
		$('.navi-sub-list').hide();
	},
	
	toggle : function() {
		var navi = $('#navi_content');
		
		if (navi.attr('open') == '1') {
			navi.attr('open', 0);
			navi.hide('blind');
		} else {
			navi.attr('open', 1);
			navi.show('blind');		
		}		
	}
}


ck24_div = {
	init: function() {
		if ($.browser.msie) {
			$('#c24').addClass('ie').addClass('ie'+$.browser.version.substr(0,1));
		}
		if ($.browser.safari) {
			$('#c24').addClass('sa');
		}
		if ($.browser.opera) {
			$('#c24').addClass('op');
		}
		if ($.browser.mozilla) {
			$('#c2<4').addClass('mo');
		}
	}
}


ck24_form = {
	register: function() {
		$('.ck24-form').each(function () {
			// Phone areacode validator
			$.validator.addMethod('areacode', function(value) {
				return (/^0[1-9]{1}\d{1,3}$/.test(value) == true);
			}, 'Ungültige Vorwahl');

			switch($(this).attr('id')) {
				case 'form_energy_power_half':
				case 'form_energy_power_full':
					$('#'+$(this).attr('id')).validate({
						rules: {
							zipcode: {
								required: true,
								min: 5,
								remote: {
									url: '/_ajax.php',
									data: {
										module: 'validate',
										action: 'zipcode',
										type: 'jqvalidate'
									}
								}
							},
							totalconsumption: {
								required: true
							}
						},
						messages: {
							zipcode: 'Ungültige Postleitzahl',
							totalconsumption: 'Stromverbrauch fehlt'
						},
						errorElement: 'em',
						invalidHandler: function(form, validator) {
							var errors = validator.numberOfInvalids();
							(errors == 0) ? $('#form_submit').css('margin-top', '10px') : $('#form_submit').css('margin-top', '0');
						}
					});
					$('#zipcode_energy').numeric();
					break;

				case 'form_communication_dsl_half':
					$('#'+$(this).attr('id')).validate({
						rules: {
							areacode: {
								areacode: true
							}
						},
						messages: {
							areacode: 'Ungültige Vorwahl'
						},
						errorElement: 'em'
					});
					$('#areacode_dsl').numeric();
					break;
				
				case 'form_finance_ratenkredit_full':
					$('#'+$(this).attr('id')).validate({
						rules: {
							kp: {
								required: true,
								number: true
							}
						},
						messages: {
							kp: 'Bitte eingeben'
						},
						errorElement: 'em'
					});
					$('#kp_ratenkredit').numeric();
					break;

				case 'form_finance_ratenkredit_half':
					$('#'+$(this).attr('id')).validate({
						rules: {
							kp: {
								required: true,
								number: true
							}
						},
						messages: {
							kp: 'Kreditbetrag eingeben'
						},
						errorElement: 'em'
					});
					$('#kp_ratenkredit').numeric();
					break;

				case 'form_finance_autokredit_half':
					$('#'+$(this).attr('id')).validate({
						rules: {
							kp: {
								required: true,
								number: true
							}
						},
						messages: {
							kp: 'Kreditbetrag eingeben'
						},
						errorElement: 'em'
					});
					$('#kp_autokredit').numeric();
					break;

				case 'form_travel_hotel_full':
					$('#'+$(this).attr('id')).validate({
						rules: {
							'search[location_name]': {
								required: true
							}
						},
						messages: {
							'search[location_name]': 'Zielort eingeben'
						},
						errorElement: 'em'
					});
					break;

				case 'form_travel_flight_full':
					$('#'+$(this).attr('id')).validate({
						rules: {
							'search[origin_name]': {
								required: true
							},
							'search[destination_name]': {
								required: true
								//equalTo: "#search_origin_name"
							}
						},
						messages: {
							'search[origin_name]': 'Startflughafen eingeben',
							'search[destination_name]': 'Zielflughafen eingeben'
						},
						errorElement: 'em',
						invalidHandler: function(form, validator) {
							var errors = validator.numberOfInvalids();
							if (errors > 0) {
								if ($('#search_origin_name').val() == '') $('#flightOnewayFilter').hide();
								if ($('#search_destination_name').val() == '') $('#flightNonstopFilter').hide();
							} 
						}
					});
					$('#search_origin_name').keyup(function() { ($('#search_origin_name').val() == '') ? $('#flightOnewayFilter').hide() : $('#flightOnewayFilter').show(); });
					$('#search_origin_name').change(function() { ($('#search_origin_name').val() == '') ? $('#flightOnewayFilter').hide() : $('#flightOnewayFilter').show(); });
					$('#search_destination_name').keyup(function() { ($('#search_destination_name').val() == '') ? $('#flightNonstopFilter').hide() : $('#flightNonstopFilter').show(); });
					$('#search_destination_name').change(function() { ($('#search_destination_name').val() == '') ? $('#flightNonstopFilter').hide() : $('#flightNonstopFilter').show(); });
					break;

				case 'form_travel_rental_full':
					$('#'+$(this).attr('id')).validate({
						rules: {
							dep_city: {
								required: true
							},
							dest_city: {
								required: true
							}
						},
						messages: {
							dep_city: 'Abholort eingeben',
							dest_city: 'Rückgabeort eingeben'
						},
						errorElement: 'em',
						invalidHandler: function(form, validator) {
							var errors = validator.numberOfInvalids();
							if (errors > 0) $('#rentalAirportFilter').hide();
						}
					});
					$('#dep_city').change(function() { ($('#dep_city').val() == '') ? $('#rentalAirportFilter').hide() : $('#rentalAirportFilter').show(); });
					$('#dep_city').keyup(function() { ($('#dep_city').val() == '') ? $('#rentalAirportFilter').hide() : $('#rentalAirportFilter').show(); });
					break;
			}
		});
	}
}

c24_press_clippings = {
	register : function() {
	    $('.clippings .toggle').click(function() {
	        var id = $(this).attr('toggleid');
	       
	        if ($(this).hasClass('close')) {
	            $(this).removeClass('close');
	            $('#'+ id).hide('blind');           
	        } else {
	            $(this).addClass('close');
	            $('#'+ id).show('blind');
	        }
	
	        return false;
	    });
	    $(window.openToggleId).click();
	}
}

function c24_iframe_resizer(){
	// Set specific variable to represent all iframe tags.
	var iFrames = $('.ck24-resize-iframe');

	// Resize heights.
	function iResize()
	{
		// Iterate through all iframes in the page.
		for (var i = 0, j = iFrames.length; i < j; i++)
		{
			// Set inline style to equal the body height of the iframed content.
			iFrames[i][0].style.height = iFrames[i][0].contentWindow.document.body.offsetHeight + 'px';
		}
	}

	// Check if browser is Safari or Opera.
	if ($.browser.safari || $.browser.opera)
	{
		// Start timer when loaded.
		$('.ck24-resize-iframe').load(function()
			{
				setTimeout(iResize, 0);
			}
		);

		// Safari and Opera need a kick-start.
		for (var i = 0, j = iFrames.length; i < j; i++)
		{
			var iSource = iFrames[i][0].src;
			iFrames[i][0].src = '';
			iFrames[i][0].src = iSource;
		}
	}
	else
	{
		// For other good browsers.
		$('.ck24-resize-iframe').load(function()
			{
					innerDoc = (this.contentDocument) ? this.contentDocument : this.contentWindow.document;
					objToResize = (this.style) ? this.style : this;
					objToResize.height = innerDoc.body.scrollHeight + 10;
			}
		);
	}

}

$(function() {
	ck24_navi.init();
	ck24_faqtip.register();
	ck24_hotlinetip.register();
	c24_press_clippings.register();
	
	c24_iframe_resizer();
	
	$('.home').hover(
		function() {
			$('#home_hover').show();
			$('#home_standard').hide();
		},
		function() {
			$('#home_standard').show();
			$('#home_hover').hide();
		}
	);
	
	ck24_form.register();
	ck24_div.init();	
});

