/**
 * Project: Mobile Sessions 2009
 * Customer: Häberlein & Mauerer / Sony Ericsson
 * 
 * Javascripts for homepage
 * 
 * @author Patrick Kaiser <pk@okapi.de> & Andreas Prockl <ap@okapi.de>
 * @version 1.0
 *
 */


// Global Vars
var globalConfig;
var restorePositionFooter;
var scrollTimeout;
var ie6scrollTimeout;
var globalConfig = {
		postionFooter: 1,
		posFooterFirstTime: 1
};


function restorePositionFooter()
{
	globalConfig.postionFooter = 1;
	onWindowScroll();
};

function onWindowScroll(){
	clearTimeout(scrollTimeout);
	scrollTimeout = setTimeout(positionFooter, 100);
	
	// ie6 abfrage
	var fixIsNeeded = function() {
		return ( (Browser.Engine.name == "trident" && Browser.Engine.version == 4) );
	};
	if (fixIsNeeded()){
		clearTimeout(ie6scrollTimeout);
		ie6scrollTimeout = setTimeout(positonIe6TopNavi, 100);
	}
}

/*
 * Positions the site initially in the middle (Home)
 * Defines Scroll-Targets (Blog, Battle, Home) to scroll
 * 
 */
var positionSite = function( whereTo )
{
	/*
	 * Determine Screen Width
	 */
	var screen_width = Window.getWidth();	
	
	/*
	 * Set Default Positions
	 */
	var city_blog = {
		x: 0,
		width: 920
	};
	var home = {
		x: 904,
		width: 1100
	};
	var battle = {
		x: 2040,
		width: 920
	};
	
	switch( whereTo )
	{
		case 'blog':
			var new_x = city_blog.x;
			break;
		
		case 'battle':
			var new_x = battle.x;
			break;
			
			
		case 'home':
		default:
			if( screen_width > home.width )
				var new_x = home.x - ((screen_width - home.width) / 2) + 50;
			else var new_x = home.x;
			break;
	}
	
	/*
	 * Scroll with effect-transition
	 */
	globalConfig.postionFooter = 0;
	var scroller = new Fx.Scroll(window, { wait: true, duration: 800, transition: Fx.Transitions.Circ.easeOut }); // was  Quad.easeInOut
	scroller.start( new_x, Window.getScrollTop() );
	setTimeout( restorePositionFooter, 800);
};


/*
 * Takes care of positioning the footer
 * dependend on window size and scrolling position
 */
function positionFooter()
{
	if( !globalConfig.postionFooter )
		return false;
	/*
	 * Footer Element
	 */
	var footer_el = $('footer_home_inner');
	
	/*
	 * Determine Screen Width
	 */
	var screen_width = Window.getWidth();
	
	/*
	 * Determine Footer-Content Width + Position
	 */
	var footer_content_width = footer_el.getWidth();
	var footer_content_x_postion = footer_el.getScrollLeft();
	
	/*
	 * Determine offset
	 */
	var offset = screen_width - footer_content_width;
	
	/*
	 * New Position
	 */
	if( offset > 10 )
		var new_offset = Window.getScrollLeft() + (offset/2);
	else 
		var new_offset = Window.getScrollLeft() + 10;
	
	/*
	 * Differenciate first function call and all afterwards
	 */
	if( globalConfig.posFooterFirstTime != 1 )
	{
		//Configure + do the Tween
		var tween_options = {
			wait: true,
			duration: 600,
			transition: Fx.Transitions.Sine.easeInOut
		};	
		var tween = new Fx.Tween( footer_el, tween_options );
		tween.start( 'left', new_offset );
	}
	// first call
	else
	{
		footer_el.setStyle('left', new_offset);
		
		var myFadeIn = new Fx.Morph(footer_el, {'duration': 400, transition: Fx.Transitions.Sine.easeOut });
		myFadeIn.start({
			'opacity': 1
		});	
		
		globalConfig.posFooterFirstTime = 0;
	}
};


function positonIe6TopNavi( firstTime )
{
	// Determine Elements
	var homenav_btn_ms_el = $$('#navbar_home #btn_ms')[0];
	var homenav_menu_el = $$('#navbar_home .menu')[0];
	
	//Determine Screen Width & Position
	var screen_width = Window.getWidth();
	var window_xpos = Window.getScrollLeft();
	var menu_width = homenav_menu_el.getWidth();
	
	//Determine offset
	
	var menu_newX = window_xpos + ( screen_width / 2 ) - ( menu_width / 2 );
	var msbtn_newX = window_xpos;
	
	/*
	 * New Position
	 */
	homenav_btn_ms_el.setStyle('left', msbtn_newX);
	homenav_menu_el.setStyle('left', menu_newX);
	
	// positionierung LoginBox nach beendeter Animation
	setTimeout( posLoginBox, 800);
}


/*
 * Positions the Top & Bottom - Navigation on Window-Resize-Event (Homepage)
 * additionally cennters the Top Navigation except the MobileSessions Logo-Button
 * 
 */

function posLoginBox(){
	// wenn die LoginButton ist vorhanden ist
	if( $('btn_login') )
	{
		var e_loginBox = $('navbar_login_section');
		var num_LiMarginLeft = 23;
		var num_LoginBtn_x = $('btn_login').getPosition().x;
		var num_NewLogBox_x = num_LiMarginLeft + num_LoginBtn_x;
		
		// Fallunterscheidung IE7
		if (Browser.Engine.name == "trident" && Browser.Engine.version == 5)
		{
			var num_LoginBtnOffsetX = Math.abs( ( Window.getScroll().x ) - num_LoginBtn_x );
			var num_NewLogBox_x = num_LoginBtnOffsetX + num_LiMarginLeft;
		}
		
		// Positioniere LoginBox
		e_loginBox.setStyle('left', num_NewLogBox_x);
	}
}


function posTopNavi( firstTime )
{
	// wenn auf der homepage...
	if( $$('#navbar_home .menu').length > 0 ){
		
		// Variablen Deklaration
		var num_LiMarginLeft = 23;
		var homeTopNavi = $$('#navbar_home .menu')[0];		
		var naviSizeX = homeTopNavi.getWidth() + num_LiMarginLeft;
		var stageSizeX = Window.getWidth();
		var minDistanceLeft = 130;
		var ie7check = '';
				
		if (Browser.Engine.name == "trident" && Browser.Engine.version == 5)
		{
			var ie7check = 'leiderja';
		}
		
		var naviNewX = ( stageSizeX / 2 ) - ( naviSizeX / 2 );
		//min-width-position
		if (naviNewX < minDistanceLeft)
		{
			naviNewX = minDistanceLeft;
		}
		
		if ( ie7check == 'leiderja' || firstTime )
		{
			// No Animation just Position
			homeTopNavi.setStyle('left', naviNewX);
		}
		else
		{
			// Animation zu neuen Zielkoordinaten
			var tween_opt_naviHome = {
				wait: true,
				duration: 600,
				transition: Fx.Transitions.Sine.easeInOut
			};
			var tweenNaviHome = new Fx.Tween(homeTopNavi, tween_opt_naviHome);
			tweenNaviHome.start('left', naviNewX);
		}
		
		// positionierung LoginBox nach beendeter Animation
		setTimeout( posLoginBox, 800);
	}
}


function centerTopNavi( firstTime ){
	
	//Fallunterscheidung IE6 oder alle anderen
	var fixIsNeeded = function() {
		return ( (Browser.Engine.name == "trident" && Browser.Engine.version == 4) );
	};
	
	if (fixIsNeeded())
	{
		positonIe6TopNavi(firstTime);
	}
	else
	{
		posTopNavi( firstTime );
	}
}


function onWindowResize() {
	positionFooter();
	centerTopNavi();
}


function initHomePage()
{	
	var footer_container = $('footer_home_inner');
	if( footer_container )
	{
		var myHide = new Fx.Tween(footer_container);
		myHide.set('opacity', '0');
	}
	
	positionSite();
	centerTopNavi('first-time');	
	
	window.addEvent('scroll', onWindowScroll );
	window.addEvent( 'resize', onWindowResize );
}


/*
 * Do this when DOM is ready
 */
window.addEvent('domready', function(){
	initHomePage();
});