
// X-browser function for loading XML data via XSL Transform
function xmlDataLoadFragment_xBrowser(xmlfile, xslfile, xmltarget) 
{
	var sniffer = new getBrowser();
	if ( sniffer.ie )
	{
		xmlDataLoadFragment_IE(xmlfile, xslfile, xmltarget);
	}
	else
	{
		xmlDataLoadFragment_Mozilla(xmlfile, xslfile, xmltarget);
	}
}


// Performs XML Transform for Mozilla browsers
function xmlDataLoadFragment_Mozilla(xmlfile, xslfile, xmltarget)
{
  var xmldoc = loadXMLMozilla(xmlfile);
  if (xmldoc == null) {
    alert('cannot load ' + xmlfile);
    return;
  }
  var xsldoc = loadXMLMozilla(xslfile);
  if (xsldoc == null) {
    alert('cannot load ' + xslfile);
    return;
  }
 	XslTransformFragmentMozilla(xmldoc, xsldoc, xmltarget);
}


// Performs XML transform for IE browsers
function xmlDataLoadFragment_IE(xmlfile, xslfile, xmltarget) 
{
	// Load XML 
	var xml = new ActiveXObject("MSXML2.DOMDocument");
	xml.async = false;
	xml.load(xmlfile);

	// Load XSL
	var xsl = new ActiveXObject("MSXML2.DOMDocument");
	xsl.async = false;
	xsl.load(xslfile);

	// Transform and load into div
	document.getElementById(xmltarget).innerHTML = xml.transformNode(xsl);
}


// Creates and returns XML objects for Mozilla browsers
function loadXMLMozilla(url)
{
  var http_request;
  http_request = new XMLHttpRequest();
  if (http_request.overrideMimeType)
  {
    // some older versions require this
    http_request.overrideMimeType('text/xml');
  }
  http_request.open('GET', url, false); // non asynchronous
  http_request.send(null);
  var xmldoc = http_request.responseXML;
  if (xmldoc == null)
  {
    alert('the http request did not return an xml object');
  }
  else
  {
    var root_node = xmldoc.documentElement;
    if (root_node == null)
    alert('warning: the xml object does not contain a documentElement')
  }
  return xmldoc;
}


// Performs the Stylesheet transform for Mozilla browsers
function XslTransformFragmentMozilla(xmlDocument, xslStylesheet, xmltarget)
{
  var xslResult; //
  var xslProc; // XSLProcessor

  xslProc = new XSLTProcessor();
 	xslProc.importStylesheet(xslStylesheet);
 	xslResult = xslProc.transformToFragment(xmlDocument, document);

  var tmpOutput = document.createElement("div");
  tmpOutput.appendChild(xslResult);

	document.getElementById(xmltarget).innerHTML = tmpOutput.innerHTML;
//	document.getElementById(xmltarget).appendChild(xslResult);
}


// X-browser function for loading XML data via XSL Transform
function xmlDataLoad_xBrowser(xmlfile, xslfile) 
{
	var sniffer = new getBrowser();
	if ( sniffer.ie )
	{
		xmlDataLoad_IE(xmlfile, xslfile);
	}
	else
	{
		xmlDataLoad_Mozilla(xmlfile, xslfile);
	}
}

// Performs XML Transform for Mozilla browsers
function xmlDataLoad_Mozilla(xmlfile, xslfile)
{
  var xmldoc = loadXMLMozilla(xmlfile);
  if (xmldoc == null) {
    alert('cannot load ' + xmlfile);
    return;
  }
  var xsl = loadXMLMozilla(xslfile);
  if (xsl == null) {
    alert('cannot load ' + xslfile);
    return;
  }
//	window.location.replace(XslTransformMozilla(xmldoc, xsl));
  document.write(XslTransformMozilla(xmldoc, xsl));
}

// Performs XML transform for IE browsers
function xmlDataLoad_IE(xmlfile, xslfile) 
{
  var xml = new ActiveXObject("Msxml2.DOMDocument.4.0")
  xml.async = false
  xml.load(xmlfile)

  // Load the XSL
  var xsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0")
  xsl.async = false
  xsl.load(xslfile)
    
  var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
  xslt.stylesheet = xsl;
  var xslProc = xslt.createProcessor();
  xslProc.input = xml;
  xslProc.transform();

  // Transform
  document.write(xslProc.output)
}


// Performs the Stylesheet transform for Mozilla browsers
function XslTransformMozilla(xmlDocument, xslStylesheet)
{
  var xslResult; //
  var xslProc; // XSLProcessor

//  alert('XslTransformMozilla');
  xslProc = new XSLTProcessor();
  xslProc.importStylesheet(xslStylesheet);
  xslProc.setParameter("http://www.nick.com", "browser", "firefox");
  xslResult = xslProc.transformToDocument(xmlDocument);

	return xslResult.documentElement.innerHTML;
  // the type of xslResult will depend on the output method of the stylesheet
  // XMLDocument for xml, HTMLDocument for html,
  // or for text, an XMLDocument with a single root element <transformiix:result> with the text as a child
}
