/****************************************************************************
 * Program: net.js
 * Author: Joe Reynoldson
 * Date: 12/19/05
 * Description: This class was adopted from the book Ajax in Action. The class
 * defines a method for requesting a web page via the XMLHttpRequest object.
 * It also defines a default handler for errors.
 * *************************************************************************/

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)
{

    // URL to load
    this.url = url;
    this.req = null;

    //callback method executed when request is loaded
    this.onload = onload;

    //callback method executed when request fails
    this.onerror = (onerror) ? onerror : this.defaultError;

    //request the URL
    this.loadXMLDoc(url);
}

net.ContentLoader.prototype={

    loadXMLDoc:function(url)
    {
        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('GET',url,true);
                this.req.send(null);
            }catch (err){
                this.onerror.call(this);
            }
        }
    },

    onReadyState:function()
    {
       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()
    {
       alert("error fetching data!"
           +"\n\nreadyState:"+this.req.readyState
           +"\nstatus: "+this.req.status
           +"\nheaders: "+this.req.getAllResponseHeaders());
    }
}
