// xmlhttp.js
//
// Copyright © 2005 Drakware

var xmlreqs = new Array();
function CXMLReq(freed) {
	this.freed = freed;
	this.xmlhttp = false;
	if (window.XMLHttpRequest) {
		this.xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}
function xmlreqGET(url) {
	var pos = -1;
	for (var i=0; i<xmlreqs.length; i++) {
		if (xmlreqs[i].freed == 1) { pos = i; break; }
	}
	if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
//	else { xmlreqs[pos].xmlhttp.abort(); }
	if (xmlreqs[pos].xmlhttp) {
		xmlreqs[pos].freed = 0;
		xmlreqs[pos].xmlhttp.open("GET",url,true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function() { if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); } }
		if (window.XMLHttpRequest) {
			xmlreqs[pos].xmlhttp.send(null);
		} else if (window.ActiveXObject) {
			xmlreqs[pos].xmlhttp.send();
		}
	}
	show_waiting();
}
function xmlreqPOST(url,data) {
	var pos = -1;
	for (var i=0; i<xmlreqs.length; i++) {
		if (xmlreqs[i].freed == 1) { pos = i; break; }
	}
	if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
//	else { xmlreqs[pos].xmlhttp.abort(); }
	if (xmlreqs[pos].xmlhttp) {
		xmlreqs[pos].freed = 0;
		xmlreqs[pos].xmlhttp.open("POST",url,true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function() { if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); } }
		xmlreqs[pos].xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlreqs[pos].xmlhttp.send(data);
	}
	show_waiting();
}
function xmlhttpChange(pos) {
	if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4) {
		if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304) {
			var responseCode = getElementText(xmlreqs[pos].xmlhttp.responseXML.getElementsByTagName('responseCode')[0]);
// debug
//alert(xmlreqs[pos].xmlhttp.responseText);

			if (responseCode == "itemview") 			itemview_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "catview")			catview_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "mainview")		mainview_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "cart_load_xml")	load_cart_xml_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "cart_save_xml")	save_cart_xml_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "checkout")		checkout_submit_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "search")			search_submit_cb(xmlreqs[pos].xmlhttp.responseXML);
			else if (responseCode == "XMLERROR")		alert('AJAX Error');

//		} else {
			// error
		}
		xmlreqs[pos].freed = 1;
	}
	hide_waiting();
}

function getChildText(el,child) {
	return getElementTextNS("",child,el,0);
}
function getElementText(el) {
	if (document.all) {
		return el.firstChild.data;
	}
	if (el.childNodes.length > 0) {
		return el.firstChild.nodeValue;
	} else {
		return "";
	}
}
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && (document.all)) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        if (result.childNodes.length > 1) {
			var value = "";
			for (var i = 0; i < result.childNodes.length; i++) {
				value += result.childNodes[i].nodeValue;
			}
            return value;
        } else if (result.childNodes.length == 1) {
			return result.firstChild.nodeValue;
        } else {
			return "";
		}
    } else {
        return "";
    }
}
