/*
Author: Addam M. Driver
Date: 10/31/2006
*/

var sMax;	// Isthe maximum number of stars
var holder; // Is the holding pattern for clicked state
var preSet; // Is the PreSet value onces a selection has been made
var rated;
var reporting;

// Rollover for image Stars //
function rating(num){
	sMax = 0;	// Isthe maximum number of stars
	for(n=0; n<num.parentNode.childNodes.length; n++){
		if(num.parentNode.childNodes[n].nodeName == "A"){
			sMax++;	
		}
	}
	
	if(!rated){
		s = num.id.replace("_", ''); // Get the selected star
		a = 0;
		for(i=1; i<=sMax; i++){		
			if(i<=s){
				document.getElementById("_"+i).className = "on";
				document.getElementById("rateStatus").innerHTML = num.title;	
				holder = a+1;
				a++;
			}else{
				document.getElementById("_"+i).className = "";
			}
		}
	}
}

// For when you roll out of the the whole thing //
function off(me){
	if(!rated){
		if(!preSet){	
			for(i=1; i<=sMax; i++){		
				document.getElementById("_"+i).className = "";
				document.getElementById("rateStatus").innerHTML = me.parentNode.title;
			}
		}else{
			rating(preSet);
			document.getElementById("rateStatus").innerHTML = document.getElementById("ratingSaved").innerHTML;
		}
	}
}

// When you actually rate something //
function rateIt(me, picid){
	if(!rated){
		preSet = me;
		rated=1;
		process(me.id.replace("_", ''), picid);
		rating(me);
	}
}
function reportPic(pic)
{
reporting = 1;

// only continue if xmlHttp isn't void
if (xmlHttp)
	{
	// try to connect to the server
		try
		{
			// get the two values entered by the user
			//var firstNumber = document.getElementById("firstNumber").value;
			//var secondNumber = document.getElementById("secondNumber").value;
			// create the params string
			var params = "picid=" + pic;
			// initiate the asynchronous HTTP request
			xmlHttp.open("GET", "http://"+location.hostname+"/report.php?" + params, true);
			xmlHttp.onreadystatechange = handleRequestStateChange;
			xmlHttp.send(null);
		}
		// display the error in case of failure
		catch (e)
		{
			alert("Can't connect to server:\n" + e.toString());
		}
	}
}

function cancelRate(){
	if(rated){
		rated = 0;
		document.getElementById("rateStatus").innerHTML = "";
		for(i=1; i<=sMax; i++){		
				document.getElementById("_"+i).className = "";
		//		document.getElementById("rateStatus").innerHTML = me.parentNode.title;
		}
		holder = 0;
		sMax = 0;
		preSet = 0;
	}
}

// holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	// this should work for all browsers except IE6 and older
	try
	{
		// try to create XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		// assume IE6 or older
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		// try every prog id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
		{
			try
			{
				// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch (e) {}
		}
	}
	// return the created object or display an error message
	if (!xmlHttp)
		alert("Error creating the XMLHttpRequest object.");
	else
	return xmlHttp;
}

function process(vote, picid)
{
	// only continue if xmlHttp isn't void
	if (xmlHttp)
	{
	// try to connect to the server
		try
		{
			// get the two values entered by the user
			//var firstNumber = document.getElementById("firstNumber").value;
			//var secondNumber = document.getElementById("secondNumber").value;
			// create the params string
			var params = "picid=" + picid + "&vote=" + vote;
			// initiate the asynchronous HTTP request
			xmlHttp.open("GET", "http://"+location.hostname+"/rating.php?" + params, true);
			xmlHttp.onreadystatechange = handleRequestStateChange;
			xmlHttp.send(null);
		}
		// display the error in case of failure
		catch (e)
		{
			alert("Can't connect to server:\n" + e.toString());
		}
	}
}

// function called when the state of the HTTP request changes
function handleRequestStateChange()
{
	// when readyState is 4, we are ready to read the server response
	if (xmlHttp.readyState == 4)
	{
		// continue only if HTTP status is "OK"
		if (xmlHttp.status == 200)
		{
			try
			{
				// do something with the response from the server
				handleServerResponse();
			}
			catch(e)
			{
				// display error message
				alert("Error reading the response: " + e.toString());
			}
		}
		else
		{
			// display status message
			alert("There was a problem retrieving the data:\n" + xmlHttp.statusText);
		}
	}
}

// handles the response received from the server
function handleServerResponse()
{
	// retrieve the server's response packaged as an XML DOM object
	var xmlResponse = xmlHttp.responseXML;

	// catching potential errors with IE and Opera
	if (!xmlResponse || !xmlResponse.documentElement)
		throw("Invalid XML structure:\n" + xmlHttp.responseText);

	// catching potential errors with Firefox
	var rootNodeName = xmlResponse.documentElement.nodeName;
	if (rootNodeName == "parsererror")
		throw("Invalid XML structure:\n" + xmlHttp.responseText);
	
	// getting the root element (the document element)
	xmlRoot = xmlResponse.documentElement;
	// testing that we received the XML document we expect
	if (rootNodeName != "response" || !xmlRoot.firstChild)
		throw("Invalid XML structure:\n" + xmlHttp.responseText);

		// the value we need to display is the child of the root <response> element
	responseText = xmlRoot.firstChild.data;
	// display the user message
	if(reporting){
		myDiv = document.getElementById("reportThisPic");
		myDiv.innerHTML = responseText.substring(0, responseText.length - 3);
		reporting = 0;
	}else{
		myDiv = document.getElementById("voteResult");
		myDiv.innerHTML = responseText.substring(0, responseText.length - 3);
	}
	var answer = responseText.substring(responseText.length - 1, responseText.length);
	if(answer == 0){
		cancelRate();
	}
}

