var bgContainer 		= '#background';
var bgSelectorSwitch 	= false;
var bgMoveWrapper	 	= '#background #movewrap';
var bgScrollDuration 	= 75;

var bgCurrent			= false; 
var bgNew				= 0;

var bgAnimSelector		= 'swfani';
var bgAnim				= false;

var bgState 			= "pause";
var bgAnimType 			= "crossfade";
var bgAnimTime 			= 1;
var bgAnimEasing 		= 'linear';

var bgMouseMoveMargin	= 80;

//i; increment
//s: speed
//f: factor, doesnt change
//d: direction, changes form -1, 1
var bgMouseMove			= {x:0, y:0, ww:0, bw:0, l:0, i:0, s:0, f:1, d:1};

var fanTimer 			= false;
var fanX				= 0;

function initBackgrounds()
{
	if(!$('body').hasClass('mobile'))
	{
		$('body').css('overflow', 'hidden');
	}
	toggleFansActivity(true);
		
	if($('#'+bgAnimSelector).size() > 0)
	{
		bgAnim = $('#'+bgAnimSelector);
	}

	if(bgMouseMoveMargin > 0 && $('.mobile').size() == 0)
	{
		$('body').mousemove(function(e){onBackgroundMouseOver(e);});
	}
	var bg = $(bgMoveWrapper+' > img');
	if(bg.size() > 0)
	{
		bgCurrent = $(bgMoveWrapper+' img:first');
		if(bgCurrent && bgCurrent.size() > 0)
		{
			//console.log("add first load listener");
			bgCurrent.load(function(){onBackgroundLoaded($(this));});
			initHomepageVideo();
		}
	}
}

////////////////
// FANS
////////////////

function toggleFansActivity(b)
{
	if($('.fan').size() > 0)
	{
		if(b && !fanTimer)
		{
			fanTimer = setInterval("onRotateFans()", 60);
		}
		else if(!b && fanTimer)
		{
			clearTimeout(fanTimer);
			fanTimer = false;
		}
	}
}

function positionFans(bgW, winW, winH, resize)
{
	if($('.fan').size() > 0)
	{
		$('.fan').height(winH-650);
		if(resize)
		{
			$('.fan').css('left', ((bgW-winW)/2)+winW-200);
		}
	}
}

function onRotateFans()
{
	fanX-= 150;
	if(fanX == -750)
	{
		fanX = 0;
	}	
	$('.fan .fanblades').css('background-position', fanX+'px 0');
}

//////////////////////////
//VIDEO/AUDIO TOGGLE FUNC
///////////////////////////

function toggleActiveMediaItem(play)
{
	if(play=='music')
	{
		$('#content .mejs-controls .mejs-pause').trigger('click');
	}
	else if(play=='mediaele')
	{
		handleMusicFunc('stop');
	}
}

////////////////
//AUDIO
////////////////

function activateMusicPlayerControls()
{
	//console.log("activateMusicPlayerControls");
	$('#soundControls').html('<span class="label">Music</span><a href="#" id="soundOn">On</a>/<a href="#" id="soundOff" class="selected">Off</a>');
	$('#soundControls a').click(function(){
		var id = $(this).attr('id');
		if(id == "soundOn")
		{
			handleMusicFunc('play');
			toggleActiveMediaItem('music');
		}
		else
		{
			handleMusicFunc('stop');
		}
		return false;
	});
}

function handleMusicFunc(func)
{
	$('#soundControls a').toggleClass('selected', false);
	if(func == "play")
	{
		$("#soundOn").toggleClass('selected', true);
	}
	else
	{
		$("#soundOff").toggleClass('selected', true);
	}
	doSwfMusic(func);
}

////////////////
//VIDEO
////////////////
var initVideo = false;

function initHomepageVideo()
{
	if($('#vid').size() > 0 && $('#vid video').mediaelementplayer != undefined)
	{
		if(!$('#vid').hasClass('embeded'))
		{
			//console.log("video init");
			$('#vid').toggleClass('embeded', true);
			$('#vid video').mediaelementplayer({defaultVideoWidth: 268,  defaultVideoHeight: 168, loop: true, features: ['playpause']});
			initVideo = setTimeout('isVideoPlayable()', 2000);
		}
		else
		{
			toggleVideoPlayer(true);
		}
	}
	else
	{
		//$('#vid video').hide();
	}
}

function isVideoPlayable()
{
	if($('#vid .me-cannotplay').size() != 0)
	{
		//if video not playable
		//console.log("video hide cannotplay");
		$('#vid').hide();
	}
	else
	{
		//if video is playable
		//console.log("video is playable");
		$('#vid .mejs-controls .mejs-pause').trigger('click');
		videoForcePlay();
	}
}

function toggleVideoPlayer(b)
{
	if($('#vid .me-cannotplay').size() == 0)
	{
		//if video is playable
		if(b)
		{
			//console.log("video show");
			$('#vid').css('z-index', '').css('bottom', '');
			videoForcePlay();
		}
		else
		{
			//console.log("video hide");
			if(initVideo){clearTimeout(initVideo);}
			$('#vid').css('z-index', -1).css('bottom', '-500px');
		}
	}
}

function videoForcePlay()
{
	if(!$('body').hasClass('mobile'))
	{
		$('#vid').focus();
		if($('#vid .mejs-controls .mejs-play').size() > 0)
		{
			//console.log("video trigger pause play");
			$('#vid .mejs-controls .mejs-pause').trigger('click');
			$('#vid .mejs-controls .mejs-play').trigger('click');
		}
		else if($('#vid .mejs-controls .mejs-play').size() > 0)
		{
			//console.log("video trigger play");
			$('#vid .mejs-controls .mejs-play').trigger('click');
		}
	}
}

//on media element played then turn of music
function onMediaElementPlayed()
{
	toggleActiveMediaItem('mediaele');
}

////////////////
//SET
////////////////

function setBackground(id, src)
{
	$('#movewrap').attr('class', 'page'+id);
	
	if(bgAnim)
	{
		bgAnim.css('visibility', 'visible');
		if(id!='1' && bgAnim && bgAnim.size() > 0)
		{
			bgAnim.css({'z-index':'-10', 'visibility': 'hidden'});
			toggleVideoPlayer(false);
		}
	}
	
	//add tile if needed
	$('.tile').css('z-index', -1);
	var bgTile = $('#tile'+id);
	if(bgTile.size() == 0)
	{
		bgTile = $('<div class="tile newTile" id="tile'+id+'"></div>');
		bgTile.hide();
		$(bgContainer).append(bgTile);
	}
	else if(!bgTile.hasClass('currentTile'))
	{
		bgTile.hide().toggleClass('newTile', true);
	}
	if(bgTile)
	{
		bgTile.css('z-index', 0);
	}
	
	var img = $(bgMoveWrapper+' #bg'+id);
	if(img.size() == 0)
	{
		//load background
		addBackground(id, src, true);
	}
	else if(img.css('display') == 'none')
	{
		//show this background
		bgNew = img;
		processBackgroundsPosition(bgNew);
		showNewBackground();
	}
}

//adds swf layer animation
function setBackgroundAnimations(id, html)
{
	if(id=='1')
	{
		if(!bgAnim || bgAnim.size() == 0)
		{
			bgAnim = $(html);
			$(bgMoveWrapper).append(bgAnim);
			initHomepageVideo();
		}
		else if(bgAnim.css('z-index') != '')
		{
			//if animation there
			//then play video and show animation
			bgAnim.css('z-index', '');
			toggleVideoPlayer(true);
		}
	}
}

//adds links to stage
function setExtra(html)
{
	if(html != '')
	{
		if($('#background .hotspot').size() == 0)
		{
			$(bgMoveWrapper).append(html);
		}
		else
		{
			$('#background .hotspot').show();
		}
	}
	else
	{
		$('#background .hotspot').hide();
	}
}

////////////////
//BG
////////////////

//adds new background
function addBackground(id, src, onLoad)
{
	var img = $('<img src="'+src+'" id="bg'+id+'" style="display:none" />');
	if(onLoad != undefined && onLoad)
	{
		bgNew = img;
		bgNew.load(function(){onBackgroundLoaded($(this));});
	}
	$('#pb'+id).remove();
	$(bgMoveWrapper).append(img);
}

function onBackgroundLoaded(img)
{
	if(!img.hasClass('loaded') && img.width() > 0)
	{
		//console.log("src:"+img.attr('src')+", loaded, width:"+img.width());
		img.unbind('load').toggleClass('loaded', true);
		
		processBackgroundsPosition(img);
		
		if(img.css('display') == 'none')
		{
			//fade in
			showNewBackground();
		}
		else
		{
			img.show();
			preloadBackgrounds();
		}	
	}
}

function showNewBackground()
{
	if(bgState != "playing")
	{
		var fadeOut = '#'+bgCurrent.attr('id');
		var fadeIn 	= '#'+bgNew.attr('id');
		if($('.newTile').size() > 0)
		{
			fadeOut+= ', .currentTile';
			fadeIn+= ', .newTile';
		}

		bgState = "playing";
		if(bgAnimType == 'swipe')
		{
			//$(carouseSelector+' .slider-holder').animate({"left":carouselCurrentPos+"px"}, bgAnimTime, bgAnimEasing, onBgShowComplete);
		}
		else if(bgAnimType == 'fade')
		{
			$(fadeOut).animate({"opacity":0}, bgAnimTime/2, bgAnimEasing,
				function(){
					$(this).hide().css('opacity', '');
					$(fadeIn).css('opacity', 0).show().animate({"opacity":1}, bgAnimTime/2, bgAnimEasing, onBgShowComplete);
				}
			);
		}
		else if(bgAnimType == 'crossfade')
		{
			$(fadeOut).animate({"opacity":0}, bgAnimTime/2, bgAnimEasing, function(){$(this).hide().css('opacity', '');});
			$(fadeIn).css('opacity', 0).show().animate({"opacity":1}, bgAnimTime/2, bgAnimEasing, function(){onBgShowComplete();});
		}
	}
}

function onBgShowComplete()
{
	bgState = "pause";
	bgCurrent = bgNew;
	bgCurrent.css('opacity', '');
	
	if($('.newTile').size() > 0)
	{
		$('.currentTile').toggleClass('currentTile', false);
		$('.newTile').toggleClass('newTile', false).toggleClass('currentTile', true).css('opacity', '');
	}
	preloadBackgrounds();
}

//preload other backgrounds
function preloadBackgrounds()
{
	//chekc to see if any backgrounds left to preload
	var pb = $(bgContainer+' .pb'); 
	if(pb.size() > 0)
	{
		pb.each(function(){
			addBackground(($(this).attr('id')).replace('pb', ''),  $(this).html(), false);
		});
	}
}

////////////////
//RESIZE
////////////////

//make sure visible background fits
function processBackgroundsPosition(img)
{
	var winW 	= $(window).width();
	var winH 	= $(window).height();	
	var bgW 	= 0;
	var cenX	= 0;
	var resize 	= true;
	
	if(winH < 810){winH = 810;}
	$('#background #movewrap').height(winH);
	
	if(img==undefined){img = bgCurrent; resize = false;}
	if(img)
	{
		bgW 	= img.width();
		cenX 	= (winW-bgW)/2;
		
		$(bgMoveWrapper).width(bgW);
		$(bgMoveWrapper).css('left', cenX);
		bgState = "positionning";
		setTimeout("onBackgroundPositioned()", 500);
	}
	
	var minH = 680;
	$('#background').css({bottom:40, height: ''});
	$('#footer').css('top', '');
	$('.fan').css('top', '0 !important;');
	if(winH < minH)
	{
		var top = -40-(winH-minH);
		var bottom = winH-minH+40;
		if(top > 0){top=0;}
		if(bottom > 0){bottom=0;}

		if($('body').hasClass('mobile'))
		{
			$('#footer').css('top', minH-45);
		}
		if(winH > minH)
		{
			$('#background').css({top:top, bottom:bottom, height:winH});
		}
		else
		{
			var pad = winH-(10+winH);
			$('#background').css({bottom:0, top:0, height: minH, 'padding-top': pad});
			winH = minH;
			$('.fan').css('top', (pad+70)+' !important;');
		}
	}
	
	positionFans(bgW, winW, winH, resize);
}

function onBackgroundPositioned()
{
	bgState = "pause";
}

function onBackgroundMouseOver(e)
{
	//that mean its a mouse move event
	bgMouseMove.x = e.pageX;
	bgMouseMove.y = e.pageY;
	checkBackgroundMove(e);
}

////////////////
//BG TWEEN
////////////////

//checks whether there is space for movement
function checkBackgroundMove(e)
{
	if((bgState == "pause" || bgState == "animating") && bgMoveWrapper)
	{
		if(bgState == "pause")
		{
			//always set the speed at zero intially
			bgMouseMove.s = 0;
		}
		
		bgMouseMove.ww = $(window).width();
		bgMouseMove.bw = bgCurrent.width();
		if(bgMouseMove.bw > bgMouseMove.ww)
		{
			//handles move
			handleBackgroundMove(e);
		}
	}
}

function handleBackgroundMove(e)
{
	//process the increment/direction of move
	processBackgroundMove();
	
	if(bgMouseMove.i == 0 && bgState == "animating")
	{
		//whatever situation where increment is false
		//then stop timer
		stopBackgroundMove();
	}
	else if((bgMouseMove.i > 0 || bgMouseMove.i < 0) && ((e==undefined && bgState == "animating") || bgState == "pause"))
	{
		//if increment
		//and theres no timer
		//or is timer and not a mouse event
		startBackgroundMove();
	}
}

function processBackgroundMove()
{
	var max = bgMouseMove.ww-bgMouseMove.bw;
	bgMouseMove.l = pixelToNum($(bgMoveWrapper).css('left'));
	bgMouseMove.d = 0;
	if(bgMouseMove.x < bgMouseMoveMargin && bgMouseMove.l < 0)
	{
		bgMouseMove.d = 1;
	}
	else if(bgMouseMove.x > bgMouseMove.ww-bgMouseMoveMargin && bgMouseMove.l > max)
	{
		bgMouseMove.d = -1;
	}
	bgMouseMove.i = bgMouseMove.f*bgMouseMove.d;
}

function startBackgroundMove()
{
	bgState = "animating";
	
	//stop animations
	doSwfAnimation('stop');
	toggleFansActivity(false);
	
	//calculate speed
	bgMouseMove.s = bgMouseMove.s+bgMouseMove.i;
	//console.log(bgMouseMove.s);
	
	//animate
	$(bgMoveWrapper).animate({left:bgMouseMove.l+bgMouseMove.s}, {duration: bgScrollDuration, easing: bgAnimEasing, step: carryOnBackgroundMove, complete: handleBackgroundMove});
	
	//increment speed
	bgMouseMove.s+= bgMouseMove.f*bgMouseMove.d;
}

function carryOnBackgroundMove(now, fx)
{
	processBackgroundMove();
	if(bgMouseMove.i == 0)
	{
		var l = pixelToNum($(bgMoveWrapper).css('left'));
		fx.now = l;
		fx.end = l;
	}
}

function stopBackgroundMove()
{
	bgState = "pause";
	doSwfAnimation('play');
	toggleFansActivity(true);
}

////////////////
// SWF ANI
////////////////

function doSwfMusic(func)
{
	if(bgAnim && bgAnim.size() > 0)
	{
		var a = getSwf();
		if(a)
		{
			if(func == 'play')
			{
				a.playMusic();
			}
			else if(func == 'stop')
			{
				a.stopMusic();
			}
		}
	}
}

function doSwfAnimation(func)
{
	if(bgAnim && bgAnim.size() > 0 && bgAnim.css('display') == 'block')
	{
		var a = getSwf();
		if(a)
		{
			if(func == 'stop')
			{
				a.stopAnimation();
			}
			else if(func == 'play')
			{
				a.playAnimation();
			}
		}
	}
}

function getSwf()
{
	var a = getSwfById(bgAnimSelector);
	if(a && typeof(a.stopAnimation) == 'function')
	{
		return a;
	}
	return false;
}

function getSwfById(id)
{
	var a = false;
	if (window.document[id]) 
	{
		a = window.document[id];
	}
	if(navigator.appName.indexOf("Microsoft Internet")==-1)
	{
		if (document.embeds && document.embeds[id])
		{
			a = document.embeds[id];
		}
	}
	else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
	{
		a = document.getElementById(id);
	}
	return a;
}



