var requester=new Array();
requester[0]=null;
document.getElementById("loadingbox").style.left=(screen.width / 2) + "px";

function Validate()
{
	var Msg="";

	if ((document.getElementById("maincat").options[0].selected == true) 
	&& (document.getElementById("keyword").value.length == 0) && (document.getElementById("itemid").value.length == 0) &&
	(document.getElementById("fromcatnum").value.length == 0) && (document.getElementById("tocatnum").value.length == 0))
	{ Msg=Msg + "* Select or enter at least one search criteria.\n"; }

	if (isNaN(document.getElementById("itemid").value) == true)
	{ Msg=Msg + "* Only numerical values may be used in the Item ID field.\n"; }

	if ((isNaN(document.getElementById("fromcatnum").value) == true) || (isNaN(document.getElementById("tocatnum").value) == true))
	{ Msg=Msg + "* Only numerical values may be used in the Catalogue fields.\n"; }

	if (Msg != "")
	{ alert('Before proceeding, please correct the following:\n\n' + Msg); }

	else
     { return true; }

	return false;
}

function InitAjax(reqctr)
{
	if ((requester[reqctr] != null) && (requester[reqctr].readyState != 0) && (requester[reqctr].readyState != 4))
	{
		requester[reqctr].abort();
		requester[reqctr]=null;
	}

	try
	{
		// Try to create object for Firefox, Safari, IE7, etc.
		this.requester[reqctr] = new XMLHttpRequest();
	}

	catch (e)
	{
		try
		{
			// Try to create object for later versions of IE.
			this.requester[reqctr] = new ActiveXObject('MSXML2.XMLHTTP');
		}

		catch (e)
		{
			try
			{
				// Try to create object for early versions of IE.
				this.requester[reqctr] = new ActiveXObject('Microsoft.XMLHTTP');
			}

			catch (e)
			{
				// Could not create an XMLHttpRequest object.
				alert("Could not create XMLHttpRequest.");
				return false;
			}
		}
	} 

	return;
}

function LoadSubCats(MainCat)
{
	document.getElementById("loadingbox").style.display="block";
	InitAjax(0);
	requester[0].onreadystatechange=CheckSubCatRetrieval;
	var currentTime=new Date();
	currentTime=currentTime.getTime();
	requester[0].open("GET", "http://www.chinastampsociety.org/xml/loadsubcats.cfm?Cat=" + MainCat + "&NoCache=" + currentTime);
	requester[0].send(null);
	return true;
}

function LoadSubSubCats(SubCat)
{
	InitAjax(1);
	requester[1].onreadystatechange=CheckSubSubCatRetrieval;
	var currentTime=new Date();
	currentTime=currentTime.getTime();
	requester[1].open("GET", "http://www.chinastampsociety.org/xml/loadsubsubcats.cfm?SubCat=" + SubCat + "&NoCache=" + currentTime);
	requester[1].send(null);
	return true;
}

function CheckSubCatRetrieval()
{
	// If object has finished retrieving the data
	if (requester[0].readyState == 4)
	{
		// If the data was retrieved successfully
		try
		{
			if ((requester[0].status >= 200) && (requester[0].status <= 299))
			{ UpdateSubCats(); }

			// IE returns a status code of 0 on some occasions, so ignore this case
			else if (requester[0].status != 0)
			{
				document.getElementById("loadingbox").style.display="none";
				alert("There was an error while retrieving the URL: " + requester[0].statusText);
			}
		}

		catch (error)
		{ document.getElementById("loadingbox").style.display="none"; }
	}

	return true;
}

function CheckSubSubCatRetrieval()
{
	// If object has finished retrieving the data
	if (requester[0].readyState == 4)
	{
		// If the data was retrieved successfully
		try
		{
			if ((requester[0].status >= 200) && (requester[0].status <= 299))
			{ UpdateSubSubCats(); }

			// IE returns a status code of 0 on some occasions, so ignore this case
			else if (requester[0].status != 0)
			{
				document.getElementById("loadingbox").style.display="none";
				alert("There was an error while retrieving the URL: " + requester[0].statusText);
			}
		}

		catch (error)
		{ document.getElementById("loadingbox").style.display="none"; }
	}

	return true;
}

function UpdateSubCats()
{
	if (requester[0].responseText.charAt(0) == "<")
	{
		var selSubCat=document.getElementById("subcat");
		var subcatname=requester[0].responseXML.getElementsByTagName("subcatname");
		var subcatid=requester[0].responseXML.getElementsByTagName("subcatid");
		var ctr=2;

		selSubCat.options.length=0;

		document.getElementById("subsubcat").options.length=0;
		document.getElementById("subsubcat").options[0]=new Option("[ Select Your Second Search Category ]","");

		if (subcatid.length > 0)
		{
			selSubCat.options[0]=new Option("[ Select ]","");
			selSubCat.options[1]=new Option("Stamps","");
	
			for (ctr2=0;ctr2<=subcatid.length;ctr2++)
			{
				selSubCat.options[ctr]=new Option(subcatname[ctr2].childNodes[0].nodeValue,subcatid[ctr2].childNodes[0].nodeValue);
				ctr+=1;
			}
		}

		else
		{
			selSubCat.options[0]=new Option("[ No Categories Available ]","");
			document.getElementById("subsubcat").options.length=0;
			document.getElementById("subsubcat").options[0]=new Option("[ No Categories Available ]","");
		}
	}

	document.getElementById("loadingbox").style.display="none";
	return true;
}

function UpdateSubSubCats()
{
	if (requester[0].responseText.charAt(0) == "<")
	{
		var selSubSubCat=document.getElementById("subsubcat");
		var subcatname=requester[0].responseXML.getElementsByTagName("subsubcatname");
		var subcatid=requester[0].responseXML.getElementsByTagName("subsubcatid");
		var ctr=2;

		selSubSubCat.options.length=0;

		if (subcatid.length > 0)
		{
			selSubSubCat.options[0]=new Option("[ Select ]","");
			selSubSubCat.options[1]=new Option("Stamps","");
	
			for (ctr2=0;ctr2<=subcatid.length;ctr2++)
			{
				selSubSubCat.options[ctr]=new Option(subcatname[ctr2].childNodes[0].nodeValue,subcatid[ctr2].childNodes[0].nodeValue);
				ctr+=1;
			}
		}

		else
		{ selSubSubCat.options[0]=new Option("[ No Categories Available ]",""); }
	}

	document.getElementById("loadingbox").style.display="none";
	return true;
}

document.getElementById("searchfrm").onsubmit=Validate;

if (typeof document.getElementById("searchfrm").addEventListener != "undefined")
{
	document.getElementById("maincat").addEventListener("change",function() { LoadSubCats(document.getElementById("maincat").value); },false);
	document.getElementById("subcat").addEventListener("change",function() { LoadSubSubCats(document.getElementById("subcat").value); },false);
}

if (typeof document.getElementById("searchfrm").attachEvent != "undefined")
{
	document.getElementById("maincat").attachEvent("onchange",function() { LoadSubCats(document.getElementById("maincat").value); });
	document.getElementById("subcat").attachEvent("onchange",function() { LoadSubSubCats(document.getElementById("subcat").value); });
}
