var actions = {};

$(function() {	
	actions.common();
});

actions.common = function() 
{
	var i = 0, d = 1000, h = 750, ie = false;
	var elems = { 
			character : $('.character'),
			page : $('.page')
	};
	
	if( $.browser.msie ) {
		ie = parseInt( $.browser.version, 10 );
		$('html').addClass( 'ie' + ie );
	}
	
	if( ( !ie || ie > 7 ) && !doAnim )
	{
		doPageIn( elems );
	}
		
	$('.highlight').fadeOut(0);
	$('.media-item').hover( function() {
		$(this).find('.highlight').stop().fadeTo( 500, 1);
	}, function() {
		$(this).find('.highlight').stop().fadeTo( 500, 0);
	})
	
	$('.pagelink').click( function(e) { 
		if( !ie || ie > 7 )
		{
			doPageOut( elems, e );
		}
	});
	
	/*	$('.pagelink').click( function() {
			_gaq.push(['_trackEvent', $(this).attr('href'), 'clicked']);
		});
	*/

	$('.fancybox').fancybox({padding:0, titleShow:false, overlayColor:'#000'});	
	
	$('.iframe').attr({ href: function(i,val) { 
		return val + '/iview/true';
	}}).fancybox({ url: '/videos/videoplayer/iview/true', width:960, height:413, padding : 0, type: 'iframe', titleShow:false, overlayColor: '#000', onClosed:function() { bgStart();} });
	
	$('.iframe').click( function() {
		_gaq.push(['_trackEvent', 'Trailer', 'clicked']);
	});
	
	if( action )
	{
		actions[ action ]( ie );
	}
}

actions.entry = function( )
{
	preload( 2000, 671, ["/images/structure/bg_body.jpg"] );
	preload( 583, 732, ["/images/structure/bg_johnny.png"] );
	preload( 530, 431, ["/images/assets/trailer_thumb.png"] );
}

actions.home = function( ie ) 
{	
	$('.tooltip').each( function() {
		var w = ($(this).outerWidth() - 80) / 2;
		$(this).css('left', (-w)+'px').fadeOut(0);
	});
	$('.media-item').hover( function() {
		$(this).find('.tooltip').stop().delay(400).fadeTo( 500, 1);
	}, function() {
		$(this).find('.tooltip').stop().fadeTo( 500, 0);
	})
			
	var frame = $('#frame-index');
	
	if( doAnim && (!ie||ie>6) && frame.length) 
	{
		var page = $('.page').css( { opacity:1} );
		
		var johnny = $('#johnny').hide();
		var title = $('#title').hide();
		var cinemas = $('#cinemas').hide();
		var width = $('#main').css('width');
		var header = $('#header').hide();
		var tagline = $('#tagline').hide();
		var countdown = $('#countdown').hide();
		var digits = countdown.find('.digit').hide();
		var facebook = $('#facebook').hide();
		var features = $('#features').slideUp(0);
		var academy = $('#spyacademy').hide();
		var trailer = $('#trailer').hide().css({height:'0px',width:'0px',marginLeft:'255px',marginTop:'160px',overflow:'hidden'});
	}
	
	$('#cover').delay( 2000 ).fadeOut( 2000, function() {
		if( doAnim && (!ie||ie>6) && frame.length) {
			johnny.fadeIn( 1200, function() {
				cinemas.delay(500).fadeIn( 1200 );
				title.fadeIn( 1200, function() {
					header.fadeIn( 1400 );
					tagline.fadeIn( 1400, function() {
						countdown.fadeIn( 1900, function() {
							
							digits.each( function() {
								$(this).fadeIn( 1000 );
							});
							
							$.post('/home/viewedanim', { 'viewed': true} );
							
							facebook.delay( 300).fadeIn( 1500 );
							academy.delay( 300).fadeIn( 1500 );
						});
					});
					
					$('#footer').fadeIn();
					features.delay(1500).slideDown( 2000, 'easeOutBounce' );
					trailer.delay(400).show()
					.animate( {height:'327px',width:'510px',marginLeft:'0',marginTop:'0'}, 2000, 'easeInOutQuint' );					
				});
			});
		} else {
			$.post('/home/viewedanim', { 'viewed': true} );
		}
		
		$('#cover').remove();
	});
	
	preload( 421, 706, ["/images/structure/bg_kate.png"] );
	preload( 408, 965, ["/images/structure/bg_pamela.png"] );
	preload( 529, 714, ["/images/structure/bg_tucker.png"] );
	
	preload( 742, 363, ["/images/structure/bg_trailer.png"] );
	preload( 595, 391, ["/images/structure/bg_about.png"] );
	preload( 864, 493, ["/images/structure/bg_gallery.png"] );
	preload( 596, 485, ["/images/structure/bg_downloads.png"] ); 
	
	preload( 831, 487, ["/images/structure/bg_about_wide.png"] );
	preload( 473, 271, ["/images/structure/buddyicons.png"] );
}

function doPageIn( elems )
{	
	var page = elems.page ? elems.page.length ? elems.page : null : null;
	var character = elems.character ? elems.character.length ? elems.character : null : null;
	
	if( character && page )
	{
		var left = character.css('left');
		var width = character.css('width');
		var leftoffset = -( character.offset().left + parsePX( left ) + ( parsePX( width ) * 2 ) );
	
		var right = page.css('right');
		var rightoffset = -( page.offset().left + page.outerWidth() );
			
		character.css( { left: leftoffset, opacity: 1} ).data( 'offset', leftoffset );
		page.css( { right: rightoffset, opacity:1} ).data( 'offset', rightoffset );

		var anims = [
		             	{ target: page, vals : { right: 0 } },
		             	{ target: character, vals : { left: left } }
		            ];
	
		doAnimations( anims );
	}
	else if( page )
	{
		page.css('opacity', 0);
		var anim = { target: page, vals : { opacity: 1 } };
		doAnimation( anim );         
	}	
}	

function doPageOut( elems, e )
{
	e.preventDefault();
	
	var page = elems.page ? elems.page.length ? elems.page : null : null;
	var character = elems.character ? elems.character.length ? elems.character : null : null;
	
	var pagecallback = function( ) { window.location.href = e.currentTarget.href; };
	
	if( character && page )
	{
		var characteroffset = character.data('offset');
		
		var pageoffset = page.data('offset');		
		var anims = [ 
		              { target: page, vals : { right: pageoffset }, length: 500, callback: pagecallback },
		              { target: character, vals: { left: characteroffset}, length: 500 } 
		            ];
	
		doAnimations( anims );
	}
	else if( page )
	{
		var anim = { target: page, vals : { opacity: 0 }, length: 500, callback: pagecallback };
		doAnimation( anim );         
	}
}

function doAnimations( anims )
{
	var index = anims.length;
	while( index-- )
	{
		doAnimation( anims[ index ] );
	}
}

function doAnimation( anim )
{
	var defaultAnim = { target:null, vals : {}, length : 1000, easing: 'easeInOutQuint', callback : function() { }, delay : 0 };
	
	anim = $.extend( defaultAnim, anim );
	
	if( anim.target )
	{
		// Sort things out for IE
		if( $.browser.msie ) 
		{
			for( v in anim.vals )
			{
				if( anim.vals[ v ] == "auto" ) anim.vals[ v ] = 0;
			}
		}
		
		anim.target.delay( anim.delay ).animate( anim.vals, anim.length, anim.easing, anim.callback );
	}
}
	
function parsePX( val )
{
	// Get integer from pixel value
	return parseInt( val.substr( 0, val.indexOf('p' ) ) );
}

function preload( width, height, images ) {
	
	//preload array of images
	
	var imageObjs = [];
	if( !width ) width = 896;
	if( !height ) height = 580;
	
	for( k = 0; k < images.length; k++ ) {
		imageObjs[k] = new Image(width,height);
		imageObjs[k].src = images[k];
	}
}	
	
