
function shuffle( rgArray )
{
	for ( var i = 0; i < rgArray.length; i++ )
	{
		var newIdx = parseInt( Math.random() * ( rgArray.length - i ) + i );
		if ( newIdx != i )
		{
			var tmp = rgArray[newIdx];
			rgArray[newIdx] = rgArray[i];
			rgArray[i] = tmp;
		}
	}
	
	return rgArray;
}

var g_rgUserSaleInfo = {};

function UpdateSaleCookie()
{
	document.cookie = 'rgUserSaleInfo=' + Object.toJSON( g_rgUserSaleInfo ) + '; path=/';
}

function GetSaleCookie()
{
	var rgMatches = document.cookie.match( /(^|; )rgUserSaleInfo=([^;]*)/ );
	var obj = false;
	if ( rgMatches )
		eval( 'var obj = ' + rgMatches[2] );
	return obj;
}

var page=0;
Event.observe(window, 'load', function () {

    var rgDailyPages = [];
    var rgPublisherPages = [];
    var rgNavOffsets = [];

    for (var i = 0; i < rgPages.length; i++) {
        rgPages[i].left = $('page_' + i + '_left');
        rgPages[i].leftContent = $('page_' + i + '_left_content');
        rgPages[i].right = $('page_' + i + '_right');
        rgPages[i].rightContent = $('page_' + i + '_right_content');

        rgNavOffsets.push(rgPages[i].nav_offset);

        if (rgPages[i].type == 'daily' && !rgPages[i]['is_index']) {
            rgDailyPages.push(i);
        }
        else if (rgPages[i].type == 'publisher' && !rgPages[i]['is_index']) {
            rgPublisherPages.push(i);
        }
    }

    var rgSaleCookie = GetSaleCookie();
    var nLastViewedPage = 0;
    if (rgSaleCookie.clusterid == g_clusterid
				&& rgSaleCookie.rgDailyPages && rgSaleCookie.rgDailyPages.length == rgDailyPages.length
				&& rgSaleCookie.rgPublisherPages && rgSaleCookie.rgPublisherPages.length == rgPublisherPages.length) {
        g_rgUserSaleInfo = rgSaleCookie;
        rgDailyPages = rgSaleCookie.rgDailyPages;
        rgPublisherPages = rgSaleCookie.rgPublisherPages;
        nLastViewedPage = rgSaleCookie.page;
    }
    else {
        rgDailyPages = shuffle(rgDailyPages);
        rgPublisherPages = shuffle(rgPublisherPages);
    }


    g_rgUserSaleInfo.clusterid = g_clusterid;
    g_rgUserSaleInfo.rgDailyPages = rgDailyPages;
    g_rgUserSaleInfo.rgPublisherPages = rgPublisherPages;
    UpdateSaleCookie();

    rgPagesOrig = rgPages;
    rgPages = [];
    for (var dailyIdx = 0, publisherIdx = 0, i = 0; i < rgPagesOrig.length; i++) {
        if (rgPagesOrig[i].type == 'daily') {
            if (rgPagesOrig[i]['is_index'])
                rgPages.push(rgPagesOrig[i]);
            else
                rgPages.push(rgPagesOrig[rgDailyPages[dailyIdx++]]);
        }
        else if (rgPagesOrig[i].type == 'publisher') {
            if (rgPagesOrig[i]['is_index'])
                rgPages.push(rgPagesOrig[i]);
            else
                rgPages.push(rgPagesOrig[rgPublisherPages[publisherIdx++]]);
        }
        else {
            rgPages.push(rgPagesOrig[i]);
        }
        rgPages[rgPages.length - 1].nav_offset = rgNavOffsets[rgPages.length - 1];
    }

    Event.observe($('BookPeekLeft'), 'mouseover', OnMouseMovePeekLeft);
    Event.observe($('BookPeekLeft'), 'mouseout', OnMouseOutPeekLeft);
    Event.observe($('BookPeekLeft'), 'mousedown', function (e) { e.stop(); FlipLeft(); });

    Event.observe($('BookPeekRight'), 'mouseover', OnMouseMovePeekRight);
    Event.observe($('BookPeekRight'), 'mouseout', OnMouseOutPeekRight);
    Event.observe($('BookPeekRight'), 'mousedown', function (e) { e.stop(); FlipRight(); });

    var page = 0;
    if (nLastViewedPage && nLastViewedPage < rgPages.length)
        page = nLastViewedPage;
    else if (window.location.hash) {
        var pageid = window.location.hash.substring(1);

        for (var i = 0; i < rgPages.length; i++) {
            if (rgPages[i].pageid == pageid) {
                page = i;
                break;
            }
        }
    }

    LoadImages(page);
    rgPages[page].left.show();
    rgPages[page].right.show();
    SetPage(page);
});

var PEEK_DURATION = 0.2;

var g_bMouseOverPeekRight = false;
var g_bInPeekRight = false;
var g_bHidingPeekRight = false;

var g_bMouseOverPeekLeft = false;
var g_bInPeekLeft = false;
var g_bHidingPeekLeft = false;


var g_bInTransition = false;
var g_rgPeekTransitions = false;

function CancelPeekTransitions()
{
	if ( g_rgPeekTransitions )
	{
		for ( var i = 0; i < g_rgPeekTransitions.length; i++ )
			g_rgPeekTransitions[i].cancel();
		g_rgPeekTransitions = false;
	}
}

function CleanupPeek()
{
	if ( g_bInPeekRight || g_bHidingPeekRight )
	{
		CancelPeekTransitions();
		var oldpage = rgPages[page];
		var newpage = rgPages[page+1];
		newpage.left.hide();
		newpage.right.hide();
		newpage.right.style.width = '0px';
		newpage.left.style.left = '-5px';
		newpage.left.style.width = '470px';
		g_bInPeekRight = false;
		g_bHidingPeekRight = false;
	}
	if ( g_bInPeekLeft || g_bHidingPeekLeft )
	{
		CancelPeekTransitions();
		var oldpage = rgPages[page];
		var newpage = rgPages[page-1];
		newpage.left.hide();
		newpage.right.hide();
		newpage.right.style.width = '0px';
		newpage.right.style.left = ''
		newpage.left.style.left = '-5px';
		g_bInPeekLeft = false;
		g_bHidingPeekLeft = false;
	}
}

function OnMouseMovePeekRight( event )
{
	g_bMouseOverPeekRight = true;
	if ( g_bInTransition )
		return;
	
	if ( page < rgPages.length - 1 )
	{
		var oldpage = rgPages[page];
		var newpage = rgPages[page+1];
		
		var nPeekAmount = 30;
		
		if ( !g_bInPeekRight || g_bHidingPeekRight )
		{
			LoadImages( page + 1 );
			CancelPeekTransitions();
			if ( g_bHidingPeekRight )
			{
				g_bHidingPeekRight = false;
			}
			if ( g_bInPeekLeft || g_bHidingPeekLeft )
				CleanupPeek();
			
			var oldleft = oldpage.left;
			var oldright = oldpage.right;
			var newleft = newpage.left;
			var newright = newpage.right;
	
			oldleft.style.zIndex = 100;
			oldright.style.zIndex = 200;
			newleft.style.zIndex = 250;
			newright.style.zIndex = 225;
			
			newleft.style.left = '940px';
			newleft.style.width = '0px';
			newright.style.width = '0px';
	
			anchorRight( newpage.rightContent );
			anchorLeft( oldpage.rightContent );
			
			var shadow = newleft.down('.page_shadow_left');
			shadow.show();
			shadow.style.opacity=1;

			var shadow_trailing = newright.down('.page_shadow_trailing_right');
			shadow_trailing.show();
			shadow_trailing.style.opacity=1;
	
			newleft.show();
			newright.show();
			g_rgPeekTransitions = [ 
			          		     new Effect.Morph( newpage.left, {style: 'left: 880px; width: 30px', duration: PEEK_DURATION } ),
			          		     new Effect.Morph( newpage.right, {style: 'width: 30px', duration: PEEK_DURATION * .6 } )
			          		    ];
			g_bInPeekRight = true;
		}
	}
	else
	{
		CleanupPeek();
	}
}

function OnMouseMovePeekLeft( event )
{
	g_bMouseOverPeekLeft = true;
	if ( g_bInTransition )
		return;
	
	if ( page > 0 )
	{
		var oldpage = rgPages[page];
		var newpage = rgPages[page-1];
		
		var nPeekAmount = 30;
		
		if ( !g_bInPeekLeft || g_bHidingPeekLeft )
		{
			LoadImages( page - 1 );
			CancelPeekTransitions();
			if ( g_bHidingPeekLeft )
			{
				g_bHidingPeekLeft = false;
			}
			if ( g_bInPeekRight || g_bHidingPeekRight )
				CleanupPeek();
			
			var oldleft = oldpage.left;
			var oldright = oldpage.right;
			var newleft = newpage.left;
			var newright = newpage.right;

			oldleft.style.zIndex = 100;
			oldright.style.zIndex = 100;
			newleft.style.zIndex = 200;
			newright.style.zIndex = 300;

			newright.style.width='0px';
			newright.style.left='0px';
			newleft.style.width='0px';

			anchorRight( newpage.rightContent );
			anchorLeft( oldpage.rightContent );

			var shadow = newright.down('.page_shadow_right');
			shadow.show();
			shadow.style.opacity=1;

			var shadow_trailing = newleft.down('.page_shadow_trailing_left');
			shadow_trailing.show();
			shadow_trailing.style.opacity=1;
	
			newleft.show();
			newright.show();
			g_rgPeekTransitions = [ 
			          		     new Effect.Morph( newpage.right, {style: 'left: 30px; width: 30px', duration: PEEK_DURATION } ),
			          		     new Effect.Morph( newpage.left, {style: 'width: 30px', duration: PEEK_DURATION * .6 } )
			          		    ];
			g_bInPeekLeft = true;
		}
	}
	else
	{
		CleanupPeek();
	}
}

function OnMouseOutPeekRight( event )
{
	g_bMouseOverPeekRight = false;
	if ( g_bInPeekRight && !g_bHidingPeekRight )
	{
		CancelPeekTransitions();
		var oldpage = rgPages[page];
		var newpage = rgPages[page+1];

		g_rgPeekTransitions = [ 
		          		     new Effect.Morph( newpage.left, {style: 'left: 940px; width: 0px', duration: PEEK_DURATION } ),
		          		     new Effect.Morph( newpage.right, {style: 'width: 0px', duration: PEEK_DURATION * 1.5, afterFinish: CleanupPeek } )
		          		    ];
		g_bHidingPeekRight = true;
	}
}

function OnMouseOutPeekLeft( event )
{
	g_bMouseOverPeekLeft = false;
	if ( g_bInPeekLeft && !g_bHidingPeekLeft )
	{
		CancelPeekTransitions();
		var oldpage = rgPages[page];
		var newpage = rgPages[page-1];

		g_rgPeekTransitions = [ 
		          		     new Effect.Morph( newpage.right, {style: 'left: -5px; width: 0px', duration: PEEK_DURATION } ),
		          		     new Effect.Morph( newpage.left, {style: 'width: 0px', duration: PEEK_DURATION * 1.5, afterFinish: CleanupPeek } )
		          		    ];
		g_bHidingPeekLeft = true;
	}
}

function LoadImages( iPage )
{
	if ( iPage < rgPages.length )
	{
	    var page = rgPages[iPage];
		if ( !page.leftContent.style.backgroundImage )
		{
			page.leftContent.style.backgroundImage = 'url( ' + page.imgurl + ')';
			$('preloader').src = page.imgurl;
		}
		if ( !page.rightContent.style.backgroundImage )
		{
			page.rightContent.style.backgroundImage = 'url( ' + page.imgurl + ')';
		}
	}
}

function anchorLeft( elem )
{
	//elem.style.left = '0px';
	//elem.style.right = '';
}
function anchorRight( elem )
{
	elem.style.left = '';
	elem.style.right = '5px';
}

var FLIP_DURATION = .75;

function FlipTo( pagenum ) {
	if ( pagenum < page )
	{
		FlipLeftTo( pagenum );
	}
	else if ( pagenum > page )
	{
		FlipRightTo( pagenum );
	}
}

function FlipToPage( pageid )
{
	for ( var i = 0; i < rgPages.length; i++ )
	{
		if ( rgPages[i].pageid == pageid )
		{
			FlipTo( i );
			break;
		}
	}
}

function FlipToPageAndScroll( pageid )
{
	FlipToPage( pageid );
	if ( $('book_ctn').cumulativeOffset()[1] < window.scrollY )
	{
		Effect.ScrollTo( $('main_content'), { } );
	}
}

function FlipRight()
{
	FlipRightTo( page+1 );
}

function FlipRightTo( pagenum ) {
	if ( g_bInTransition || page >= rgPages.length - 1 || page == pagenum ) return;
	LoadImages( pagenum );
	var oldpage = rgPages[page];
	var newpage = rgPages[pagenum];
	
	var oldleft = oldpage.left;
	var oldright = oldpage.right;
	var newleft = newpage.left;
	var newright = newpage.right;

	oldleft.style.zIndex = 100;
	oldright.style.zIndex = 200;
	newleft.style.zIndex = 250;
	newright.style.zIndex = 225;


	if ( !g_bInPeekRight || pagenum != page + 1 )
	{
		CleanupPeek();
		newleft.style.left = '940px';
		newleft.style.width = '0px';
		newright.style.width = '0px';
	}
	else
	{
		CancelPeekTransitions();
		g_bInPeekRight = false;
		g_bHidingPeekRight = false; 
	}

	anchorRight( newpage.rightContent );
	anchorLeft( oldpage.rightContent );

	//leave this on for book spine effect...
    var shadow = newleft.down('.page_shadow_left');
	shadow.show();
	shadow.style.opacity=1;
	window.setTimeout( function() { if ( Prototype.Browser.IE) { shadow.hide(); } else { new Effect.Fade( shadow, { duration: FLIP_DURATION * 0.25 } ); } }, FLIP_DURATION * 0.75 * 1000 );

	var shadow_trailing = newright.down('.page_shadow_trailing_right');
	shadow_trailing.show();
	shadow_trailing.style.opacity=1;
	if ( Prototype.Browser.IE )
		window.setTimeout( function() { shadow_trailing.hide() }, FLIP_DURATION * 1000 );
	else
		new Effect.Fade( shadow_trailing, { duration: FLIP_DURATION, transition: Effect.Transitions.linear } );


	newleft.show();
	newright.show();
	g_bInTransition = true;
	new Effect.Morph( newleft, { style: 'width: 470px; left: -5px;', duration: FLIP_DURATION, afterFinish: function() {oldleft.hide(); oldright.hide(); g_bInTransition = false; if ( g_bMouseOverPeekRight ) OnMouseMovePeekRight(); } } );
	new Effect.Morph( newright, {style: 'width: 470px;', duration: FLIP_DURATION * 0.7, afterFinish: function() {oldright.hide(); oldright.style.width = '470px'; } } );
	SetPage( pagenum );
	LoadImages( page + 1 );
}

function FlipLeft()
{
	FlipLeftTo( page - 1 );
}

function FlipLeftTo( pagenum )
{
	if ( g_bInTransition || page <= 0 || page == pagenum ) return;
	LoadImages( pagenum );
	var oldpage = rgPages[page];
	var newpage = rgPages[pagenum];
	
	var oldleft = oldpage.left;
	var oldright = oldpage.right;
	var newleft = newpage.left;
	var newright = newpage.right;
	oldleft.style.zIndex = 100;
	oldright.style.zIndex = 100;
	newleft.style.zIndex = 200;
	newright.style.zIndex = 300;


	if ( !g_bInPeekLeft || pagenum != page - 1 )
	{
		CleanupPeek();
		newright.style.width='0px';
		newright.style.left='0px';
		newleft.style.width='0px';
	}
	else
	{
		CancelPeekTransitions();
		g_bInPeekLeft = false;
		g_bHidingPeekLeft = false; 
	}

	anchorRight( newpage.rightContent );
	anchorLeft( oldpage.rightContent );
	
	//leave this on for book spine effect...
    var shadow = newright.down('.page_shadow_right');
	shadow.show();
	shadow.style.opacity=1;
	window.setTimeout( function() { new Effect.Fade( shadow, { duration: FLIP_DURATION * 0.25 } ); }, FLIP_DURATION * 0.75 * 1000 );

	var shadow_trailing = newleft.down('.page_shadow_trailing_left');
	shadow_trailing.show();
	shadow_trailing.style.opacity=1;
	if ( Prototype.Browser.IE )
		window.setTimeout( function() { shadow_trailing.hide() }, FLIP_DURATION * 1000 );
	else
		new Effect.Fade( shadow_trailing, { duration: FLIP_DURATION, transition: Effect.Transitions.linear } );
		
	newleft.show();
	newright.show();
	g_bInTransition = true;
	new Effect.Morph( newright, { style: 'width: 470px; left: 470px;', duration: FLIP_DURATION, afterFinish: function() {oldleft.hide(); oldright.hide(); newright.style.left = ''; g_bInTransition = false; if ( g_bMouseOverPeekLeft ) OnMouseMovePeekLeft();} } );
	new Effect.Morph( newleft, {style: 'width: 470px;', duration: FLIP_DURATION * 0.8 } );
	SetPage( pagenum );	
}

function SetPage( pagenum )
{
	page = pagenum;
	
	if ( page + 1 < rgPages.length )
		LoadImages( page + 1 );
	if ( page > 0 )
		LoadImages( page - 1 );
	
	g_rgUserSaleInfo.page = page;
	UpdateSaleCookie();
	
	var navpos = rgPages[page].nav_offset;
	//new Effect.Morph( $('nav_activepage'), { style: 'left: ' + navpos + 'px', duration: FLIP_DURATION } );
	$('nav_activepage').style.left = navpos + 'px';
}

function SetCartButtonStates( rgCartItems )
{
	for ( var i = 0; i < rgCartItems.length; i++ )
	{
		ToggleCartIcon( rgCartItems[i] );
	}
}

function ToggleCartIcon( packageid )
{
	var elemAddToCart = $('add_to_cart_' + packageid );
	var elemInCart = $('in_cart_' + packageid );
	if ( elemAddToCart && elemInCart )
	{
		elemAddToCart.hide();
		elemInCart.show();
	}
}

function CancelClick( event )
{
	if ( !event ) var event = window.event;
	
	event.cancelBubble = true;
	if ( event.stopPropagation ) event.stopPropagation();
}

var g_bAddToCartInFlight = false;
function AddToCartAJAX( packageid )
{
	if ( g_bAddToCartInFlight )
		return false;
	$('add_to_cart_' + packageid ).hide();
	new Ajax.Request( 'http://store.steampowered.com/cart/addtocart/', {
		method: 'post',
		parameters: {action: 'add_to_cart', subid: packageid},
		onSuccess: function( transport ) {
			g_bAddToCartInFlight = false;
			if ( transport.responseJSON )
			{
				ToggleCartIcon( packageid );
				IncrementCartItemCount();
			}
			else
			{
				alert( 'SORRY, WE COULDN\'T ADD YOUR ITEM!' );
				$('add_to_cart_' + packageid ).show();
			}
		},
		onFailure : function() {
			g_bAddToCartInFlight = false;
			alert( 'SORRY, WE COULDN\'T ADD YOUR ITEM!' );
			$('add_to_cart_' + packageid ).show();
		}
	});
	return false;
}

function IncrementCartItemCount()
{
	$('cart_item_count_value').update( parseInt( $('cart_item_count_value').innerHTML ) + 1 );
	$('store_header_cart_btn').show();
}




/* clock */

var g_nextSaleLocalTime;
var g_bEnded = false;
var g_bTriggeredRefresh = false;

var g_clockImages = new Array;
for ( var i = 0 ; i < 10; i++ )
{
	g_clockImages[i] = new Image;
	g_clockImages[i].src = '/images/Tutorials/BookScroll/' + i + '.png';
}

function refreshClock()
{
	var timeCur = Math.round( new Date().getTime() / 1000 );
	var secsRemaining = g_nextSaleLocalTime - timeCur;

	if ( secsRemaining < 0 )
	{
		if ( !g_bEnded )
		{
			g_bEnded = true;
			Event.observe( document, 'focus', refreshPage );
			Event.observe( document, 'mousemove', refreshPage );
		}
		return;
	}

	var remainHours = Math.floor( secsRemaining / 3600 );
	setClock( 'hour_ten', Math.floor( remainHours / 10 ) );
	setClock( 'hour_one', remainHours % 10 );

	var remainMinutes = Math.floor( ( secsRemaining % 3600 ) / 60 );
	setClock( 'minute_ten', Math.floor( remainMinutes / 10 ) );
	setClock( 'minute_one', remainMinutes % 10 );

	var remainSeconds = secsRemaining % 60;
	setClock( 'second_ten', Math.floor( remainSeconds / 10 ) );
	setClock( 'second_one', remainSeconds % 10 );		
}

function refreshPage()
{
	if ( !g_bTriggeredRefresh )
	{
		g_bTriggeredRefresh = true;
		window.location = window.location;
	}
		
}

function setClock( id, val )
{
	$(id).src = g_clockImages[val].src;
}

