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

VIESSMANN = {
	// Key definitions
	key_tab: 9,
	key_enter: 13,
	key_esc: 27,
	key_space: 32,

	key_pageup: 33,
	key_pagedown: 34,
	key_end: 35,
	key_home: 36,
	key_left: 37,
	key_up: 38,
	key_right: 39,
	key_down: 40,

	key_minus: 86,
	key_plus: 93,
	key_add: 132,
	key_substract: 140,
	
	delay:-1,
	currentNavItem: '',
	allTabs : new Array(),
	tabPointer:1,
	
	
	init: function() {
		// Init subnavigation
		VIESSMANN.subnavInit();
		// Init tablists
		VIESSMANN.tablistInit();
		
		// Handle fields with default values
		VIESSMANN.initDefaults();
		// Add pseudo hover to buttons
		VIESSMANN.initIE6ButtonHover();
		// Add abbr element in IE 6-7
		document.createElement('abbr');
		// Remove alt-text as tool-tips in IE
		jQuery( 'img' ).attr( 'title', '' );
		
		// Add event listener for country links
		VIESSMANN.countryInit();
		VIESSMANN.docClickInit();
		
		// Init target group layer
		VIESSMANN.targetGroupInit();
		VIESSMANN.zgListener();
		VIESSMANN.initDoorPage();
		
		// save all tabs for automation
		VIESSMANN.allTabs = jQuery('.tablist a');
	},
	
	// init fields with default values
	initDefaults: function() {
		// Set event listeners to input elements with default text
		jQuery('input.hasDefault, textarea.hasDefault')
			.blur( VIESSMANN.inputDefaults )
			.focus( VIESSMANN.inputDefaults )
			.click( VIESSMANN.inputDefaults );
	},
	// Toggle between input field defaults and selected input text
	inputDefaults: function( event ) {
		// Get default value from hidden input element
		var sDefaultValue = jQuery( '#' + this.id + '-default' ).val();
		// If field is empty on blur, fill with default value
		if ( event.type === 'blur' && this.value === '' ) {
			jQuery( this ).val( sDefaultValue );
		}
		// field is clicked on, remove default value
		else if ( (event.type === 'click' || event.type === 'focus') && this.value === sDefaultValue ) {
			this.value = '';
			return false;
		}
	},
	// Teach IE6 how to hover on buttons
	initIE6ButtonHover: function() {
		if ( jQuery.browser.msie && parseFloat( jQuery.browser.version ) < 7 ) {
			jQuery( 'button' ).mouseover( function() {
				jQuery(this).addClass('hover');
			}).mouseout( function() {
				jQuery(this).removeClass('hover');
			});
		}
	},
	
	countryInit: function() {
		jQuery( '#countryRef' ).click( VIESSMANN.countryClick );
	},
	countryClick: function( e ) {
		// get target object
		var event = e || window.event, oTarget = VIESSMANN.getTarget( event ), jqTarget = jQuery( oTarget );
		if ( jqTarget.parent().hasClass( 'title' ) ) {
			// close all layers
			jQuery( '#asia, #europe, #africa, #america, #middleeast' ).hide().next().hide();
			jqTarget.parent().parent().next().toggle();
			VIESSMANN.stopPropagation( event );
		} else if ( jqTarget.is( '[href^="#"]' ) ) {
			// close all layers
			VIESSMANN.docClick();
			// Open target layer
			jQuery( jqTarget.attr( 'href' ) ).next().show();
			VIESSMANN.stopPropagation( event );
		}
	},
	docClickInit: function() {
		jQuery( 'body' ).click( VIESSMANN.docClick );
	},
	docClick: function() {
		jQuery( '#countryRef .countryLinks' ).hide();
		VIESSMANN.closeNav();
	},
	
	zgListener: function() {
		jQuery("div.navlist div.moveRight a").bind('click', function() {
			jQuery("div.navlist ul.links").toggle();
			jQuery("div.navlist div#changeZG").toggle();
			jQuery("div.navlist div#closeZG").toggle();
			return false;
		});
	},
	
	// Sub navigation
	subnavInit: function() {
		var nav = document.getElementById( 'nav' );
		if ( nav ) {
			
			// if IE6 no binding
			if (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6) {
				// do nothing
			}
			else {
				// Add event listeners
				jQuery( nav ).bind( 'mouseout onfocusout', VIESSMANN.navListenerOut );
				jQuery( nav ).bind( 'mouseover onfocusin', VIESSMANN.navListenerOver );
				// jQuery( nav ).bind( 'mouseover onfocusin', VIESSMANN.navListenerOver );
				// Old event listener methods
				
				if ( nav.addEventListener ) {
					nav.addEventListener( 'focus', VIESSMANN.navListenerOver, true);
				}
				if ( nav.attachEvent ) {
					nav.attachEvent( 'focus', VIESSMANN.navListenerOver );
				}
			}
			
        }
	},
	navListenerOut:function( e ) {
		// get target object
		var event = e || window.event;
		var oTarget = VIESSMANN.getTarget( event );
		var jqTarget = jQuery( oTarget );
	
		// if a tag child of in nav
		if ( jqTarget.parent().parent().attr( 'id' ) == 'nav' ) {
			VIESSMANN.clearDelay();
		}
	},
	
	navListenerOver: function( e ) {
		// get target object
		var event = e || window.event;
		var oTarget = VIESSMANN.getTarget( event );
		var jqTarget = jQuery( oTarget );
		// When the first a tag in nav
		if ( jqTarget.parent().parent().attr( 'id' ) == 'nav' ) {
			// save li as currentNav
			VIESSMANN.currentNavItem = jqTarget.parent();
			// remove hover from others
			VIESSMANN.currentNavItem.siblings().removeClass( 'hover' );
			if ( jqTarget.hasClass( 'hasNavigationLayer' ) ) {
				VIESSMANN.delay = window.setInterval(function(){
							VIESSMANN.currentNavItem.addClass( 'hover' );
							// bind corresponding div to mouselease
							jQuery('#nav li.hover').mouseleave(VIESSMANN.startCloseTimer);
							jQuery('#nav li.hover').mouseenter(VIESSMANN.stopCloseTimer);
							VIESSMANN.clearDelay();
							},500); // delay before menu layer open
			}
		}
	},
	
	stopCloseTimer:function() {
		jQuery(this).stopTime();
	},
	
	startCloseTimer: function() {
		jQuery(this).oneTime(500,VIESSMANN.closeNav);
	},
	
	closeNav: function() {
		jQuery('#nav li.hover').unbind('mouseenter');
		jQuery('#nav li.hover').unbind('mouseleave');
		jQuery( '#nav .hover' ).removeClass( 'hover' );
	},
	
	// Tab Navigation
	tablistInit: function() {
		var tabs = jQuery( 'body.home #stage .box' );
		if ( tabs.length === 0 ) {
			return false;
		}
		var oAnchor = jQuery( '.tablist a' );
		oAnchor.each( function (i) {
			jQuery( this ).attr( 'aria-controls', this.href.replace(/.*(#)(.*)/, "$2") ).attr( 'href', this.href.replace(/.*(#tab-)(.*)/, '#t-' + "$2" ) );
		} ).not( '.open' ).attr( VIESSMANN.nTabindex(), '-1' );
		if ( tabs[0] && tabs[0].addEventListener ) {
			tabs.each( function ( i ) {
				// Add event listeners for decent browsers
				tabs[i].addEventListener( 'click', VIESSMANN.tabClick, true );
				tabs[i].addEventListener( 'keydown', VIESSMANN.tabClick, false );
			});
		}
		// Add event listener for IE
		else if ( tabs[0] && tabs[0].attachEvent ) {
			oAnchor.bind( 'click', VIESSMANN.tabClick ).keydown( VIESSMANN.tabClick );
		}
		// Set state if hash is present
		var iframe = document.getElementById( 'jquery-history-iframe' );
		if ( location.hash !== '' || ( iframe && iframe.location.hash !== '' ) ) {
			
			var sHref = ( iframe ) ? iframe.location.hash : location.hash;
			// set tabPointer to hash
			VIESSMANN.tabPointer = sHref.substring(3);
			//
			if ( sHref !== '#' ) {
				sHref = jQuery( sHref.replace( /(#t-)(.*)/, "#ti-$2" ) );
				VIESSMANN.tabClick( '', sHref );
			}
		}
		
		// add eventlistener on box inner to start/stop Auto-Rotation
		jQuery('.box .inner').mouseleave(VIESSMANN.startAutoRotation);
		jQuery('.box .inner').mouseenter(VIESSMANN.stopAutoRotation);
	},
	// Click on a tab
	tabClick: function( e, obj ) {

		// Normalize event object
		if ( e && typeof e.type !== 'undefined' ) {
			var event = e || window.event;
			// mouse click, so stop rotation
			VIESSMANN.stopAutoRotation();
		}
		else if ( !obj ) {
			// never be called?
			return false;
		}
		
		// If icon clicked set tabPointer
		if (e && e.target.nodeName.toLowerCase() == 'a') {
			VIESSMANN.tabPointer = jQuery(e.target).attr('id').substring(3);
		}
		
		// Set variables
		var oKey = ( event ) ? new VIESSMANN.KeyObject( event ) : obj;
		var jqTarget = ( obj ) ? obj : jQuery( oKey.oTarget );
		var sType = ( obj ) ? 'click' : event.type;
		var sId = jqTarget.attr( 'id' );
		
		o = ( sId ) ? document.getElementById( sId ) : null;
		nodeName = ( o && o.nodeName ) ? o.nodeName.toLowerCase() : '';
		if ( nodeName === 'a' && jqTarget.parent().parent().hasClass( 'tablist' ) && ( sType === 'keydown' || sType === 'click' ) ) {
			// Do something when the target isn't the anchor
			if (sType === 'click' && !jqTarget.hasClass('open')) {
				// Close tab panel
				var openTab = jqTarget.parent().siblings().find('a.open'), sOpenHref = openTab.attr('aria-controls'), sHref = jqTarget.attr('aria-controls');
				openTab.removeClass('open clicked').attr(VIESSMANN.nTabindex(), '-1');
				jQuery('#' + sOpenHref).removeClass('open').attr('aria-expanded', 'false');
				// Open tab panel
				var clicked = (event && event.type === 'click') ? ' clicked' : '';
				jqTarget.addClass('open' + clicked).attr(VIESSMANN.nTabindex(), '0');
				jQuery('#' + sHref).addClass('open').attr('aria-expanded', 'true');
				// Change keyvisual
				jQuery('#keyvis-1').attr( 'src', jqTarget.attr( 'rel' )).fadeOut(0).fadeIn(750);
				// Set hash
				sHref = sHref.replace(/(tab\-)(.*)/, "t-$2");
				VIESSMANN.setHash(sHref.replace(/(tab\-)(.*)/, "t-$2") );
				// Set focus
				jqTarget.focus();
				// Update screenreader buffer
				VIESSMANN.updateBuffer();
				// Prevent event bubbling
				VIESSMANN.stopPropagation(event);
				return false;
			}
			// Move open tab with arrow keys
			else if (oKey.bArrowKeys) {
				// Catch all tabs before and after current tab
				var prev = jqTarget.parent().prevAll('li').find('a'), next = jqTarget.parent().nextAll('li').find('a'), oFocus;
				// Reference to the correct arrays of objects
				var fwd = (oKey.iKey === VIESSMANN.key_left || oKey.iKey === VIESSMANN.key_up) ? prev : next;
				var rev = (oKey.iKey === VIESSMANN.key_left || oKey.iKey === VIESSMANN.key_up) ? next : prev;
				// Get the element to set focus on
				var oFocus = (fwd.length) ? fwd[0] : (rev.length) ? rev[rev.length - 1] : jqTarget;
				VIESSMANN.tabClick(event, jQuery(oFocus));
				// Prevent event bubbling
				VIESSMANN.stopPropagation(event);
				return false;
			}
		}
		// Ctrl-Up within a panel moves focus to header
		else if ( sType === 'keydown' && oKey.bCtrlKey && oKey.iKey === VIESSMANN.key_up ) {
			jqTarget.parents( '.tabs' ).find( '.tablist a.open' ).focus();
			// Prevent event bubbling
			VIESSMANN.stopPropagation( event );
			return false;
		}
		// Return if event happened on an irrelevant element or wrong key was pressed
		else {
			return;
		}
		
	},
	lazyLoadImages: function() {
		var oTabAnchors = jQuery( 'a.tab' );
		oTabAnchors.each( function (i) {
			var img = new Image;
			img.src = jQuery( this ).attr( 'rel' );
		});
	},
	
	// Target group navigation
	targetGroupInit: function() {
		jQuery( 'a[target=layer]' ).bind( 'click focus', VIESSMANN.targetGroupShow );
	},
	targetGroupShow: function( event ) {
		
		var href = this.href.replace( /(.*)(\.Layer)?(\.html)/, "$1.Layer$3" );
		
		var oDOMTarget = VIESSMANN.getTarget( event )
		jQuery.get( href, function (data) {
			if ( jQuery( '#targetGroup' ).length === 0 ) {
				var targetGroup = document.createElement( 'div' );
				targetGroup.id = 'targetGroup';
				jQuery( '#stage' ).append( targetGroup );
			}
			jQuery( '#targetGroup' ).html( data ).fadeIn( 'fast' ).find( 'button.close' ).click( VIESSMANN.targetGroupHide );
		});
		VIESSMANN.updateBuffer();
		VIESSMANN.stopPropagation( event );
	},
	targetGroupHide: function() {
		jQuery( '#targetGroup' ).fadeOut( 'fast' );
	},
	
	/* Initialize door page */
	initDoorPage : function() {
		var doorElm = jQuery( '#doorHome' );
		// Are we on the door page?
		if ( doorElm.length > 0 ) {
			var html = doorElm.html();
			var url = document.location.href;
			jQuery.cookie( 'Viessmann-Backlink', html + '|' + url, { path: '/' } );
		}
		else {
			var cookie = jQuery.cookie( 'Viessmann-Backlink' );
			if ( !cookie ) return;
			var params = cookie.split( '|' );
			jQuery( '#targetGroupList' ).append( '<a class="home" href="' + params[1] + '">' + params[0] + '</a>' );
		}
	},
	
	
	/****************************
	 * General helper functions *
	 ****************************/
	stopPropagation: function ( event ) {
		if (event) {
			// Prevent scrolling
			if (event.stopPropagation) 
				event.stopPropagation();
			if (event.preventDefault) 
				event.preventDefault();
			event.cancelBubble = true;
			event.returnValue = false;
			return false;
		}
	},
	// Create an object with all event properties
	KeyObject: function( event ) {
		var obj = {
			iKey: event.keyCode,
			bCtrlKey: event.ctrlKey,
			bAltKey: event.altKey,
			bShiftKey: event.shiftKey,
			bArrowKeys: (!event.altKey && (event.keyCode === VIESSMANN.key_down || event.keyCode === VIESSMANN.key_up || event.keyCode === VIESSMANN.key_left || event.keyCode === VIESSMANN.key_right)),
			bEnter: (!event.altKey && event.keyCode === VIESSMANN.key_enter),
			oTarget: VIESSMANN.getTarget( event )
		}
		return obj;
	},
	// Normalize tabindex attribute
	nTabindex: function() {
		return ( document.body && document.body.tabIndex === 0 ) ? 'tabIndex' : 'tabindex';
	},
	// Force screen reader buffer update
	updateBuffer: function() {
		if ( jQuery( '#bufferUpdater' ).length === 0 ) {
			jQuery( '#page' ).append( '<form><input type="hidden" value="" id="bufferUpdater" /></form>' );
		}
		jQuery( '#bufferUpdater' ).val( Math.random() );
	},

	// Return the event target element, not a text node
	getTarget: function( event, resolveTextNode ) {
		if (!event) return false;
		var t = event.target || event.srcElement;
		return t;
	},
	
	// Set URI hash
	setHash: function( sHref ) {
		// Write hash
		if ( typeof window.location.hash !== 'undefined' ) {
			window.location.hash = sHref;
		} else {
			location.hash = sHref;
		}
		
		// Update IE<8 History
		if ( isBadIE ) {
			var iframe = jQuery( '#jquery-history-iframe' );
			if ( iframe.length === 0 ) {
				jQuery('<iframe id="jquery-history-iframe" style="display: none;"></iframe>').prependTo(document.body)[0];
			}
			iframe = document.getElementById( 'jquery-history-iframe' );
			// Create history entry
			iframe.contentWindow.document.open();
			iframe.contentWindow.document.close();
			iframe.contentWindow.document.location.hash = sHref;
		}
		return false;
	},
	// Added 10/12/07
	clearDelay: function() {
		clearInterval(VIESSMANN.delay);
		VIESSMANN.delay = '';
	},
	nextTab: function() {
		VIESSMANN.tabPointer = (VIESSMANN.tabPointer++ % VIESSMANN.allTabs.length) + 1;
		var sHref = '#t-'+VIESSMANN.tabPointer;
		if ( sHref !== '#' ) {
			sHref = jQuery( sHref.replace( /(#t-)(.*)/, "#ti-$2" ) );
			VIESSMANN.tabClick( '', sHref );
		}
	},
	
	startAutoRotation: function () {
		
		jQuery(document).everyTime(6000, VIESSMANN.nextTab, 0); // infinite timer, until stopAutoRotation is called
	},
	stopAutoRotation:function () {
		
		jQuery(document).stopTime();
	},

	/*****************************************************************************/
	/*  www.viessmann.cn erweitern und 
	/*  cn hint box hinzufuegen
	/*****************************************************************************/
	showCNPopupLayer:function () {
		var author = '';
		if(window.location.href.match(/\/author\//)) author = "/author";
		var popupLayer = '';
		popupLayer += '<div id="popupLayer">';
		popupLayer += '<button class="close clearfix" type="button">x</button>';
		popupLayer += '<a href="http://www.viessmann.cn/zh/service/kontakt/Local-partners.html"><img src="' + author + '/etc/medialib/internet-cn0/homepage_popupLayer.Par.18722.Image.direct.gif"></a>';
		popupLayer += '</div>';
		
		jQuery('body.home').append(popupLayer);
		jQuery('#popupLayer').find('button.close').click( VIESSMANN.hideCNPopupLayer );
	},

	hideCNPopupLayer: function() {
		jQuery( '#popupLayer' ).fadeOut( 'fast' );
	}
}


jQuery.noConflict();

jQuery(document).ready(function() {
	VIESSMANN.init();
	VIESSMANN.startAutoRotation();

	// Hinweis fuer CN hinzufuegen
	if(window.location.href.match(/http:\/\/www.viessmann.cn\/$/) || window.location.href.match(/\/cn$/) || window.location.href.match(/\/cn\/zh_cn.html/)) {
		VIESSMANN.showCNPopupLayer();
	}
});

// Lazy load images
jQuery(window).load(function() {
	VIESSMANN.lazyLoadImages();
});
