// JavaScript Document


//OBJECTS

//objects inside the RSS2Item object
function RSS2Enclosure(encElement)
{
	if (encElement == null)
	{
		this.url = null;
		this.length = null;
		this.type = null;
	}
	else
	{
		this.url = encElement.getAttribute("url");
		this.length = encElement.getAttribute("length");
		this.type = encElement.getAttribute("type");
	}
}

function RSS2Guid(guidElement)
{
	if (guidElement == null)
	{
		this.isPermaLink = null;
		this.value = null;
	}
	else
	{
		this.isPermaLink = guidElement.getAttribute("isPermaLink");
		this.value = guidElement.childNodes[0].nodeValue;
	}
}

function RSS2Source(souElement)
{
	if (souElement == null)
	{
		this.url = null;
		this.value = null;
	}
	else
	{
		this.url = souElement.getAttribute("url");
		this.value = souElement.childNodes[0].nodeValue;
	}
}

//object containing the RSS 2.0 item
function RSS2Item(itemxml)
{
	//required
	this.title;
	this.link;
	this.description;

	//optional vars
	this.author;
	this.comments;
	this.pubDate;

	//optional objects
	this.category;
	this.enclosure;
	this.guid;
	this.source;

	var properties = new Array("title", "link", "description", "author", "comments", "pubDate");
	var tmpElement = null;
	for (var i=0; i<properties.length; i++)
	{
		tmpElement = itemxml.getElementsByTagName(properties[i])[0];
		if (tmpElement != null)
			eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
	}

	this.category = new RSS2Category(itemxml.getElementsByTagName("category")[0]);
	this.enclosure = new RSS2Enclosure(itemxml.getElementsByTagName("enclosure")[0]);
	this.guid = new RSS2Guid(itemxml.getElementsByTagName("guid")[0]);
	this.source = new RSS2Source(itemxml.getElementsByTagName("source")[0]);
}

//objects inside the RSS2Channel object
function RSS2Category(catElement)
{
	if (catElement == null)
	{
		this.domain = null;
		this.value = null;
	}
	else
	{
		this.domain = catElement.getAttribute("domain");
		this.value = catElement.childNodes[0].nodeValue;
	}
}

//object containing RSS image tag info
function RSS2Image(imgElement)
{
	if (imgElement == null)
	{
	this.url = null;
	this.link = null;
	this.width = null;
	this.height = null;
	this.description = null;
	}
	else
	{
		imgAttribs = new Array("url","title","link","width","height","description");
		for (var i=0; i<imgAttribs.length; i++)
			if (imgElement.getAttribute(imgAttribs[i]) != null)
				eval("this."+imgAttribs[i]+"=imgElement.getAttribute("+imgAttribs[i]+")");
	}
}

//object containing the parsed RSS 2.0 channel
function RSS2Channel(rssxml)
{
	//required
	this.title;
	this.link;
	this.description;

	//array of RSS2Item objects
	this.items = new Array();

	//optional vars
	this.language;
	this.copyright;
	this.managingEditor;
	this.webMaster;
	this.pubDate;
	this.lastBuildDate;
	this.generator;
	this.docs;
	this.ttl;
	this.rating;

	//optional objects
	this.category;
	this.image;

	var chanElement = rssxml.getElementsByTagName("channel")[0];
	var itemElements = rssxml.getElementsByTagName("item");

	for (var i=0; i<itemElements.length; i++)
	{
		Item = new RSS2Item(itemElements[i]);
		this.items.push(Item);
		//chanElement.removeChild(itemElements[i]);
	}

	var properties = new Array("title", "link", "description", "language", "copyright", "managingEditor", "webMaster", "pubDate", "lastBuildDate", "generator", "docs", "ttl", "rating");
	var tmpElement = null;
	for (var i=0; i<properties.length; i++)
	{
		tmpElement = chanElement.getElementsByTagName(properties[i])[0];
		if (tmpElement!= null)
			eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
	}

	this.category = new RSS2Category(chanElement.getElementsByTagName("category")[0]);
	this.image = new RSS2Image(chanElement.getElementsByTagName("image")[0]);
}

//PROCESSES

//uses xmlhttpreq to get the raw rss xml
function getRSS()
{
	//call the right constructor for the browser being used
	if (window.ActiveXObject)
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest)
		xhr = new XMLHttpRequest();
	else
		alert("not supported");

	//prepare the xmlhttprequest object
	xhr.open("GET",document.rssform.rssurl.value,true);
	xhr.setRequestHeader("Cache-Control", "no-cache");
	xhr.setRequestHeader("Pragma", "no-cache");
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4)
		{
			if (xhr.status == 200)
			{
				if (xhr.responseText != null)
					processRSS(xhr.responseXML);
				else
				{
					alert("Failed to receive RSS file from the server - file not found.");
					return false;
				}
			}
			else
				alert("Error code " + xhr.status + " received: " + xhr.statusText);
		}
	}

	//send the request
	xhr.send(null);
}

function getRSSByURL(rssurl)
{
	//call the right constructor for the browser being used
	if (window.ActiveXObject)
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	else if (window.XMLHttpRequest)
		xhr = new XMLHttpRequest();
	else
		alert("not supported");

	//prepare the xmlhttprequest object
	//alert('Vleze');
	xhr.open( "GET", rssurl,true);
	xhr.setRequestHeader("Cache-Control", "no-cache");
	xhr.setRequestHeader("Pragma", "no-cache");
	xhr.onreadystatechange = function() {
	if (xhr.readyState == 4)
		{
			if (xhr.status == 200)
			{
				if (xhr.responseText != null)
					{
						processWeatherRSS(xhr.responseXML); 
					}
				else
				{
					alert("Failed to receive RSS file from the server - file not found.");
					return false;
				}
			}
			else
				alert("Error code " + xhr.status + " received: " + xhr.statusText);
		}
	}

	//send the request
	xhr.send(null);
}


//processes the received rss xml
function processRSS(rssxml)
{
	RSS = new RSS2Channel(rssxml);
	showRSS(RSS);
}

function processWeatherRSS(rssxml)
{
	RSS = new RSS2Channel(rssxml);
	showWeatherRSS(RSS);
}

//shows the RSS content in the browser

function chr (codePt) {

    if (codePt > 0xFFFF) { // Create a four-byte string (length 2) since this code point is high
                                             //   enough for the UTF-16 encoding (JavaScript internal use), to
                                             //   require representation with two surrogates (reserved non-characters
                                             //   used for building other characters; the first is "high" and the next "low")
        codePt -= 0x10000;
        return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
    }
    else {
        return String.fromCharCode(codePt);
    }
}

function showWeatherRSS(RSS)
{
	
	var img_lnk = RSS.items[0].description;
	img_lnk = img_lnk.substring( img_lnk.indexOf("<",0), img_lnk.indexOf(">",0)+1);
	img_lnk = img_lnk.replace(chr(34), "'");
	img_lnk = img_lnk.replace(chr(34), "'");

	var weather_condition = RSS.items[0].description;
	weather_condition = weather_condition.substring( weather_condition.indexOf(":",0) + 1, weather_condition.indexOf("<",0));

	document.getElementById("Meteo_condition").innerHTML = weather_condition;
	
	switch (img_lnk)
		{
			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/01_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_021.png' width='84' height='57' />"; break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/02_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_006.png' width='84' height='57' />"; break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/03_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_010.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/04_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_002.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/05_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_006.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/06_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_002.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/07_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_026.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/08_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_026.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/11_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_011.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/12_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_017.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/13_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_012.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/14_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_015.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/15_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_024.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/16_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_022.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/17_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_022.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/18_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_014.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/19_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_020.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/20_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_020.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/21_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_020.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/22_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_019.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/23_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_020.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/24_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_007.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/25_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_018.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/26_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_018.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/29_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_018.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/30_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_021.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/31_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_007.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/32_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_025.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/33_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_001.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/34_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_009.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/35_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_009.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/36_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_009.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/37_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_005.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/38_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_003.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/39_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_016.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/40_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_013.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/41_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_023.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/42_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_024.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/43_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_020.png' width='84' height='57' />";break;

			case "<img src='http://vortex.accuweather.com/phoenix2/images/common/icons/44_31x31.gif'>" :  document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_019.png' width='84' height='57' />";break;

			default: document.getElementById("Meteo_image").innerHTML = "<img src='images/weather_images/Weather_011.png' width='84' height='57' />";
		}
	
	return true;
}


function showRSS(RSS)
{
	//default values for html tags used
	var imageTag = "<img id='chan_image'";
	var startItemTag = "<div id='item'>";
	var startTitle = "<div id='item_title'>";
	var startLink = "<div id='item_link'>";
	var startDescription = "<div id='item_description'>";
	var endTag = "</div>";

	//populate channel data
	var properties = new Array("title","link","description","pubDate","copyright");
	for (var i=0; i<properties.length; i++)
	{
		eval("document.getElementById('chan_"+properties[i]+"').innerHTML = ''");
		curProp = eval("RSS."+properties[i]);
		if (curProp != null)
			eval("document.getElementById('chan_"+properties[i]+"').innerHTML = curProp");
	}

	//show the image
	document.getElementById("chan_image_link").innerHTML = "";
	if (RSS.image.src != null)
	{
		document.getElementById("chan_image_link").href = RSS.image.link;
		document.getElementById("chan_image_link").innerHTML = imageTag
			+" alt='"+RSS.image.description
			+"' width='"+RSS.image.width
			+"' height='"+RSS.image.height
			+"' src='"+RSS.image.url
			+"' "+"/>";
	}

	//populate the items
	document.getElementById("chan_items").innerHTML = "";
	for (var i=0; i<RSS.items.length; i++)
	{
		item_html = startItemTag;
		item_html += (RSS.items[i].title == null) ? "" : startTitle + RSS.items[i].title + endTag;
		item_html += (RSS.items[i].link == null) ? "" : startLink + RSS.items[i].link + endTag;
		item_html += (RSS.items[i].description == null) ? "" : startDescription + RSS.items[i].description + endTag;
		item_html += endTag;
		document.getElementById("chan_items").innerHTML += item_html;
	}

	//we're done
	//document.getElementById("chan").style.visibility = "visible";
	return true;
}

var xhr;


