function createRequestObject() {
	if (navigator.appName=="Microsoft Internet Explorer") {
		var v = parseFloat((navigator.appVersion.split("MSIE"))[1]);
		if (v>=7.0) {
			return new XMLHttpRequest();
		} 
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		return new XMLHttpRequest();
	}
	return null;
}
function join_args(args) {
	var argv="";
	for (key in args) {
		argv+=key+"="+encodeURIComponent(args[key])+"&";
	}
	if (argv.length) {
		argv=argv.substring(0, argv.length-1);
	}
	return argv;
}
function form_url(query) {
	if (location.search) joinstr='&';
	else joinstr='?';
	if (query) return location.href+joinstr+query;
	return location.href
}
function update_url(qdict) {
	var urlbase = location.href;
	var query = location.search;
	var argdict = {}
	if (query) {
		urlbase = location.href.split('?')[0];
		query = query.substring(1);
		var argl = query.split('&');
		var kv = null;
		for (arg in argl) {
			kv = argl[arg].split('=');
			argdict[kv[0]] = kv[1];
		}
	}
	for (k in qdict) {
		argdict[k] = qdict[k];
	}
	var query = join_args(argdict);
	if (query) return urlbase + '?'+query;
	return urlbase
}
function xml_show_state(new_state)
{
	var el= document.getElementById('xml_state')
	if (new_state==4) {
		if (el) {
			body=document.getElementsByTagName('body')[0]
			body.removeChild(el)
		}
		return;
	}
	if (!el) {
		el = document.createElement('div')
		if(navigator.appName == "Microsoft Internet Explorer") {
			el.setAttribute('className', 'floatmsg')
			el.style.position='absolute'
		} else {
			el.setAttribute('class', 'floatmsg')
		}
		el.setAttribute('id','xml_state')
		el.style.zIndex='99'
		el.innerHTML='processing...'
		body= document.getElementsByTagName('body')[0]
		body.appendChild(el)
	}
}
function xml_request(method, action, args) 
{
	xmlhttp = createRequestObject();
	xmlhttp.onreadystatechange = function processReqChange() {
		xml_show_state(xmlhttp.readyState)
		if (xmlhttp.readyState != 4) {
			return;
		}
		var xmlR = xmlhttp.responseXML;
		if (xmlR) {
			var js=xmlR.getElementsByTagName('js');
			if (js.length) {
				try {
					js = js.item(0).firstChild.data;
					eval(js);
				} catch(E) {
					alert(xmlhttp.responseText+'\n'+js+'\n'+E.message);
				}
				return;
			}
		}
		var xmlT=xmlhttp.responseText;
		try {
			eval(xmlT);
		} catch(E) {
			alert(xmlhttp.responseText+'\n'+js+'\n'+E.message);
		}
	}
	xml_show_state(0)
	args['action']=action
	var query = join_args(args);
	xmlhttp.open(method, location.href, true);
	if (method=='POST') {
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-Length", query.length);
		xmlhttp.setRequestHeader("Connection", "close");
		xmlhttp.send(query);
	} else {
		xmlhttp.send(null);
	}
}
function xml_get(action, args) {
	xml_request('GET', action, args);
}
function xml_post(action, args) {
	xml_request('POST', action, args);
}


