if (!SIGI) throw("SIGI.XML depends on the following scripts. Please make sure these are included.\nSIGI.js");
function XMLObject() {
	this.Base = Base;
}
XMLObject.inherits(SIGI.Base);

XMLObject.prototype.XMLDocument = function(xml, remote) {
	if (!remote) remote = false;
	var xmlDoc;
	if (SIGI.Browser.isIE) {
		 xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		if (xml) {
			if (remote) {
				xmlDoc.async = false;
				xmlDoc.load(xml);
			} else if (typeof(xml) == "string") {
				xmlDoc.loadXML(xml);
			} else if (typeof(xml) == "object") {
				return xml;	
			}
		}
	} else {
		var xmlDoc = document.implementation.createDocument("", "", null);
		if (xml) {
			if (remote) {
				var xmlXMLHttp = this.XMLHttpRequest();
				xmlXMLHttp.open( "GET",xml,false );
				xmlXMLHttp.send(null);
				xmlDoc = this.XMLDocument(xmlXMLHttp.responseText);
			} else if (typeof(xml) == "string") {
				var dparser = new DOMParser();
				xmlDoc = dparser.parseFromString(xml, "text/xml");
			} else if (typeof(xml) == "object") {
				var cloneNode = xmlDoc.importNode(xml, true);
				xmlDoc.appendChild(cloneNode);
			}
		}
	}
	return xmlDoc;
}

XMLObject.prototype.XMLHttpRequest = function() {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new window.XMLHttpRequest();
        if (http_request.overrideMimeType) {
			// ensures that the returned data is of the correct mime type
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
		throw("Your browser does not support XMLHttp");
	} else {
		return http_request;
	}	
}

XMLObject.prototype.getXmlDataIsland = function(id) {
    var xmlNode = document.getElementById(id);
    if (SIGI.Browser.isIE) {
        return xmlNode;
    } else if (xmlNode && xmlNode.hasChildNodes()) {
        //return new this.XMLDocument(xmlNode.getElementsByTagName("ROW"));
        return new this.XMLDocument(xmlNode.innerHTML);
    }
}

XMLObject.prototype.transform = function(xmlNode, styleSheet, parentID, xPath) {
    try {
        var xml = null;
        var node = null;
        if (typeof xmlNode == "object") {
            xml = xmlNode;
        } else {
            xml = this.getXmlDataIsland(xmlNode);
        }

        var parent = document.getElementById(parentID);

        if (xml && parent) {
            if (xPath) {
                node = xml.selectSingleNode(xPath);
            } else {
                node = xml;
            }
            var xslXMLHttp = new this.XMLHttpRequest();
            xslXMLHttp.open("GET", styleSheet, false);
            xslXMLHttp.send(null);
            var xsl = new this.XMLDocument(xslXMLHttp.responseText);
            if (SIGI.Browser.isIE) {
                var html = node.transformNode(xsl);
                parent.insertAdjacentHTML("beforeEnd", html);
            } else {
                var xsltProcessor = new XSLTProcessor();
                xsltProcessor.importStylesheet(xsl);
                var fragment = xsltProcessor.transformToFragment(node, document);
                
                parent.appendChild(fragment);
                var nodetext = document.getElementById(parentID).innerHTML;
                nodetext = nodetext.replace(/&amp;/gi, "&");
                nodetext = nodetext.replace(/&lt;/gi, "<");
                nodetext = nodetext.replace(/&gt;/gi, ">");
                document.getElementById(parentID).innerHTML = nodetext;

            }
        }
    } catch (ex) {
        debugger;
    }
}

SIGI.XML = new XMLObject();