//AJAX client library

function createAJAXObject()
{
	var AJAXObject;
	
	//IE以外
	if(window.XMLHttpRequest)
	{
		AJAXObject = new XMLHttpRequest();
	}
	
	//IE用
	else if(window.ActiveXObject)
	{
		try	//try to use version 2.0 of the object
		{
			AJAXObject = new ActiveXObject("MSXML2.XMLHTTP");
		}
		
		catch(error)	//else use the original version
		{
			AJAXObject = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	return AJAXObject;
}

var AJAXObject = createAJAXObject();
var currentReactionHandler;

//AJAXServerLocation is a *relative* path
function AJAXAction(AJAXServerLocation, jobString, parameterString)
{
	//timestamp kills the cache on IE
	//timestampは IE のキャシュを殺すために
	var serverURL = AJAXServerLocation
		+ '?job=' + jobString
		+ '&parameter=' + parameterString
		+ '&timestamp=' + new Date().getTime();
	
	//the third parameter is "wait for results in background"
	AJAXObject.open('get', serverURL, true);
	
	//set the reaction handler to the user-changeable global variable
	AJAXObject.onreadystatechange = stateChangeCheck;
	
	//go!
	AJAXObject.send(null);
}

//reactionHandler is a function name reference
function setAJAXReaction(reactionHandler)
{
	currentReactionHandler = reactionHandler;
}

//only 4,200 -> raction
function stateChangeCheck()
{
	if (AJAXObject.readyState == 4 && AJAXObject.status == 200) {
		currentReactionHandler();
	}
}

function setAJAXSynchronism(newMethod)
{
	waitResults = newMethod
}

