// DO NOT REMOVE THE COMMENT BLOCK BELOW THIS LINE //
/*global TT: false, window: false, document: false, setInterval: false, $: false*/
// DO NOT REMOVE THE COMMENT BLOCK ABOVE THIS LINE //


// Create the main namespace
var TT = TT || {};

/**
 * The history class is in charge of the browser
 * history and URL's.
 */
TT.history = {};

/** */
TT.history.previousHash = '';
TT.history.hashCheckInterval = -1;

TT.history.stack = [];

/**
 * 
 */
TT.history.initialize = function() {
	if (TT.history.supportsHistoryPushState()) {
		$(window).bind("popstate", TT.history.onHistoryChanged);
	} else {
		TT.history.hashCheckInterval = setInterval(TT.history.onCheckHash, 200);
	}
};

/**
 * Check for history.pushState support.
 */
TT.history.supportsHistoryPushState = function() {
	return ('pushState' in window.history) && window.history.pushState !== null;
};

/**
 * Called at an interval for browsers that do not support
 * the history API. Checks if the hash has changed and issues 
 * a navigation if so.
 */
TT.history.onCheckHash = function() {
	if (document.location.hash !== TT.history.previousHash) {
		TT.history.navigateToPath(document.location.hash.slice(1));
		TT.history.previousHash = document.location.hash;
	}
};

/**
 * 
 */
TT.history.pushState = function(url) {
	if ( TT.history.supportsHistoryPushState() ) {
		window.history.pushState('', '', url);
	} else {
		TT.history.previousHash = '#' + url;
		document.location.hash = url;
	}
	
	// Google Analytics tracking
	// TT.track(url);
	
	TT.history.stack.push(url);
	
	//$('#pagination-next p.thing span').text( element.parent().index() + 1 );
	//$('#pagination-next p.number span').text( $( "#pages section.current" ).index() + 1 );
};

/**
 * 
 */
TT.history.onHistoryChanged = function( event ) {
	if (TT.history.supportsHistoryPushState()) {
		TT.history.navigateToPath(document.location.pathname);
	}
};

/**
 * 
 */
TT.history.navigateToPath = function( pathname ) {
	TT.navigation.hideTableOfContents();
	
	// Extract the path name parts
	var part1 = pathname.split("/")[1]; // The article ID or home/credits
	var part2 = pathname.split("/")[2]; // The page number
	
	if(!part1 || part1 == TT.history.HOME) {
		TT.navigation.goToHome(true);
	} else if(part1 == TT.history.CREDITS) {
		TT.navigation.goToCredits(true);
	} else if(part1 == TT.history.TABLE_OF_CONTENTS) {
		TT.navigation.showTableOfContents(true);
	} else {
		if(part1) {
			if(part2) {
				TT.navigation.goToPage(part1, part2, true);
			} else {
				TT.navigation.goToPage(part1, "1", true);
			}
		}
	}
};
