var net = new Object();
net.READY_STATE_UNINITIATED = 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 ){
    this.url = url;
    this.req = null;
    this.onload = onload;
    this.onerror = ( onerror ) ? onerror : this.defaultError;
    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 );
            }
        }else{
            alert("Your browser does not support XMLHTTP requests");
        }
    },
    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());
    }
}
