/*
  url-loading object -  from AJAX in Action / Dave Crane / Eric Pascarello / Darren James
*/

/* 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);
}

net.ContentLoader.prototype.loadXMLDoc = function(url, method, params, contentType) {
    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;
    if (ready == net.READY_STATE_COMPLETE) {
        var httpStatus = req.status;
        if (httpStatus == 200 || httpStatus == 0) {
            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());
}

/*  Duke-specific functions */
var xmlDoc;
var objOutputA;
var objOutputW;
var objOutputP;
var objExpanded;

function onXMLLoadA() {
    objOutputA.innerHTML = '';
    objOutputA.innerHTML = this.req.responseText;
}

function onXMLLoadW() {
    objOutputW.innerHTML = '';
    objOutputW.innerHTML = this.req.responseText;
}

function onXMLLoadP() {
    objOutputP.innerHTML = '';
    objOutputP.innerHTML = this.req.responseText;
}

function onErrorRegular() {
    objOutputW.innerHTML = '';
    objOutputW.innerHTML = '<h3>Search Results</h3><div class="expanded">An error occured while getting the search results.  Please try again.</div>';
}

function doPeopleSearch(q) {
    xmlDoc = null;
    objOutputP = document.getElementById('fuquapeopleresults');

    var url = '/searchPeople?q=';
    url += encodeURI(q)
    objOutputP.innerHTML = "<h3>Directory Search</h3><br/><img src=https://www.fuquaworld.duke.edu/images/progressBlue.gif width=20 height=20>&nbsp;Loading...";

    new net.ContentLoader(url, onXMLLoadP, onErrorRegular);
}

function doGoogleSearch(parms) {
    xmlDoc = null;
    objOutputW = document.getElementById('dukegoogleresults');

    var url = '/searchWeb';
    url += encodeURI(parms);
    objOutputW.innerHTML = "<h3>Web Search</h3><br/><img src=https://www.fuquaworld.duke.edu/images/progressBlue.gif width=20 height=20>&nbsp;Loading...";

    new net.ContentLoader(url, onXMLLoadW, onErrorRegular);
}

function doGoogleAdvancedSearch(parms) {
    xmlDoc = null;
    objOutputA = document.getElementById('dukegoogleadvancedresults');

    var url = '/searchWeb';
    url += encodeURI(parms);
    url += encodeURI('&proxycustom=<ADVANCED/>');
    objOutputA.innerHTML = "<h3>Web Search</h3><br/><img src=https://www.fuquaworld.duke.edu/images/progressBlue.gif width=20 height=20>&nbsp;Loading...";

    new net.ContentLoader(url, onXMLLoadA, onErrorRegular);
}

function showTheDiv(theID) {
    document.getElementById(theID).style.display='';
    return;
}
function hideTheDiv(theID) {
    document.getElementById(theID).style.display='none';
    return;
}
