function getAjax() {
	var C = null;
	try {
		C = new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
		try {
			C = new ActiveXObject("Microsoft.XMLHTTP");
		} catch(sc) {
			C = null;
		}
	}
	if(!C && typeof XMLHttpRequest != "undefined") {
		C = new XMLHttpRequest();
	}
	return C;
}
var __ajax_cache_innerhtml = new Array();
function parseCommandsXML(xml) {
	var commands;
	if(xml.documentElement)
		commands = xml.documentElement.getElementsByTagName("*");
	else
		commands = xml.getElementsByTagName("*");
	for(var i = 0; i < commands.length; i++) {
		var command = commands[i];
		var id = command.getAttribute("id");
		switch(command.tagName) {
			case "innerHTML":
				var element = document.getElementById(id);
				var cacheId = command.getAttribute("cacheId");
				var content = command.firstChild ? command.firstChild.data : '';
				if(cacheId) {
					var current = __ajax_cache_innerhtml[cacheId];
					if(current == content)
						break;
					__ajax_cache_innerhtml[cacheId] = content;
				}
				element.innerHTML = content;
				scripts = content.split(/<\/?script[^>]*>/);
                        	if(scripts.length == 3)
                        	        eval(scripts[1]);
				break;
			case "value":
				var element = document.getElementById(id);
				var content = command.firstChild ? command.firstChild.data : '';
				element.value = content;
				break;
			case "eval":
				eval(command.firstChild.data);
				break;
			case "attribute":
				var element = document.getElementById(id);
				var attribute = command.getAttribute("attribute");
				var value = command.getAttribute("value");
				element.setAttribute(attribute, value);
				break;
			case "style":
				var element = document.getElementById(id);
				if(command.getAttribute("class")) {
					element.className = command.getAttribute("class");
					break;
				}
				var style = command.getAttribute("style");
				var value = command.getAttribute("value");
				eval('document.getElementById("' + id + '").style.' + style + '="' + value + '";');
//				element.setAttribute("style", command.getAttribute("value"));
				break;
			default:
//				alert("command: " + command.tagName);
		}
	}
}

function ajaxCommands(url, f) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	ajax.open("POST", url, true);
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				parseCommandsXML(ajax.responseXML);
				if(f)
					f();
			} else {
//				alert(ajax.status);
			}
		}
	}
	ajax.send(null);
	return false;
}

function ajaxReplace(url, id) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	var element = document.getElementById(id);
	if(!id)
		return true;
	ajax.open("POST", url, true);
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				element.innerHTML = ajax.responseText;
				scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                        	if(scripts.length == 3)
                        	        eval(scripts[1]);
			}
		}
	}
	ajax.send(null);
	return false;
}

function ajaxReplaceByForm(form, id, init, key, value) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	var element = document.getElementById(id);
	if(!id)
		return true;
	if(key)
		form[key].value = value;
	url = form.action;
	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				element.innerHTML = ajax.responseText;
				scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                        	if(scripts.length == 3)
                        	        eval(scripts[1]);
			}
		}
	}
	ajax.send(urlEncodeForm(form, init));
	return false;
}

function ajaxReplaceByFormUrl(form, id, url, init, key, value) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	var element = document.getElementById(id);
	if(!id)
		return true;
	if(key)
		form[key].value = value;
	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				element.innerHTML = ajax.responseText;
				scripts = ajax.responseText.split(/<\/?script[^>]*>/);
                        	if(scripts.length == 3)
                        	        eval(scripts[1]);
			}
		}
	}
	ajax.send(urlEncodeForm(form, init));
	return false;
}

function ajaxPostCommands(form, url, f) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	if(!url)
		url = form.action;
	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				parseCommandsXML(ajax.responseXML);
				if(f)
					f();
			} else {
//				alert(ajax.status);
			}
		}
	}
	ajax.send(urlEncodeForm(form));
	return false;
}

function ajaxPost(form, init, key, value) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	if(key)
		form[key].value = value;
	url = form.action;
	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				parseCommandsXML(ajax.responseXML);
			} else {
//				alert(ajax.status);
			}
		}
	}
	ajax.send(urlEncodeForm(form, init));
	return false;
}

function ajaxPostUrl(form, url, init, key, value) {
	var ajax = getAjax();
	if(!ajax)
		return true;
	if(key)
		form[key].value = value;
	ajax.open("POST", url, true);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajax.onreadystatechange = function() {
		if(ajax.readyState == 4) {
			if(ajax.status == 200) {
				parseCommandsXML(ajax.responseXML);
			} else {
//				alert(ajax.status);
			}
		}
	}
	ajax.send(urlEncodeForm(form, init));
	return false;
}

function urlEncodeForm(form, init) {
	var post = "";
	var sep = "";
	if(init) {
		post = init;
		sep = "&";
	}
	for(var i = 0; i < form.length; i++) {
		var element = form.elements[i];
		if(element.name) {
			var type = element.type;
			if(type == 'radio' && !element.checked)
				continue;
			if(type == 'submit')
				continue;
			if(type == 'checkbox' && !element.checked)
				continue;
			if(type == 'file')
				continue;
			post += sep + form.elements[i].name + "=" + encodeURI(form.elements[i].value);
			sep = "&";
		}
	}
	return post;
}
