// JavaScript Document
var categories; //A list of all the categories in the XML doc. 
var contentXmlHttp;
function loadGeneralContent(url)
{
	//alert("loadGeneralContent");
	if (window.XMLHttpRequest)
	{// code for IE7+, Firefox, Chrome, Opera, Safari
		contentXmlHttp=new XMLHttpRequest();
		contentXmlHttp.onreadystatechange=contentStateChange;
		contentXmlHttp.open("GET",url,true);
		contentXmlHttp.send();
	}
	else
	{// code for IE6, IE5
		contentXmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		contentXmlHttp.onreadystatechange=contentStateChange;
		contentXmlHttp.open("GET",url,true);
		contentXmlHttp.send();
	}
}

function contentStateChange()
{
	if (contentXmlHttp.readyState==4)
	{
		if (contentXmlHttp.status==200)
		{
			var resourcesHeader=document.getElementById("resourcesHeader");
			//var resourcesContainer=document.getElementById("resourcesContainer");
			//alert(resourcesHeader);
			//XML Document Element
			var docEle=contentXmlHttp.responseXML.documentElement
			
			//XML Categories
			categories=docEle.getElementsByTagName("category");
			
			//Add drop down menu for browsing resources by category
			//var form=buildElement("form",resourcesHeader,"");
			var selectDropDown=buildElement("select",resourcesHeader,"id,categories");
			selectDropDown.onchange=function(){displayFilteredResources(this.options[this.selectedIndex].value)};
			
			//Add an "All" option
			var menuItem=buildElement("option",selectDropDown,("value,All"));
			menuItem.innerHTML="All (Unordered)";
			//menuItem.onmouseup=function(){displayFilteredResources(this.value)};
			
			//Populate resources drop down. 
			for (var i=0;i<categories.length;i++)
			{
				var name=categories[i].getAttribute("name");
				var menuItem=buildElement("option",selectDropDown,("value,"+name));
				menuItem.innerHTML=name;
				//menuItem.onmouseup=function(){displayFilteredResources(this.value)};
			}
			
			displayFilteredResources("All");
		}
	}
}

/*
Filters the items to be displayed and created an array of XML item elements that are passed to
addCategoryResource where they are added to the page. 
*/
function displayFilteredResources(filterString)
{
	//alert(categories);
	//alert(filterString);
	var resourcesContainer=document.getElementById("resourcesContainer");
	var collectedItems=new Array(); //An array of collected XML items to be displayed. 
	if (categories!=undefined)
	{
		if (filterString=="All")
		{
			//If it is set to all loop through and all all the items
			for (var i=0;i<categories.length;i++)
			{
				var items=categories[i].getElementsByTagName("item");
				for (var ii=0;ii<items.length;ii++)
				{
					//alert((items[ii].getElementsByTagName("name")).length);
					//collectedItems.push((items[ii].getElementsByTagName("name"))[0]);
					collectedItems.push(items[ii]);
				}
			}
			//Randomize
			var unorderedCollectedItems=new Array()
			while (collectedItems.length>0)
			{
				var int=Math.floor(Math.random()*collectedItems.length);
				unorderedCollectedItems.push(collectedItems[int]);
				collectedItems.splice(int,1);
			}
			addCategoryResource(unorderedCollectedItems);
			//addCategoryResource(collectedItems);
		}else
		{
			//If a specific category is selected then add just that category
			for (var i=0;i<categories.length;i++)
			{
				var name=categories[i].getAttribute("name");
				if (name==filterString)
				{
					var items=categories[i].getElementsByTagName("item");
					for (var ii=0;ii<items.length;ii++)
					{
						//alert((items[ii].getElementsByTagName("name")).length);
						//collectedItems.push((items[ii].getElementsByTagName("name"))[0]);
						collectedItems.push(items[ii]);
					}
				}
			}
			//Sort alphabetically here
			collectedItems.sort(sortAZ);
			
			//Add the items to the resourcesContainer
			addCategoryResource(collectedItems);
		}
	}
}

/*
Reads the XML items and extracts the data from then and then bhuilds the new item for the resources page and adds it. 
*/
function addCategoryResource(items)
{
	//Delete the existing items
	deleteAllItems();
	
	//Get the container for the resource items and scroll it to the top. 
	var resourcesContainer=document.getElementById("resourcesContainer");
	resourcesContainer.scrollTop=0;
	
	//Loop through all the items that have been collected and add them to the resourcesContainer. 
	for (var i=0;i<items.length;i++)
	{
		var name=getTextNode((items[i].getElementsByTagName("name"))[0]);
		var type=getTextNode((items[i].getElementsByTagName("type"))[0]);
		var url=getTextNode((items[i].getElementsByTagName("link"))[0]);
		var description=getTextNode((items[i].getElementsByTagName("description"))[0]);
		
		//Build the items to be added to the HTML page. 
		var a=buildElement("a",resourcesContainer,("href,"+url+";target,_blank"));
		
		//Only add the link if the name has been defined. This will allow for empty entries to not show up. 
		if (name!=null && name!="")
		{
			var itemEle=buildElement("div",a,"class,resourcesContainer");
			itemEle.innerHTML=name;
			
			//Color the back ground using the color listed in the category. 
			var color=(items[i].parentNode.getAttribute("color"));
			if (color!=null)
			{
				itemEle.style.backgroundColor=color;
			}
			
			//Add the event handler here to call the popUpMessage on mouseOver
				//The event handler needs to be added to the itemEle if it will work with IE and Safari.
			itemEle.onmouseover=(function(){createPopUpMessage(this)});
			itemEle.onmouseout=(function(){removePopUpMessage()});
			
			//Create hidden data to be used for popUpMessage
			var nameEle=buildElement("div",itemEle,"class,hidden;id,name");
			nameEle.innerHTML=name;
			var typeEle=buildElement("div",itemEle,"class,hidden;id,type");
			typeEle.innerHTML=type;
			var urlEle=buildElement("div",itemEle,"class,hidden;id,url");
			urlEle.innerHTML=url;
			var descriptionEle=buildElement("div",itemEle,"class,hidden;id,description");
			descriptionEle.innerHTML=description;
		}
	}
}

function deleteAllItems()
{
	var resourcesContainer=document.getElementById("resourcesContainer");
	deleteAllElements(resourcesContainer);
}

/*******************************
Sorts the resource items into alphabetical order. 
*******************************/
function sortAZ(a,b)
{
	var lowerA=getTextNode((a.getElementsByTagName("name"))[0]).toLowerCase();
	var lowerB=getTextNode((b.getElementsByTagName("name"))[0]).toLowerCase();
	if (lowerA<lowerB){return -1};
	if (lowerA>lowerB){return 1};
	return 0;
}














