/**
 * @author administrator
 */

 (function($){

	$.XML = {

		createDoc: function() {
			if (document.implementation && document.implementation.createDocument) {
				var doc = document.implementation.createDocument("", "", null);
				if(doc != null) { 
					if (doc.readyState == null) {
						doc.readyState = 1;
						doc.addEventListener("load", function () {
							doc.readyState = 4;
							if (typeof doc.onreadystatechange == "function")
								doc.onreadystatechange();
						}, false);
					}					
				}
				return doc
			}
			if (window.ActiveXObject)
				return $.vv_tryThese(
					function() {return new ActiveXObject('MSXML2.DomDocument')},
					function() {return new ActiveXObject('Microsoft.DomDocument')},
					function() {return new ActiveXObject('MSXML.DomDocument')},
					function() {return new ActiveXObject('MSXML3.DomDocument')}
				) || false;
		},
		
		load: function(url) {
			var doc = $.XML.createDoc();
			doc.async = false;
			doc.load(url);
			if (window.ActiveXObject) {
				if (doc.parseError.errorCode != 0)
					return null;
			}
			if (window.DOMParser) {
				if(doc.documentElement.nodeName == 'parsererror')
					return null;
			}
			return doc;
		},		
		
		xmlToDoc: function (xml) {
			var doc = null;
			try {
			    if(window.ActiveXObject) {
			        var doc = $.XML.createDoc();
					if(doc.loadXML(xml) == false)
						doc = null;
			    }
			    if (window.DOMParser)
					doc = new DOMParser().parseFromString(xml, 'text/xml');
					if(doc.documentElement.nodeName == 'parsererror')
						doc = null;
			    }
			catch(e) {
				doc = null;
			}
			return doc;
		},
		
		docToXml: function (doc) {
		    if(window.ActiveXObject) {		               
		        return doc.xml;
		    }
		    if( window.DOMParser ) {
		    	var serializer = new XMLSerializer(); 
		    	return serializer.serializeToString(doc);		    	
		    }
	
		    throw new Error( 'No XML parser available' );
		}
		
	};
	
 })(jQuery);