
// Require prototype.js 1.4

var _DEBUGMODE = true;
function _DEBUG(msg) {
    if (_DEBUGMODE)
        alert(msg);
}

function $GET(url, pars, callback) {
    var async = callback != null;
    
    var request = new Ajax.Request(url, { 
            method: 'get', 
            parameters: pars, 
            asynchronous: async, 
            // for synchronized call, onComplete won't be callbacked. 
            onComplete: callback
            }); 
    
    if (async)
        return request;
    return request.transport.responseText;
}

function _$SEND_SINK() {}

function $SEND(url, pars, async) {
	if (async == null)
		async = false;
	var cb = async ? _$SEND_SINK : null;
    return $GET(url, pars, cb); 
}

function $XML(url, pars, callback) {
    var async = callback != null;
    
    var request = new Ajax.Request(url, { 
            method: 'get', 
            parameters: pars, 
            asynchronous: async, 
            // for synchronized call, onComplete won't be callbacked. 
            onComplete: callback
            }); 
    
    if (async)
        return request;
    
    var doc = request.transport.responseXML;
    // doc.validateOnParse = false; 
    var ret = doc.documentElement;
    if (ret == null) {
        ret = request.transport.responseText;
    }
    return ret;
}

function $DATA(xmlroot) {
    var ITEMs = xmlroot.getElementsByTagName("ITEM");
    var rows = new Array();
    for (var i = 0; i < ITEMs.length; i++) {
        var ITEM = ITEMs[i];
        var row = new Array(); 
        var FIELDs = ITEM.childNodes;
        for (var j = 0; j < FIELDs.length; j++) {
            var FIELD = FIELDs[j];
            var name = FIELD.tagName;
            var value = FIELD.text;
            row[name] = value;
        }
        rows[i] = row; 
    }
    return rows;
}

function $TREE(elm) {
    var elm1s = elm.selectNodes("*");
    var len1 = elm1s.length;
    if (len1 == 0)
        return elm.text; 
    
    var node = new Array();
    for (var i = 0; i < len1; i++) {
        var elm1 = elm1s[i];
        var name1 = elm1.tagName;
        var node1 = $TREE(elm1);
        var t = typeof(node[name1]);
        if (t == "null" || t == "undefined") {
            node[name1] = node1;
        } else {
            if (node[name1][0] != null) {
                var ins = node[name1].length;
                node[name1][ins] = node1;
            } else {
                node[name1] = new Array(node[name1], node1); 
            }
        }
    }
    return node;
}

function $XMLDATA(url, pars) {
    var root = $XML(url, pars, null); 
    var rows = $DATA(root);
    return rows; 
}

function $XMLTREE(url, pars) {
    var root = $XML(url, pars, null); 
    var tree = $TREE(root);
    return tree; 
}
