var browseRequester = null;
var browseRequesterTimeout = null;

var bannerRefresh = false;

var ARTICLE_TYPE_SCREENSHOTS = 3;

function updateContentList(typeID, platformID)
{
	if (typeID == ARTICLE_TYPE_SCREENSHOTS)
	{
		window.location = "/galleries.php?platform=" + platformID;
	}
	else
	{
		window.location = "/articlesPlatform/" + typeID + "/" + platformID;
	}
}

function showHideChild(event)
{
	if (!event)
	{
		var event = window.event;
	}
	
	//Start at the <a> and work down to the <li>
	if (event.srcElement)
	{
		var root = event.srcElement.parentNode;
	}
	else
	{
		var root = event.target.parentNode;
	}
		
	//Cycle through the children of the <a> tag's parent (<li>)
	if (root.hasChildNodes())
	{	
		var children = root.childNodes;
		for (var i = 0; i < children.length; i++)
		{
			//We only care about <ul> tags
			if (children[i].tagName && children[i].tagName.toLowerCase() == "ul")
			{
				if (children[i].style.display.toLowerCase() == "block")
				{
					children[i].style.display = "none";
				}
				else
				{
					children[i].style.display = "block";
				}
			}
		}
	}
	
	showHideUncheckAll(true);
}

function uncheckAll(event)
{
	var element = document.getElementById("leftNavigationGames");
	if (element)
	{
		var checkboxes = element.getElementsByTagName("input");
		for (var i = 0; i < checkboxes.length; i++)
		{
			checkboxes[i].checked = false;
		}
	}
	
	hideTree();
	showHideUncheckAll(false);
	
	updateBrowseItems();
}

function hideTree()
{
	var element = document.getElementById("leftNavigationGames");
	if (element)
	{
		var uls = element.getElementsByTagName("ul");
		for (var i = 0; i < uls.length; i++)
		{
			uls[i].style.display = "none";
		}
	}
}

function showTreeBranch(root)
{
	//Cycle through the children of the <li>
	if (root && root.hasChildNodes())
	{	
		if (root.parentNode && root.parentNode.parentNode)
		{
			//We want to show the enitre tree if we are deep in it
			showTreeBranch(root.parentNode.parentNode);
		}
		
		var children = root.childNodes;
		for (var i = 0; i < children.length; i++)
		{
			//We only care about <ul> tags
			if (children[i].tagName && children[i].tagName.toLowerCase() == "ul")
			{
				children[i].style.display = "block";
			}
		}
	}
}

function showHideUncheckAll(show)
{
	var element = document.getElementById("leftNavigationGames");
	if (element)
	{
		//Find the image tags - this would be just the uncheck image
		var images = element.getElementsByTagName("img");
		for (var i = 0; i < images.length; i++)
		{
			if (show)
			{
				images[i].style.display = "block";
			}
			else
			{
				images[i].style.display = "none";
			}
		}
	}
}

function findBrowseFilter()
{
	var filter = "";
	
	var root = document.getElementById("leftNavigationGames");	
	if (root)
	{
		var checkboxes = root.getElementsByTagName("input");
		for (var i = 0; checkboxes && i < checkboxes.length; i++)
		{
			if (checkboxes[i].checked)
			{
				filter += checkboxes[i].id + ",";
			}
		}
	}

	return filter;
}

function populateCheckboxes(filter)
{
	var elementIDs = filter.split(',');
	if (elementIDs.length > 0)
	{
		for (var i = 0; i < elementIDs.length; i++)
		{
			var checkbox = document.getElementById(elementIDs[i]);
			if (checkbox)
			{
				checkbox.checked = true;
				
				if (checkbox.parentNode && checkbox.parentNode.parentNode && checkbox.parentNode.parentNode)
				{				
					showTreeBranch(checkbox.parentNode.parentNode.parentNode);
				}
			}
		}
		
		showHideUncheckAll(true);
	}
}

function showOrHideMainContentElements(show)
{
	var contentModifier = "none";
	var browseModifier = "block";
	if (show)
	{
		contentModifier = "block";
		browseModifier = "none";
	}
	
	var contentElement = document.getElementById("content");
	if (contentElement)
	{
		contentElement.style.display = contentModifier;
	}
	
	var articleElement = document.getElementById("article");
	if (articleElement)
	{
		articleElement.style.display = contentModifier;
	}
	
	var browseElement = document.getElementById("browse");
	if (browseElement)
	{
		browseElement.style.display = browseModifier;
	}
}

function updateBrowseItems()
{
	getBrowseItemsTimeout();
	
	var filter = findBrowseFilter();
	
	if (filter != "")
	{		
		getBrowseItems(filter);
	}
	else
	{
		showOrHideMainContentElements(true);
	}
}

//Does the actual HTTP request to fetch the browse content
function getBrowseItems(filter)
{
	if (browseRequester != null && browseRequester.readyState != 0 && browseRequester.readyState != 4)
	{
		return;
	}
	
	try
	{
		browseRequester = new XMLHttpRequest();
	}
	catch (error)
	{
		try
		{
			browseRequester = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (error)
		{
			try
			{
				browseRequester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error)
			{
				browseRequester = null;
			}
		}
	}

	if (browseRequester != null)
	{
		showLoadingBar();
		
		browseRequester.open("GET", "/games.php?filter=" + encodeURIComponent(filter), true);		
		browseRequester.onreadystatechange = gotBrowseItems;
		
		browseRequesterTimeout = setTimeout(getBrowseItemsTimeout, 5000);		
		browseRequester.send(null);
	}
}

function gotBrowseItems()
{
	if (browseRequester == null || browseRequester.readyState != 4)
		return;
	
	if (browseRequesterTimeout != null)
	{
		clearTimeout(browseRequesterTimeout);
		browseRequesterTimeout = null;
	}
	
	var browseElement = document.getElementById("browse");
	if (browseElement && browseRequester.status == 200)
	{
		showOrHideMainContentElements(false);
		
		browseElement.innerHTML = browseRequester.responseText;
		
		browseRequester = null;
		browseRequesterElement = null;
		
		if (bannerRefresh)
		{
			if (window.frames['bannerTop'])
			{
				window.frames['bannerTop'].location = "http://banner.atomicgamer.com/telefragged/front.html";
			}
			
			if (window.frames['bannerFeatures'])
			{
				window.frames['bannerFeatures'].location = "http://banner.atomicgamer.com/telefragged/default300.html";
			}
			
			if (window.frames['bannerSideLeft'])
			{
				window.frames['bannerSideLeft'].location = "http://banner.atomicgamer.com/telefragged/default600.html";
			}
		}
		
		bannerRefresh = !bannerRefresh;
	}
	else
	{
		browseRequester = null;		
	}

	hideLoadingBar();
}

function getBrowseItemsTimeout()
{
	if (browseRequester != null)
	{
		browseRequester.abort();
		browseRequester = null;
	}

	if (browseRequesterTimeout != null)
	{
		clearTimeout(browseRequesterTimeout);
		browseRequesterTimeout = null;
	}
	
	hideLoadingBar();
}

function showLoadingBar()
{
	var loading = document.getElementById("leftNavigationLoading");
	if (loading)
	{
		loading.style.display = "block";
	}	
}

function hideLoadingBar()
{
	var loading = document.getElementById("leftNavigationLoading");
	if (loading)
	{
		loading.style.display = "none";
	}	
}
