//	ajax_xml_parser.js
//	08 Jan 2009
//	AJAX-based XML data downloading and parsing class
//	www.ignitewebsolutions.com

function AjaxXMLParser() {
	// --------------------
	// --- PRIVATE VARS ---
	var READY_STATE_COMPLETE = 4;
	var HTTP_STATUS_OK = 200;
	
	var request = AjaxRequest();
	
	// -------------------
	// --- PUBLIC VARS ---
	this.request = request;
	
	// -------------------------
	// --- PRIVATE FUNCTIONS ---
	function loadXML(url) {
		request.open("GET", url, true);
		request.send(null);
	}
	
	function getNodesByName(nodeName) {
		var nodes = request.responseXML.documentElement.getElementsByTagName(nodeName);
		
		return nodes;
	}
	
	function getNodeValue(nodeName, siblingNodeName, siblingNodeValue, parentNodeName) {
		var siblingNodeFound = false;
		var nodeValue = null;
		var nodes = request.responseXML.documentElement.getElementsByTagName(parentNodeName);
		
		for (var i = 0; i < nodes.length; i++) {
			for (var j = 0; j < nodes[i].childNodes.length && !siblingNodeFound; j++) {
				if (nodes[i].childNodes[j].nodeName == siblingNodeName) {
					if (nodes[i].childNodes[j].childNodes[0].nodeValue == siblingNodeValue) {
						siblingNodeFound = true;
					}
				}
			}
			
			if (siblingNodeFound) {
				for (var k = 0; k < nodes[i].childNodes.length && !nodeValue; k++) {
					if (nodes[i].childNodes[k].nodeName == nodeName) {
						nodeValue = nodes[i].childNodes[k].childNodes[0].nodeValue;
					}
				}
			}
		}
		
		return nodeValue;
	}
	
	// ------------------------
	// --- PUBLIC FUNCTIONS ---
	this.loadXML = function(url) {
		loadXML(url);
	}
	
	this.getNodesByName = function(nodeName) {
		return getNodesByName(nodeName);
	}
	
	this.getNodeValue = function(nodeName, siblingNodeName, siblingNodeValue, parentNodeName) {
		return getNodeValue(nodeName, siblingNodeName, siblingNodeValue, parentNodeName);
	}
	
	// --------------
	// --- EVENTS ---
	function onTransferComplete() {
		var result = false;
		
		if (request.readyState == READY_STATE_COMPLETE && request.status == HTTP_STATUS_OK) {
			result = true;
		}
		
		return result;
	}
	
	this.onTransferComplete = function() {
		return onTransferComplete();
	}
}
