function fetch_xml(feed_name, record_id, handler)
{
	var xhr; 

	try 
	{ 
		xhr = new ActiveXObject('Msxml2.XMLHTTP'); 
	}
	catch (e) 
	{
		try 
		{ 
			xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
		}
		catch (e2) 
		{
			try 
			{ 
				xhr = new XMLHttpRequest(); 
			}
			catch (e3) 
			{ 
				xhr = false; 
			}
		}
	}
	 
	xhr.onreadystatechange = function()
	{ 
		 if (xhr.readyState == 4)
		 {
			 if (xhr.status == 200) 
			 {
				handler(xhr.responseText);
			 }
			 else 
			 {
				alert("Error code " + xhr.status);
			 }
		}
	}; 

	xhr.open('GET', "/api/" + feed_name + ".php?id=" + record_id, true); 
	xhr.send(null); 

}

function fetch_review(review_id)
{
	fetch_xml('review_data', review_id, populate_review);
}

function fetch_news(news_id)
{
	fetch_xml('news', news_id, populate_news);
}

function parse_xml(xml)
{
	try //Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.load(xml);
	}
	catch (e)
	{
		try //Firefox, Mozilla, Opera, etc.
		{
			parser=new DOMParser();
			xmlDoc=parser.parseFromString(xml,"text/xml");
		}
		catch (e)
		{
			alert(e.message);
			return;
		}
	}

	return xmlDoc;
}

function assemble_full_view(paragraphs, images, author) 
{
	var html = '<p>' + paragraphs.join('</p><p>') + '</p>';

	if (images && images.length) 
	{
		for (i = 0; i < images.length; i++)
		{
			try 
			{
				html += '<span class="screenshot"><a href="#"><img class="gamepic" src="/screenshots/' + images[i].childNodes[0].nodeValue + '" alt="Screenshot"></a>';
			}
			catch(e) 
			{
				html += '<span class="gamepic"><a href="#"><img class="screenshot" src="/img/default/na.jpg" alt="Screenshot"></a>';
			}
		}
	}

	html += '<div class="line">&nbsp;</div>';
	html += '<span class="author">By ' + author + '</span>';

	return html;
}

function populate_review(xml)
{
	var xmlDoc = parse_xml(xml);

	try 
	{
		var review_box = document.getElementById('review' + xmlDoc.getElementsByTagName('id')[0].childNodes[0].nodeValue);
	} catch (e) { alert("Oops, an error occured. If this error persists, please report it as a bug."); return; }

	try 
	{
		// Paragraphs containing review text	
		var raw_paragraphs = xmlDoc.getElementsByTagName('paragraph');
		var paragraphs = Array();

		for (i = 0; i < raw_paragraphs.length; i++)
		{
			paragraphs.push(raw_paragraphs[i].childNodes[0].nodeValue);
		}
			
	} 
	catch (e) {}

	try
	{
		// Screenshots
		var images = xmlDoc.getElementsByTagName('screencap');
	}
	catch (e) {}

	var author = 'Unknown';

	try
	{
		author = xmlDoc.getElementsByTagName('author')[0].childNodes[0].nodeValue;
	}
	catch (e) {}

	var download_stripe = "";

	try
	{
		var url = xmlDoc.getElementsByTagName('filename')[0].childNodes[0].nodeValue;

		if (url.length) 
		{
			url = (url.indexOf("://") > -1) ? url : 'http://www.gamehipporedux.com/downloads/' + url;

			download_stripe = '<span class="download"><p><a href="' + url +
			'">DOWNLOAD (' + xmlDoc.getElementsByTagName('download_size')[0].childNodes[0].nodeValue + 
			')</a></p><!--<p>COMMENTS (38)</p>--></span>';
		}
	}
	catch(e) {}

	review_box.innerHTML = assemble_full_view(paragraphs, images, author) + download_stripe;

}

function populate_news(xml)
{
	xmlDoc = parse_xml(xml);

	try 
	{
		var news_box = document.getElementById('news' + xmlDoc.getElementsByTagName('id')[0].childNodes[0].nodeValue);
	}
	catch (e) {}

	try 
	{
		// Paragraphs containing review text	
		var news_text = xmlDoc.getElementsByTagName('text')[0].childNodes[0].nodeValue;
		var paragraphs = news_text.split('<br />');
	}
	catch (e) {}

	try
	{
		var author = xmlDoc.getElementsByTagName('author')[0].childNodes[0].nodeValue;
	}
	catch (e) {}

	news_box.innerHTML = assemble_full_view(paragraphs, '', author);
}


function showhide(review_id)
{
	if (document.getElementById)
	{
		var review_box = document.getElementById('review' + review_id);

		if (review_box.innerHTML == '')
		{
			fetch_review(review_id);
		}
		
		review_box.style.display = ( (review_box.style.display == 'none') ? 'block' : 'none' );
	}
}

function showhideNews(news_id)
{
	if (document.getElementById)
	{
		var news_box = document.getElementById('news' + news_id);

		if (news_box.innerHTML == '')
		{
			fetch_news(news_id);
		}
		
		news_box.style.display = ( (news_box.style.display == 'none') ? 'block' : 'none' );
	}
}
