
/*·························  © Webacumen 2007. All rights reserved  ··········································

Project			:	standard website template 
Module Name		:	controller.js
Purpose			:	This module contains all functions related to XMLHttpRequest
············································································································
Revision History

Date			Rev			CA Number		Changes Made
06/02/06		1			D001/0000		Initial Review
··········································································································*/

//··········································································································
//	XMLHttpRequest Functions
//··········································································································

var mstrBaseUrl = "http://www.logosports.co.uk/";
var mobjRequest = null;
var mobjRequestTimerID = null;

function dnaFetch(strMethod, strUrl, objCallback, strData)
{
	try
	{
		if (setRequestObject() == true)
		{
			setHourglassOn();
			mobjRequest.open(strMethod, mstrBaseUrl+strUrl, true);
			mobjRequest.onreadystatechange = objCallback;
			if (strMethod == "POST") 
			{
				//mobjRequest.setRequestHeader("content-type", "application/x-www-form-url");
				mobjRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");
				mobjRequest.setRequestHeader("content-length", 38);
				mobjRequest.send(strData);
			} 
			else 
			{
				mobjRequest.setRequestHeader("content-type", "text/plain");
				mobjRequest.setRequestHeader("content-length", 38);
				mobjRequest.send(null);
			}
			mobjRequestTimerID = window.setTimeout("timeoutAbortRequest()", 8000);
		}
		else
		{
			onErrorHandler("dnaFetch: setRequestObject failed.", "controller.js", 0);
		}
	}
	
	catch(exception)
	{
		onErrorHandler("dnaFetch: " + exception.message, "controller.js", 0);
	}
}

function dnaCatch()
{
	try
	{
		var strReturn = "";

 		if (isBusy() == false)
		{
			if (mobjRequest.readyState==4)
			{
				if (mobjRequest.status==200 || mobjRequest.status==304)
				{
					strReturn = mobjRequest.responseText;
				}
				else
				{
					onErrorHandler("dnaCatch: Request Error. Problem retrieving the data. Status: " + mobjRequest.status, "controller.js", 0);
				}
				doCleanUp();
			}
		}
		
		return strReturn;
	}
	
	catch(exception)
	{
		onErrorHandler("dnaCatch: " + exception.message, "controller.js", 0);
		doCleanUp();
		return "";
	}
}

function dnaUrlCatch()
{
	try
	{
		if (getResult() == true)
		{
			setMenu("mnu"+mstrUrlHash);
			dnaTrack();
		}
	}
	
	catch(exception)
	{
		onErrorHandler("dnaUrlCatch: " + exception.message, "controller.js", 0);
	}
	
	finally
	{
		setHourglassOff();
	}
}

function dnaTrack()
{
	try
	{
		var strPage = document.location.href.replace(mstrBaseUrl, "");

		var intIdx = strPage.indexOf("?");
		if (intIdx == -1)
		{
			intIdx = strPage.indexOf("#");
			if (intIdx > -1)
			{
				strPage = strPage.replace("#", "?prm=");
			}
		}
		//urchinTracker("/" + strPage );
	}
	
	catch(exception)
	{
		onErrorHandler("dnaTrack: " + exception.message, "controller.js", 0);
	}
}

function setRequestObject() 
{
	try
	{	
		abortRequest();
		if (window.XMLHttpRequest)
		{
			mobjRequest = new XMLHttpRequest();
			return true;
		}
		else if (window.ActiveXObject)
		{
			mobjRequest = new ActiveXObject("Microsoft.XMLHTTP");
			return true;
		}
		else
		{
			onErrorHandler("setRequestObject: Request Error. Problem creating the request object.", "controller.js", 0);
			return false;
		}
	}
	
	catch(exception)
	{
		onErrorHandler("setRequestObject: " + exception.message, "controller", 0);
		return false;
	}
}

function timeoutAbortRequest() 
{
	try
	{	
 		if (isBusy() == true)
		{
 			abortRequest();
			alert("Sorry - the server took too long to return the data. Please try again.");
			//onErrorHandler("timeoutAbortRequest: too long to return the data", "controller.js", 0);
		}
	}
	
	catch(exception)
	{
		onErrorHandler("timeoutAbortRequest: " + exception.message, "controller.js", 0);
	}
}

function abortRequest() 
{
	try
	{	
 		if (isBusy() == true)
		{
			mobjRequest.abort();
		}
	}
	
	catch(exception)
	{
		onErrorHandler("abortRequest: " + exception.message, "controller.js", 0);
	}

	finally
	{
		doCleanUp();
	}
}

function isBusy() 
{
	try
	{	
		//0 = uninitialized - open() has not been called yet.
		//1 = loading - send() has not been called yet.
		//2 = loaded - send() has been called, headers and status are available.
		//3 = interactive - downloading, responseText holds the partial data.
		//4 = complete - finished with all operations.
		var blnReturn = false;
 		if (mobjRequest != null)
		{
 			if (mobjRequest.readyState == 1 || mobjRequest.readyState == 2 || mobjRequest.readyState == 3)
			{
				blnReturn = true;
			}
		}
		return blnReturn;
	}
	
	catch(exception)
	{
		onErrorHandler("isBusy: " + exception.message, "controller.js", 0);
		return false;
	}
}

function doCleanUp() 
{
	try
	{	
		setHourglassOff();
		mobjRequest = null;
		window.clearTimeout(mobjRequestTimerID);
		mobjRequestTimerID = null;
	}
	
	catch(exception)
	{
		onErrorHandler("doCleanUp: " + exception.message, "controller.js", 0);
	}
}

function getResult()
{
	try
	{
		var	blnResult = false;
		var strData = dnaCatch();

		if (strData.length > 0)
		{blnResult = handleResult(strData);}

		return blnResult;
	}
	
	catch(exception)
	{
		onErrorHandler("getResult: " + exception.message, "controller.js", 0);
		return false;
	}
}

function handleResult(strData)
{
	try
	{
		strData = cleanReturnedData(strData);
		var strArea = getResultData(strData, "area");
		var strText = getResultData(strData, "text");
		strText = "<a id=\"findtop\" class=\"aFindTop\"></a>" + strText;

		return showResult(strArea, strText);
	}
	
	catch(exception)
	{
		onErrorHandler("handleResult: " + exception.message, "controller.js", 0);
		return false;
	}
}

function showResult(strArea, strText)
{
	try
	{
		var	blnResult = false;
		var objArea = document.getElementById(strArea);

		if(objArea != null)
		{
			objArea.innerHTML = strText;
			objArea = null;
			blnResult = true;
		}

		return blnResult;
	}
	
	catch(exception)
	{
		alert("The screen area '" + strArea + "' could not be found.");
		onErrorHandler("showResult: " + exception.message, "controller.js", 0);
		return false;
	}
}

function getResultData(strData, strName)
{
	try
	{
		var strReturn = "";
		var x = strData.indexOf("<" + strName + ">");
		if (x > -1)
		{
			var y = strData.indexOf("</" + strName + ">");
			if (y > -1)
			{
				strReturn = strData.substring(x+6, y);
			}
		}
		return strReturn;
	}
	
	catch(exception)
	{
		onErrorHandler("getResultData: " + exception.message, "controller.js", 0);
		return "";
	}
}

function cleanReturnedData(strData)
{
	try
	{
		var regLt = /&lt;/g;
		var regGt = /&gt;/g;

		strData = strData.replace(regLt, "<");
		strData = strData.replace(regGt, ">");

		return strData;
	}

	catch(exception)
	{
		onErrorHandler("cleanReturnedData: " + exception.message, "controller.js", 0);
		return "";
	}
}

//··········································································································
//	Hourglass Functions
//··········································································································

function setHourglassOn()
{
	document.body.style.cursor = "wait";
}

function setHourglassOff()
{
	document.body.style.cursor = "default";
}


