function ajax_debug(msg) {
	if (window.opera) {
		//opera.postError("[AJAX]: " + msg);
	}
	else {
	    //alert("Ajax Debug:\n\n" + msg);
	}
}

function ajax_make_object() {
	var ajax_obj;

	try {
		ajax_obj = new ActiveXObject("Msxml2.XMLHTTP");
        ajax_debug(" Created ajax_obj through msxml2.xmlhttp");
	} catch (e) {
		try {
			ajax_obj = new ActiveXObject("Microsoft.XMLHTTP");
            ajax_debug(" Created ajax_obj through microsoft.xmlhttp");
		} catch (oc) {
			ajax_obj = null;
            ajax_debug(" Created null obj");
		}
	}

	if (!ajax_obj && typeof XMLHttpRequest != "undefined") {
		ajax_obj = new XMLHttpRequest();
        ajax_debug(" Created ajax_obj through XMLHttpRequest");
    }

	if (!ajax_obj) {
		ajax_debug("Could not create connection object.");
    }

	return ajax_obj;
}

function async_request_panel(obj, url, query_string) {
    var xmlObj;

    url = url + "?" + (query_string);

    xmlObj = ajax_make_object();
    ajax_debug(xmlObj + " = xmlObj");

    xmlObj.open("GET", url, true);
    xmlObj.onreadystatechange = function() {
        if (xmlObj.readyState != 4) {
            return;
        }

        var status, data;
        status = xmlObj.responseText.charAt(0);
        data = xmlObj.responseText.substring(2);

        var objDiv = document.getElementById(obj);
        var objDivL = document.getElementById('l_' + obj);
        if (objDiv) {
            objDiv.innerHTML = data;
            
            if (objDivL) {
                objDivL.style.visibility = "hidden";
            }
        }

        if (status == "-") {
            //alert("Error: " + data);
        }
    }

    xmlObj.send(null);

    delete xmlObj;
}

function ajax_request(callback, url, query_string) {
    var xmlObj;

    url = url + "?" + (query_string);

    xmlObj = ajax_make_object();
	xmlObj.open("GET", url, true);
	xmlObj.onreadystatechange = function() {
		if (xmlObj.readyState != 4) {
			return { success: false, data: "" };
		}

		var status, returndata;
		status = xmlObj.responseText.charAt(0);
		returndata = xmlObj.responseText.substring(1);

		if (status == "-") {
			callback({ success: false, data: "" });
			return;
		}
		else {
			callback({ success: true, data: returndata });
			return;
		}
	}

	xmlObj.send(null);
	delete xmlObj;

}