ck24 = {
	vars : [],
	delays : [],
	isIE6 : $.browser.msie && /msie 6\.0/i.test(navigator.userAgent),
	isIE7 : (document.all && !window.opera && window.XMLHttpRequest) ? true : false,
	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', 111, 'ck24_navi.open');
			});

			$('#navi_clickable').mouseover(function() {
				ck24.delaySet('navi_open', 111, 'ck24_navi.open');
			});

			$('#navi_content').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_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':
					$('#'+$(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_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) $('.airportFilter').hide();
						}
					});
					$('#dep_city').change(function() { ($('#dep_city').val() == '') ? $('.airportFilter').hide() : $('.airportFilter').show(); });
					$('#dep_city').keyup(function() { ($('#dep_city').val() == '') ? $('.airportFilter').hide() : $('.airportFilter').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_iframe_resizer();

	$('.home').hover(
		function() {
			$('#home_hover').show();
			$('#home_standard').hide();
		},
		function() {
			$('#home_standard').show();
			$('#home_hover').hide();
		}
	);

	ck24_form.register();
});

(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

