/** 
* $Date: 2005-09-22T13:20:27JST $
*
* XMLHttpRequest related utility functions.
*
*
* References:
* Hawk's W3 Laboratory | XMLHttpRequestについて
* http://www.hawk.34sp.com/stdpls/xml/xmlhttprequest.html
*
* javascript:xmlhttprequest
* http://jpspan.sourceforge.net/wiki/doku.php?id=javascript:xmlhttprequest
*
* Guide to Using XMLHttpRequest (with Baby Steps)
* http://www.webpasties.com/xmlHttpRequest/
*
* Quick tip: XMLHttpRequest and innerHTML
* http://www.sitepoint.com/blog-post-view.php?id=185942
*
* XMLHttpRequest + *.innerHTML
* http://www.sitepoint.com/blog-post-view.php?id=185942
*
* XML Extras (WebFX)
* http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
*
*/
/**
* XMLHTTPRequest object's constructor
* @return	object	XMLHTTPRequest instance.
*/
function getInstanceOfXMLHttpRequest () {
	var xreq = false;
	/**
	 * Conditional Compilation:
	 */
	// MS-IE
	/*@cc_on
	@if (@_jscript_version >= 5)
	try {
		xreq = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xreq = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xreq = false;
		}
	}
	@end @*/
	// Mozilla, Opera, etc.
	if (!xreq && typeof(XMLHttpRequest) != 'undefined') {
		try {
			xreq = new XMLHttpRequest();
		} catch (e) {
			xreq = false;
		}
	}
	return xreq;
}

/**
* Query 'sUrl' and replace the target element contents with the
* returned XML fragment.
* @param	string	sUrl	The URL to get the fragment.
* @param	string	eId	The target Id
* @return	void
*/
function loadFragmentInToElement (sUrl, eId) {
	var xmlhttp = getInstanceOfXMLHttpRequest ();
	var element = document.getElementById (eId);

	element.innerHTML = '<p><em>Loading ...</em></p>';
	xmlhttp.open("GET", sUrl, true);	// Async.
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200) {
				element.innerHTML = xmlhttp.responseText;
			} else {
				element.innerHTML = '<p><em>WARNING: Failed to load: '+ sUrl +'</em></p>';
			}
		}
	}
	xmlhttp.send(null);
}

function loadFragmentInToElementByPOST (sUrl, eId, postdata) {
	var xmlhttp = getInstanceOfXMLHttpRequest ();
	var element = document.getElementById (eId);

	element.innerHTML = '<p><em>Loading ...</em></p>';
	xmlhttp.open("POST", sUrl, true);	// Async.
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200) {
				element.innerHTML = xmlhttp.responseText;
			} else {
				element.innerHTML = '<p><em>WARNING: Failed to load: '+ sUrl +'</em></p>';
			}
		}
	}
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(postdata);
}


/**
* Query 'sUrl' and get the result.
* @param	string	sUrl	The URL to get the fragment.
* @param	string	eId	The ID of the message dialog element. The status message will be output there.
* @return	string	The result text or "" if query is failed.
*/
function remoteProcedureCall (sUrl, eId) {
	var xmlhttp = getInstanceOfXMLHttpRequest ();
	var element = document.getElementById (eId);

	element.innerHTML = '<p><em>Querying ...</em></p>';
	// xmlhttp.open("GET", sUrl, false);	// Sync.
	xmlhttp.open("GET", sUrl, true);	// Sync.
	xmlhttp.onreadystatechange = function () {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200) {
				element.innerHTML = '<p><em>Query success</em></p>';
				return xmlhttp.responseText;
			} else {
				element.innerHTML = '<p><em>WARNING: Query failed: '+ sUrl +'</em></p>';
				return "";
			}
		}
	}
	xmlhttp.send(null);
}

