var XML_Types = new Array();
XML_Types[0] = "UNDEFINED_TYPE";
XML_Types[1] = "ELEMENT_NODE";
XML_Types[2] = "ATTRIBUTE_NODE";
XML_Types[3] = "TEXT_NODE";
XML_Types[4] = "CDATA_SECTION_NODE";
XML_Types[5] = "ENTITY_REFERENCE_NODE";
XML_Types[6] = "ENTITY_NODE";
XML_Types[7] = "PROCESSING_INSTRUCTION_NODE";
XML_Types[8] = "COMMENT_NODE";
XML_Types[9] = "DOCUMENT_NODE";
XML_Types[10] = "DOCUMENT_TYPE_NODE";
XML_Types[11] = "DOCUMENT_FRAGMENT_NODE";
XML_Types[12] = "NOTATION_NODE";

function XML(node) {
	this.node = node;
}

function XML_getAttribute(name) {
	if (name) {
		if (this.getType() == "DOCUMENT_NODE") {
			for (var i = 0; i < this.node.attributes.length; i++) {
				if (this.node.attributes.item(i).name == name) {
					return this.node.attributes.item(i).text;
				}
			}
			return null;
		}
		return this.node.getAttribute(name);
	}
	return this.node.attributes;
}

function XML_getElement(name, index) {
	if (!index) {
		index = 0;
	}
	if (this.node.getElementsByTagName(name).length > 0) {
		return new XML(this.node.getElementsByTagName(name).item(index));
	}
	return null;
}

function XML_getElements(name) {
	if (!name) {
		return this.toArray(this.node.childNodes);
	}
	return this.toArray(this.node.getElementsByTagName(name));
}

function XML_getElementsSize() {
	return this.node.childNodes.length;
}

function XML_getHtml() {
	if (this.node.innerHTML != null) {
		return this.node.innerHTML;
	}
	return this.node.childNodes[0].innerHTML;
}

function XML_getName() {
	return this.node.nodeName;
}

function XML_getText() {
	if (this.node.nodeValue != null) {
		return this.node.nodeValue;
	}
	if (!this.node.childNodes[0]) {
		return "";
	}
	return this.node.childNodes[0].nodeValue;
}

function XML_getType() {
	return XML_Types[this.node.nodeType];
}

function XML_hasAttribute(name) {
	if (name) {
		return (this.getAttribute(name) ? true : false);
	}
	return this.node.attributes.length > 0;
}

function XML_hasElement(name) {
	if (name) {
		return this.getElement(name) != null;
	}
	return this.node.childNodes.length > 0;
}

function XML_toArray(nodes) {
	objects = new Array();
	for (xml_i = 0; xml_i < nodes.length; xml_i++) {
		objects[xml_i] = new XML(nodes[xml_i]);
	}
	return objects;
}

new XML(null);
XML.prototype.getAttribute = XML_getAttribute;
XML.prototype.getElement = XML_getElement;
XML.prototype.getElements = XML_getElements;
XML.prototype.getElementsSize = XML_getElementsSize;
XML.prototype.getHtml = XML_getHtml;
XML.prototype.getName = XML_getName;
XML.prototype.getText = XML_getText;
XML.prototype.getType = XML_getType;
XML.prototype.hasAttribute = XML_hasAttribute;
XML.prototype.hasElement = XML_hasElement;
XML.prototype.toArray = XML_toArray;
