﻿/* namespacing object */
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;

/*--- content loader object for cross-browser requests ---*/
net.ContentLoader = function (url, onload, onerror, method, params, contentType) {
    this.req = null;
    this.onload = onload;
    this.onerror = (onerror) ? onerror : this.defaultError;
    this.loadXMLDoc(url, method, params, contentType);
};

//we would like to use the img beacon method here but need to solve errors where it fails if you apply it
//too quickly, so for now we'll go the old way
net.Beacon = function (url) {
    var blankFunction = function () { };
    new net.ContentLoader(url, blankFunction, blankFunction);
};

net.ContentLoader.prototype.loadXMLDoc = function (url, method, params, contentType) {

    //get defaults
    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 () {
                net.ContentLoader.onReadyState.call(loader);
            }

            this.req.open(method, url, true);
            if (contentType) {
                this.req.setRequestHeader('Content-Type', contentType);
            }

            this.req.send(params);
        }
        catch (err) {
            this.onerror.call(this);
        }
    }
};

net.ContentLoader.onReadyState = function () {
    var req = this.req;
    var ready = req.readyState;
    try {
        var httpStatus = req.status;
    }
    catch (err) {
    }
    if (ready == net.READY_STATE_COMPLETE) {
        if (httpStatus == 200 || httpStatus == 0) {
            if (this.onload) this.onload.call(this);
        }
        else {
            this.onerror.call(this);
        }
    }
}

net.ContentLoader.prototype.defaultError = function () {
    alert("error fetching data!"
    + "\n\nreadyState:" + this.req.readyState
    + "\nstatus: " + this.req.status
    + "\nheaders: " + this.req.getAllResponseHeaders());
}
