$ = function(id) {
	return document.getElementById(id);
}

ax_serialize = function(oDoc){
    return (oDoc) ? 
    		oDoc.innerHTML ? 
    			oDoc.innerHTML
			: (window.XMLSerializer) ?
				(new XMLSerializer()).serializeToString(oDoc)
			: oDoc.xml
	    : null;
}

ax_unescape = function(sXml){
	if (sXml==undefined || sXml==null) return '';
    return sXml.replace(/&apos;/g,"'")
        .replace(/&quot;/g,"\"")
        .replace(/&gt;/g,">")
        .replace(/&lt;/g,"<")
        .replace(/&amp;/g,"&");
}

ax_unescapeX = function(sXml){
	if (sXml==undefined || sXml==null) return '';
    return sXml.replace(/&apos;/g,"'")
        .replace(/&quot;/g,"\"")
        .replace(/<br>/g,"\n")
        .replace(/&gt;/g,">")
        .replace(/&lt;/g,"<")
        .replace(/&amp;/g,"&")
        ;
}

ax_escape = function(sXml){
	if (sXml==undefined || sXml==null) return '';
    return sXml.replace(/&/g,"%26");
}

ax_innerU = function(oDomDoc, tag, nr) {
	var dltag = tag.length+2;
	var a = ax_serialize(oDomDoc.getElementsByTagName(tag)[nr]);
	a = ax_unescape(a);
	var tagStill = (a.substring(0, tag.length+1)=="<"+tag);
	return (!tagStill) ? a : 
		(a.length>dltag*2+1) ? (a.substring(dltag, a.length-dltag-1)) : '';
}

ax_inner = function(oDomDoc, tag, nr) {
	var dltag = tag.length+2;
	var a = ax_serialize(oDomDoc.getElementsByTagName(tag)[nr]);
	var tagStill = (a.substring(0, tag.length+1)=="<"+tag);
	return (!tagStill) ? a : 
		(a.length>dltag*2+1) ? (a.substring(dltag, a.length-dltag-1)) : '';
}

ax_unpackPOST = function () {	
	if(oXMLHttp.readyState == 4) {
		try {
			var oDomDoc = oXMLHttp.responseXML;
			if ((a = ax_innerU(oDomDoc, 'before', 0)) != '') eval (a);
			lis = oDomDoc.getElementsByTagName('visual');
			for (i=0; i<lis.length; i++) {
				var b = ax_inner(lis[i], 'visualid', 0);
				if ($(b)==undefined) {
					var parent = ax_inner(lis[i], 'visualparent', 0);
					$(parent).innerHTML += "<div id='"+b+"'></div>";
				}
				if ((a = ax_innerU(lis[i], 'visualdata', 0))!='') {
					var pclass = ax_inner(lis[i], 'visualclass', 0);
					$(b).className = pclass;
					$(b).innerHTML = a;	
				}
			}
			if ((a = ax_innerU(oDomDoc, 'after', 0)) != '') eval (a);
			if (window.procLog) {
				procLog (ax_innerU(oDomDoc, 'login', 0));
			}
		} catch(e) {
			a = oXMLHttp.responseText;
			if (a!="" && $('debug')!=undefined) 
				alert ("2"+e.message+":\n"+oXMLHttp.responseText);
		};
		ax_lock = false;
		if (ax_queue.length>0) ax_getAjaxDocFromQueue();
		else {
			if (window.procEndOfAjaxQueue) procEndOfAjaxQueue();
			if (window.$('divLoading')!=undefined)
				$('divLoading').style.display = 'none';
		}
	}
}

var ax_queue = new Array();
var ax_lock=false;
var oXMLHttp = false;

ax_showDebuggedPost = function (url, postMes) {
	inner = "";
	var tabEq = postMes.split('&');
	for (var i=0; i<tabEq.length; i++) {
		a = tabEq[i].split('=');
		inner += '<input type="hidden" name="'+a[0]+'" id="'+a[0]+'" value="'+a[1]+'" />';
	}
	alert (inner);
	$('debuggerForm').action = url;
	$('debuggerForm').innerHTML = inner;
	$('debuggerForm').submit();
	$('debuggerForm').innerHTML = '';
}

ax_sendIt = function(ls, params) {
	if (window.$('divLoading')!=undefined)
		$('divLoading').style.display = 'block';
	ax_lock = true;
	var ppost = '';
	if (window.$('debug')!=undefined)
		if (params=='') {
			$('debug').innerHTML += '<a href="'+ls+'">'+ls+'(paramPost: '+params+')</a><br/>';
		} else {
			$('debug').innerHTML += 
				'<a href="javascript:ax_showDebuggedPost(\''+ls+'\', \''+params+'\');">'+ls+'(paramPost: '+params+')</a><br/>';
		}
	var method = (params=='') ? 'GET' : 'POST';
	var send = (params=='') ? null : params;
	oXMLHttp = false;
	if (window.XMLHttpRequest) {
        oXMLHttp = new XMLHttpRequest();
        oXMLHttp = new XMLHttpRequest();
	        if (oXMLHttp.overrideMimeType) {
	            oXMLHttp.overrideMimeType('text/xml');
	        }
    } else if (window.ActiveXObject) {
        oXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    } else {
    	alert ("No Ajax!");
    	return;
    }
	oXMLHttp.onreadystatechange = ax_unpackPOST;
    oXMLHttp.open(method, ls, true);
	if (params!='') 
		oXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8')
	oXMLHttp.send(send);
}

ax_getAjaxDoc = function(ls) {
	ax_getAjaxDoc(theServerURL+ls, '');
}

ax_getAjaxDocFirst = function(ls) {
	ax_getAjaxDocFirst(ls, '');
}

ax_getAjaxDoc = function(ls, params) {
	if (params==undefined) params = '';
	if (ax_lock) ax_queue.push(Array (theServerURL+ls, params)); else ax_sendIt(theServerURL+ls, params);
}

ax_getAjaxDocFirst = function(ls, params) {
	if (params==undefined) params = '';
	if (ax_lock) ax_queue.unshift(Array (ls, params)); else ax_sendIt(ls, params);
}

ax_getAjaxDocFromQueue = function() {
	ls = ax_queue.shift();
	ax_sendIt(ls[0], ls[1]);
}

