/************************************************************************
 * contentloader.js
 *
 * AJAX XML content loader.
 *
 **
 * Log:
 * G. Krueger/BM		 6/06
 ************************************************************************/

/*======================================================================*/

var net = new Object();

net.READY_STATE_UNINITIALIZED	= 0;
net.READY_STATE_LOADING		= 1;
net.READY_STATE_LOADED		= 2;
net.READY_STATE_INTERACTIVE	= 3;
net.READY_STATE_COMPLETE	= 4;

net.ContentLoader =
	function( url, onload, onerror, method, params, contentType )
/************************************************************************
 * net.ContentLoader
 *
 * This function is the constructor for the ContentLoader
 *
 * net.ContentLoader ( this, url, "POST",
 *		       options.requestParameters || []
 *		     )
 *
 * Input parameters:
 *	component	object		Object requesting loader
 *	url		string		XML document to load
 *	method		string		GET or POST request
 *	requestParams	hash		Option parameters
 *
 * Output parameters:
 *	net.ContentLoader
 *			*method		Reference to the method
 **
 * Log:
 * G. Krueger/BM	 6/06
 ************************************************************************/
{
    this.onload	= onload;
    this.onerror = (onerror) ? onerror : this.defaultError;
    this.loadXMLDoc(url, method, params, contentType);
/*----------------------------------------------------------------------*/
}

/*======================================================================*/

net.ContentLoader.prototype =
{
    /*==================================================================*/

    loadXMLDoc: function (url, method, params, contentType)
    /********************************************************************
     * sendRequest
     *
     * Requests an XML HTTP document.
     *
     * ajaxHelper.loadXMLDoc ( url, method, params, contentType )
     *
     * Input parameters:
     *	url		STRING		Universal Resource Locator
     *  method		STRING		HTTP Method
     *  params		STRING		Request Parameters
     *  contentType	STRING		HTTP Content Type
     *
     * Output parameters:
     *		NONE
     **
     * Log:
     * G. Krueger/BM	 10/06
     ********************************************************************/
    {
    /*------------------------------------------------------------------*/
	if ( ! method )
	{
	    method = "GET";
	}

	if ( ! contentType && method == "POST" )
	{
	    contentType = "application/x-www-form-urlencoded";
	}

	if ( window.XMLHttpRequest )
	{
	    this.req = new XMLHttpRequest();
	} else if ( window.ActiveXObject )
	{
	    this.req = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if ( this.req )
	{
	    try
	    {
		var loader=this;
		this.req.onreadystatechange =
			function() {loader.onReadyState.call(loader);}
		this.req.open(method, url, true);	/* HTTP method */
		if ( contentType )
		{
		    this.req.setRequestHeader (
			"Content-Type", contentType
					      );
		}
		this.req.send(params);	/* Request parameters */
	    } catch (err)
	    {
		this.onerror.call(this);
	    }
	}
    },

    /*==================================================================*/

    onReadyState: function ( )
    /********************************************************************
     * onReadyState
     *
     * Callback function.
     *
     * callback = this.onReadyState ( )
     *
     * Input parameters:
     *		NONE
     *
     * Output parameters:
     *		NONE
     **
     * Log:
     * G. Krueger/BM	 10/06
     ********************************************************************/
    {
	var req = this.req;
	var ready=req.readyState;
    /*------------------------------------------------------------------*/
	if ( ready == net.READY_STATE_COMPLETE )
	{
	    var httpStatus = req.status;
	    if (httpStatus == 200 || httpStatus == 0)
	    {
		this.onload.call(this);
	    } else
	    {
		this.onerror.call(this);
	    }
	}
    },

    /*==================================================================*/

    defaultError: function ( )
    /********************************************************************
     * defaultError
     *
     * Error handling callback function.
     *
     * this.onerror=(onerror) ? onerror : this.defaultError;
     *
     * Input parameters:
     *		NONE
     *
     * Output parameters:
     *		NONE
     **
     * Log:
     * G. Krueger/BM	 10/06
     ********************************************************************/
    {
    /*------------------------------------------------------------------*/
	alert ("error fetching data!\n\n" +
	       "readyState:  " + this.req.readyState + "\n" +
	       "headers:  " + this.req.getAllResponseHeaders()
	      );
    }

    /*==================================================================*/
};
