var ajax;
function initAjax(callbackOption, dataString)
// callbackOption is specific to the web page using AJAX.  dataString is the URL formatted query string
{
	ajax = getXMLHttpRequestObject();
	if (ajax)
	{
		var queryString;
		var uri;
		var submitString = secureString(dataString); // URLencode the string and ensure no hacking!
		var dateTag = "timeStamp=" + new Date().getTime();

		switch(callbackOption) // callback depends on which web page is doing the calling
		{
			case "postValidateCreateAccount":
				// web page CreateAccount.shtm - createUserAccount.php validates new user account, sends validation email or alerts error
				uri = "phpscripts\createUserAccount.php?" + dateTag;
				ajax.onreadystatechange = newAccountCallback;
				ajax.open("POST", uri, true);
				ajax.send(submitString);
				break;
			case "getValidateLogin":
				// web page ArrangementsForSale.shtm - userLogin.php validates registered user login or alert error
				queryString = "phpscripts\userLogin.php?" + submitString + "&" + dateTag;
				ajax.onreadystatechange = userLoginCallback;
				ajax.open("GET", queryString, true);
				ajax.send(null);
				break;
			case "getQueryCatalog":
				// web page Catalog.shtm - submit query through arrangementQuery.php to MySQL, return results or alert error
				queryString = "phpscripts\catalogQuery.php?" + submitString + "&" + dateTag;
				ajax.onreadystatechange = catalogQueryCallback;
				ajax.open("GET", queryString, true);
				ajax.send(null);
				break;
			case "postPlaceOrder":
				// web page BuyArrangements.shtm - post order through placeOrder.php to MySQL, send email or alert error
				uri = "phpscripts\placeOrder.php?" + dateTag ;
				ajax.onreadystatechange = placeOrderCallback;
				ajax.open("POST", uri, true);
				ajax.send(submitString);
				break;
			case "postComments":
				// web page Feedback.shtm - validate and post comments through comments.php to MySQL, return web page Comments.shtm pr alert error
				uri = "phpscripts\validatePostComments.php?" + dateTag;
				ajax.onreadystatechange = validatePostCommentsCallback;
				ajax.open("POST", uri, true);
				ajax.send(submitString);
		}
	}
	else // handle case that client browser does not support AJAX
	{
	}
	
}
// END FUNCTION initAjax
function getXMLHttpRequestObject()
{
	ajax = false;
	if(window.XMLHttpRequest)
	{
		ajax = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		try
		{
			ajax = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				ajax = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	return ajax;
}
// 	END FUNCTION getCMLHttpRequetObject

function secureString(dataString)
{
	var safeString;
	// add regexp to test whether the string is safe and properly URLencoded
	safeString = encodeURI(dataString);
	return safeString;
}
// END FUNCTION safeString

// <-------------------- CALLBACK FUNCTIONS ------------------->

function alertUser(status)
{
	var msg;
	switch(status)
	{
		case(401):
			msg = "Unauthorized access";
			break;
		case(403):
			msg = "Forbidden access";
			break;
		case(404):
			msg = "Requested URL not found"
	}
	alert(msg);
}
// END FUNCTION alertUser

function newAccountCallback()
{
	if(ajax.readyState == 4)
	{
		if(ajax.status == 200)
		{
			var acctMsg = ajax.responseText;
			document.getElementById("createAcctMsg").innerHTML = acctMsg;
			return false;
		}
		else
		{
			alertUser(ajax.status);
		}
	}
}
// END FUNCTION newAccountCallback

function userLoginCallback()
{
}
// END FUNCTION userLoginCallback

function catalogQueryCallback()
{
}
// END FUNCTION catalogQueryCallback

function placeOrderCallback()
{
}
// END FUNCTION placeOrderCallback

function validatePostCommentsCallback()
{
}
// END FUNCTION validatePostCommentsCallback

