/******************************************************************************
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) {
    thisreq = reqs[req_num];
    if(thisreq.readyState == 4) {
        if(thisreq.status == 200) {
            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) {
    var req;
    req_count++;
    thisreq = "reqs["+req_count+"]";
    cb_function = cb_function.replace(/req/g,thisreq);
    cb_function = cb_function.replace(/THISREQ/g,thisreq);

    if(window.XMLHttpRequest) { // Non-IE Browsers
        req = new XMLHttpRequest();
        reqs[req_count] = req;
        reqs[req_count].onreadystatechange = function() {
            processStateChange(req_count,cb_function);
        }
        try {
            reqs[req_count].open("GET", url, true);
        } catch(e) {
            //alert("unable to GET url "+url);
        }
        reqs[req_count].send(null);
    } else if (window.ActiveXObject) {  // IE Browsers
        req = new ActiveXObject("Microsoft.XMLHTTP");
        reqs[req_count] = req;
        if(reqs[req_count]) {
            reqs[req_count].onreadystatechange = function() {
                processStateChange(req_count,cb_function);
            }
            reqs[req_count].open("GET", url, true);
            reqs[req_count].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 AjaxSuccess(result_string) {
    if(result_string.match(/^SUCCESS/)) {
        return 1;
    }
    return 0;
}



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";
    }
}

// make an element "noticeable"
function noticeElement(elementId,bgcolor,fgcolor) {
    if(! bgcolor) {
        bgcolor = "yellow";
    }
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility='visible';

        original_bgcolor = element.style.background;
        element.style.background = bgcolor;

        original_fgcolor = '';
        if(fgcolor) {
            original_fgcolor = element.style.color;
            element.style.color=fgcolor;
        }
        delay_command = "unNoticeElement('"+elementId+"','"+original_bgcolor+"','"+original_fgcolor+"')";
        setTimeout(delay_command,"2500");
    }
}

// Return a noticed element back to it's default
function unNoticeElement(elementId,bgcolor,fgcolor) {
    element = document.getElementById(elementId);
    if(element) {
        element.style.visibility='hidden';

        element.style.background = bgcolor;

        if(fgcolor) {
            element.style.color=fgcolor;
        }

    }
}

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);
}


