// JavaScript Document
/*
History:
	Aug 30 2010: 
		Added pubDate to news items. 

Todo:
	The below is a php script that might solve the problem of loading XML files from out side this domain. 
	 <?php
		$filestring = file_get_contents($filename);
		//Or this more specificly. 
		$filestring = file_get_contents($_GET['url']);
		//Print the contents. 
		print $filestring;
	?> 
	
	

Bugs:
*/

var NewsXmlHttp;
function loadNewsContent(url)
{
	if (window.XMLHttpRequest)
	{// code for IE7+, Firefox, Chrome, Opera, Safari
		NewsXmlHttp=new XMLHttpRequest();
		NewsXmlHttp.onreadystatechange=NewsStateChange;
		NewsXmlHttp.open("GET",url,true);
		NewsXmlHttp.send();
	}
	else
	{// code for IE6, IE5
		NewsXmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		NewsXmlHttp.onreadystatechange=NewsStateChange;
		NewsXmlHttp.open("GET",url,true);
		NewsXmlHttp.send();
	}
}

function NewsStateChange()
{
//	alert("readyState"+NewsXmlHttp.readyState);
//	alert("status"+NewsXmlHttp.status);
	if (NewsXmlHttp.readyState==4)
	{
		if (NewsXmlHttp.status==200)
		{
			var browserName=navigator.appName; //"Microsoft Internet Explorer"
			//Process News
			var newsHeader=document.getElementById("newsHeader");
			var newsContainer=document.getElementById("newsContainer");
			
			//Document Element
			var docEle=NewsXmlHttp.responseXML.documentElement
			
			//Get the channel information. 
			var channel=docEle.getElementsByTagName("channel");
			
			var channelTitle=getTextNode(channel[0].getElementsByTagName("title")[0]);
			var channelLink=getTextNode(channel[0].getElementsByTagName("link")[0]);
			var channelDescription=getTextNode(channel[0].getElementsByTagName("description")[0]);
			newsHeader.innerHTML=channelTitle;
			
			var a=buildElement("a",newsHeader,"href,newsContent.xml;target,_blank");
			var rss=buildElement("div",newsHeader,"class,newsRssLink");
			rss.innerHTML="RSS Feed:"
			var img=buildElement("img",a,"src,images/rssFeed20.png;class,newsRssLink");
			
			//Get the news items. 
			var items=docEle.getElementsByTagName("item");
			//alert(items.length);
			for (var i=0;i<items.length;i++)
			{
				var titleText=getTextNode(items[i].getElementsByTagName("title")[0]);
				var pubDate=getTextNode(items[i].getElementsByTagName("pubDate")[0]);
				var linkText=getTextNode(items[i].getElementsByTagName("link")[0]);
				var descriptionText=getTextNode(items[i].getElementsByTagName("description")[0]);
				
				//Add a link if there is one. 
				//Reset a to undefined. 
				var a=undefined;
				if (linkText!="")
				{
					//Add the title bar if there is a link. 
					var a=buildElement("a",newsContainer,("href,"+linkText));
					a.setAttribute("target","_blank");
					var newsTitleDiv=buildElement("div",a,"class,newsTitle");
					newsTitleDiv.onmouseover=newsTitleOver;
					newsTitleDiv.onmouseout=newsTitle;
				}else
				{
					//Add the title bar if there is no link. 
					var newsTitleDiv=buildElement("div",newsContainer,"class,newsTitle");
					//newsTitleDiv.innerHTML=titleText;
				}
				//Add the title
				newsTitleDiv.innerHTML=titleText;
				
				//Add link image. 
				if (a!=undefined){buildElement("img",newsTitleDiv,"src,images/link.png;class,newsLinkImage")};

				//Add the pubDate
				if (pubDate!="")
				{
					//Need to filter the date here. 
					var pdAr=pubDate.split(" ");
					dateDiv=buildElement("div",newsTitleDiv,"class,newsPubDate")
					if (pdAr.length>=4)
					{
						dateDiv.innerHTML=(pdAr[0]+" "+pdAr[1]+" "+pdAr[2]+" "+pdAr[3])
					}
				}
				
				//Add news Body
				var newsBody=buildElement("div",newsContainer,"class,newsBody");
				
				//Get the image element
				var imageEles=items[i].getElementsByTagName("image");
				//Set a default position. 
				var imagePos="top"
				
				//Test if there is one. 
				if (imageEles.length==1)
				{
					//Get the text node for the image. 
					var imageText=getTextNode(imageEles[0]);
					//If there is 
					//hasAttribute is not working in IE. 
//					var hasAttrib=imageEles[0].hasAttribute("pos");
					//This is here only because hasAttribute is failing in IE, when corrected it will be added back in. 
					var hasAttrib=true;
					//Test if the imageText exists and get the pos attribute if it exists. 
					if ((imageText!=undefined && imageText!="") && hasAttrib)
					{
						var imagePos=imageEles[0].getAttribute("pos");
						//This is needed because hasAttributes is failing in IE. Remove if error is corrected. 
						if (imagePos==null){imagePos="top"};
					}
				}
				
				//Set the news text and image. 
				switch(imagePos)
				{
					case "top":
					{
						//Add the image
						if (imageEles.length==1 && (imageText!=undefined && imageText!=""))
						{
							/*!!!
								This isn't working correctly when trying to center the image. The reason for this is
								that the image hasn't loaded yet so the imageContainer.style.width property can't be set
								correctly. 
							*/
							var imageContainer=buildElement("div",newsBody,"class,newsImageTop");
							imageContainer.setAttribute("id","newsImageContainer");
							var newsImage=buildElement("img",imageContainer,("src,"+imageText));
							//imageContainer.style.width=(newsImage.width+"px");
							newsImage.setAttribute("id","newsImage");
						}
						var newBodytext=buildElement("span",newsBody,"")
						newBodytext.innerHTML=descriptionText;
						break;
					}
					case "right":
					{
						//Add the image
						if (imageEles.length==1 && (imageText!=undefined && imageText!=""))
						{
							var newsImage=buildElement("img",newsBody,("src,"+imageText+";class,newsImageRight"));
						}
						var newBodytext=buildElement("span",newsBody,"")
						newBodytext.innerHTML=descriptionText;
						break;
					}
					case "bottom":
					{
						var newBodytext=buildElement("span",newsBody,"")
						newBodytext.innerHTML=descriptionText;
						//Add the image
						if (imageEles.length==1 && (imageText!=undefined && imageText!=""))
						{
							var imageContainer=buildElement("div",newsBody,"class,newsImageBottom");
							imageContainer.setAttribute("id","newsImageContainer");
							var newsImage=buildElement("img",imageContainer,("src,"+imageText));
							//imageContainer.style.width=(newsImage.width+"px");
							newsImage.setAttribute("id","newsImage");
						}
						break;
					}
					case "left":
					{
						//Add the image
						if (imageEles.length==1)
						{
							var newsImage=buildElement("img",newsBody,("src,"+imageText+";class,newsImageLeft"));
						}
						var newBodytext=buildElement("span",newsBody,"")
						newBodytext.innerHTML=descriptionText;
						break;
					}
					default:
					{
						var newBodytext=buildElement("span",newsBody,"")
						newBodytext.innerHTML=descriptionText;
						break;
					}
				}
				
				//Clear the floating image. 
				buildElement("div",newsBody,"class,clearBoth");
				
				//Add footer. 
				var div=buildElement("div",newsContainer,"class,newsSpacer");
			}
			
			//Was a try at setting the newsImageContainer width but the images are still not loaded. 
			//setNewsImageContainerWidths(newsContainer);
		}else
		{
			alert("Problem retrieving data:" + xmlhttp.statusText);
		}
	}
}

/*Function***********************************************
buildElement
Parameters:
eleName: 		String name of element ("div")
parentEle: 		Element that will be used as parent. 
attribString:	A string of attributes and values to be added. 
				Format: "class,value;id,value;useToolTip,function"
Returns:		New element.
***********************************************Function*/
//function buildElement(eleName,parentEle,attribString)
//{
//	//Create the element
//	var tag=document.createElement(eleName);
//	//Add attributes
//	if (attribString!=null && attribString!=undefined)
//	{
//		var strAr=attribString.split(";");
//		for (var i=0;i<strAr.length;i++)
//		{
//			var attribStr=strAr[i].split(",");
//			if (attribStr.length==2)
//			{
//				tag.setAttribute(attribStr[0],attribStr[1]);
//			}
//		}
//	}
//	
//	//Add to parent
//	if (parentEle!=null && parentEle!=undefined)
//	{
//		parentEle.appendChild(tag);
//	}
//	
//	return tag;
//}

function newsTitle(){this.setAttribute("class","newsTitle");}
function newsTitleOver(){this.setAttribute("class","newsTitleOver");}

//This still isn't working right in FF as there is one node that is returning nothing that I can't catch. 
//function getTextNode(tag)
//{
//	if (tag!=null && tag!=undefined)
//	{
//		for (var i=0;i<tag.childNodes.length;i++)
//		{
//			var data=tag.childNodes[i].nodeValue;
//			if (data!=null)
//			{
//				return data;
//			}
//		}
//	}
//	return "";
//}

/**********
Was supposed to set the width of the newsImageContainer but doesn't work as it is still being called 
prior to the images being loaded. 
**********/
function setNewsImageContainerWidths(rootEle)
{
	if (rootEle!=undefined && rootEle!=null)
	{
		var divTags=rootEle.getElementsByTagName("div");
		for (var i=0;divTags.length;i++)
		{
			if (divTags[i].getAttribute("id")=="newsImageContainer")
			{
				var newsImages=divTags[i].getElementsByTagName("img");
				divTags[i].style.width=(newsImages[0].width+"px");
			}
		}
	}
}









