licuitCore.XML = new Class({
	Extends : licuitCore.licuit,
	
	initialize : function(){},
	
	load : function(url){
		if((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) || (navigator.userAgent.toLowerCase().indexOf('safari') > -1)){
			var xmlhttp = new window.XMLHttpRequest();
			xmlhttp.async = false;
			xmlhttp.open("GET",url,false);
			xmlhttp.send(null);
			return xmlDoc = this.removeWhiteSpace(xmlhttp.responseXML.documentElement);
		}else{
			var xmldoc = this.newXml();
   			xmldoc.async = false; 
    		xmldoc.load(url);
    		return this.removeWhiteSpace(xmldoc.documentElement);
		}		 
	},
	
	newXml : function(rootTagName, namespaceURL){
		if (!rootTagName) rootTagName = "";
	    if (!namespaceURL) namespaceURL = "";
		
		if (document.implementation && document.implementation.createDocument) {
	        // This is the W3C standard way to do it
	        return document.implementation.createDocument(namespaceURL, 
	                       rootTagName, null);
	    }
	    else { // This is the IE way to do it
	        // Create an empty document as an ActiveX object
	        // If there is no root element, this is all we have to do
	        var doc = new ActiveXObject("MSXML2.DOMDocument");
			
	        // If there is a root tag, initialize the document
	        if (rootTagName) {
	            // Look for a namespace prefix
	            var prefix = "";
	            var tagname = rootTagName;
	            var p = rootTagName.indexOf(':');
	            if (p != -1) {
	                prefix = rootTagName.substring(0, p);
	                tagname = rootTagName.substring(p+1);
	            }
	
	            // If we have a namespace, we must have a namespace prefix
	            // If we don't have a namespace, we discard any prefix
	            if (namespaceURL) {
	                if (!prefix) prefix = "a0"; // What Firefox uses
	            }
	            else prefix = "";
	
	            // Create the root element (with optional namespace) as a
	            // string of text
	            var text = "<" + (prefix?(prefix+":"):"") + tagname +
	                (namespaceURL
	                 ?(" xmlns:" + prefix + '="' + namespaceURL +'"')
	                 :"") +
	                "/>";
	            // And parse that text into the empty document
	            doc.loadXML(text);
	        }
	        return doc;
	    }
	},
	
	removeWhiteSpace : function(xml) {
		var loopIndex;
		for (loopIndex = 0; loopIndex < xml.childNodes.length; loopIndex++){
			var currentNode = xml.childNodes[loopIndex];
			if (currentNode.nodeType == 1){this.removeWhiteSpace(currentNode);}
			if (((/^\s+$/.test(currentNode.nodeValue))) && (currentNode.nodeType == 3)){
				xml.removeChild(xml.childNodes[loopIndex--]);
			}
		}
		return xml;
	}
	
});
var XML  = new licuitCore.XML ();
