function GetXml( xmlDoc, fnLoaded )
{
	var xml = null;
	
	var xmlHttp = GetXMLHttpRequest();
	
	
	
  if( xmlHttp ) {
    xmlHttp.onreadystatechange = function() {
      xml = ReadyStateChanged( xmlHttp );
     
			if( xml != null )
			   
				fnLoaded( xml );
    }
    
    
    xmlHttp.open( "GET", xmlDoc + "?noCaching=" + (new Date()).valueOf(), true );
   
    xmlHttp.send( null );
   
    
	}
	return 1;
}

function GetTransformedXmlFragment( xmlDoc, xslDoc, fnLoaded )
{
	LoadAndTransformXml( xmlDoc, xslDoc, fnLoaded, TransformXmlFragment );
}


function GetTransformedXmlDocument( xmlDoc, xslDoc, fnLoaded )
{
	LoadAndTransformXml( xmlDoc, xslDoc, fnLoaded, TransformXmlDocument );
}

function LoadAndTransformXml( xmlDoc, xslDoc, fnLoaded, fnTransform )
{  
	var xml = null;
	var xsl = null;
	var xformed = null;
	
  var xmlHttp = GetXMLHttpRequest();
  if( xmlHttp ) {
    xmlHttp.onreadystatechange = function() {
      xml = ReadyStateChanged( xmlHttp );
			xformed = fnTransform( xml, xsl );
			if( xformed != null )
				fnLoaded( xformed );
    }
    xmlHttp.open( "GET", xmlDoc + "?noCaching=" + (new Date()).valueOf(), true );
    xmlHttp.send( null );
  }
  
  var xslHttp = GetXMLHttpRequest();
  if( xslHttp ) {
    xslHttp.onreadystatechange = function() {
      xsl = ReadyStateChanged( xslHttp );
			xformed = fnTransform( xml, xsl );
			if( xformed != null )
				fnLoaded( xformed );
    }
    xslHttp.open( "GET", xslDoc + "?noCaching=" + (new Date()).valueOf(), true );
    xslHttp.send( null );
  }
}

function TransformXmlFragment( xml, xsl )
{
  if( xml == null || xsl == null )
    return null;
  
  if( window.ActiveXObject ) {
    return xml.transformNode( xsl );
  }
  else {
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet( xsl );
    return xsltProcessor.transformToFragment( xml, document );
  }
	
}

function TransformXmlDocument( xml, xsl )
{
  if( xml == null || xsl == null )
    return null;
  
  if( window.ActiveXObject ) {
    var ret = new ActiveXObject( "Msxml2.DOMDocument" );
    ret.async = false;
    xml.transformNodeToObject( xsl, ret );
    return ret;
    //return xml.transformDoc( xsl );
  }
  else {
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet( xsl );
    return xsltProcessor.transformToDocument( xml );
  }
	
}



function GetXMLHttpRequest()
{
  if( window.XMLHttpRequest ) {
    return new XMLHttpRequest();
  }
  else if( window.ActiveXObject ) {
    try {
      return new ActiveXObject( "Msxml2.XMLHTTP" );
    }
    catch( e ) {
      try {
        return new ActiveXObject( "Microsoft.XMLHTTP" );
      }
      catch( e ) {
        return null;
      }
    }
  }
}


function ReadyStateChanged( xmlHttpRequest )
{

  if( xmlHttpRequest.readyState == 4 ) {
  
   
    if( xmlHttpRequest.status == 200 ) {
     
      return xmlHttpRequest.responseXML;
    }
  }
  
  return null;
}

function ShowContent( docId, html )
{  
  if( window.ActiveXObject ) {
    document.getElementById( docId ).innerHTML = html;
  }
  else {
    document.getElementById( docId ).innerHTML = "";
    document.getElementById( docId ).appendChild( html );
  }
}




