function createXMLDocument() {
	var doc;
	try { // IE
	  doc=new ActiveXObject("Microsoft.XMLDOM");
	  doc.async="false";
	}
	catch (e) {
	  try { //Firefox, Mozilla, Opera, etc.
	 	doc = document.implementation.createDocument("", "", null);
	  } catch (e) {
	    	throw "can't create new XML element";
	  }
	}
	return doc;
}

function parseXMLFromString(string) {
	if (string=="") throw 'Can\'t parse XML from string';
	try { // IE
	  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	  xmlDoc.async="false";
	  xmlDoc.loadXML(string);
	  return xmlDoc;
	}
	catch (e) {
	  try { //Firefox, Mozilla, Opera, etc.
	    parser=new DOMParser();
	    xmlDoc=parser.parseFromString(string,"text/xml");
	    return xmlDoc;
	  }
	  catch(e) {
		throw 'Can\'t parse XML from string';
	  }
	}
}

function saveXMLToString(xmlDoc) {  	
  	if (typeof xmlDoc.xml != 'undefined') {
	    return xmlDoc.xml;
  	}  	
  	else if (typeof XMLSerializer != 'undefined') {
    	return (new XMLSerializer()).serializeToString(xmlDoc);
  	}  	
  	else if (typeof printNode != 'undefined') {
	    return printNode(xmlDoc);
  	}
	else if (typeof Packages != 'undefined') {
	  	try {
	    	var stringWriter = new java.io.StringWriter();
	    	Packages.org.apache.batik.dom.util.DOMUtilities.writeNode(
	      	xmlDoc, stringWriter);
	    	return stringWriter.toString();
	  	}
	  	catch (e) {
	   		// might want to handle problem here
	    	return '';
		}
	}  	
  	else {
    	// might want to handle problem here
    	return '';
  	}
} 
