/******************************************************************************
Brandon Checketts AJAX javascript functions
Copyright 2006 Brandon Checketts
www.brandonchecketts.com
******************************************************************************/
var reqs = new Array();
var req_count = 0;

function processStateChange(req_num, cb_function, debugtrue) {
    //var thisreq = reqs[req_num];
    if(debugtrue) { debug("readystate("+req_num+") = "+reqs[req_num].readyState); }
    if(reqs[req_num].readyState == 4) {
        if(debugtrue) { debug("status("+req_num+") = "+reqs[req_num].status); }
        if(reqs[req_num].status == 200) {
            if(debugtrue) { debug("executing callback function("+req_num+"): "+cb_function); }
            eval(cb_function);
        } else {
            //alert("An error occurred processing your request.  Fields must be less than 8000 characters.");
        }
    }
}

function AjaxGet(url,cb_function) {
    AjaxRetrieve(url, cb_function);
}

function AjaxRetrieve(url, cb_function, debugtrue) {
    var req;
    req_count++;
    var this_req_num = req_count;
    if(debugtrue) { debug("this_req_num = "+this_req_num); }
    var thisreq = "reqs["+this_req_num+"]";
    cb_function = cb_function.replace(/req/g,thisreq);
    cb_function = cb_function.replace(/THISREQ/g,thisreq);
    if(debugtrue) { debug("cb_function = "+cb_function); }

    if(window.XMLHttpRequest) { // Non-IE Browsers
        if(debugtrue) { debug('using non-IE XMLHttpRequest Object'); }
        req = new XMLHttpRequest();
        if(debugtrue) { debug('this_req_num is '+this_req_num); }
        reqs[this_req_num] = req;
        reqs[this_req_num].onreadystatechange = function() {
            processStateChange(this_req_num,cb_function, debugtrue);
        }
        try {
            reqs[this_req_num].open("GET", url, true);
        } catch(e) {
            alert("unable to GET url "+url);
        }
        reqs[this_req_num].send(null);
    } else if (window.ActiveXObject) {  // IE Browsers
        if(debugtrue) { debug('using IE ActiveX XMLHttpRequest Object'); }
        req = new ActiveXObject("Microsoft.XMLHTTP");
        reqs[this_req_num] = req;
        if(reqs[this_req_num]) {
            reqs[this_req_num].onreadystatechange = function() {
                processStateChange(this_req_num,cb_function);
            }
            reqs[this_req_num].open("GET", url, true);
            reqs[this_req_num].send();;
        }
    }
}

function AjaxPost(url, params, cb_function) {
    if(window.XMLHttpRequest) { // Non-IE Browsers
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {  // IE Browsers
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    req.onreadystatechange = function() {
        processStateChange(cb_function);
    }
    req.open('POST', url, true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length",parameters.length);
    req.setRequestHeader("Connection","close");
    req.send(parameters);
}



function replaceContent(elementId,newContent) {
// //   I guess IE doesn't like this method
//    rng = document.createRange();
//    element = document.getElementById(elementId);
//    if(element) {
//        rng.setStartBefore(element);
//        htmlFrag=rng.createContextualFragment(newContent);
//        while(element.hasChildNodes()) {
//            element.removeChild(element.lastChild);
//        }
//        element.appendChild(htmlFrag);
//    }
    if(document.getElementById) {
        element = document.getElementById(elementId);   
    } else if( document.all) {
        element = document.all(elementid);
    } else {
        alert("Your browser can't handle this javascript");
        return;
    }
    element.innerHTML=newContent;
        
}

function hideElement(elementId) {
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility="hidden";
        element.style.display="none";
    }
}

function showElement(elementId) {
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility="visible";
        element.style.display="block";
    }
}

function noticeElement(elementId,bgcolor,fgcolor) {
    if(! bgcolor) {
        bgcolor = "yellow";
    }
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility='visible';
        element.style.background=bgcolor;
        if(fgcolor) {
        element.style.color=fgcolor;
        }
        delay_command = "unNoticeElement('"+elementId+"')";
        setTimeout(delay_command,"2500");
    }
}
// Need to standardize all of these
function NoticeElement(elementId) {
    noticeElement(elementId);
}

function unNoticeElement(elementId) {
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility='hidden';
    }
}

function UnNoticeElement(elementId) {
    unNoticeElement(elementId);
}

function decode(str) {
    var decoded = "";
    for (var i = 0; i <  str.length; i++) {
        if (str.charAt(i) == "+") {
            decoded += " ";
        } else {
            decoded += str.charAt(i);
        }
    }
    return unescape(decoded);
}


