var appName = navigator.appName;
var userAgent = navigator.userAgent;

var explorer = navigator.appName == "Microsoft Internet Explorer";
var explorer_6 = false;
var explorer_55 = false;
var mozilla = navigator.appName == "Netscape";
var msxmlvers=3;

if (explorer) {
var index = userAgent.indexOf("MSIE ");
if (index >= 0) {
  var version = userAgent.substring(index+5, index+8);
  if (Number(version) >= 6)  explorer_6 = true;
  if (Number(version) > 5)  explorer_55 = true;
  }
}

// #############################################################################################################
var hasXMLSupport = true;
var varFreeThreadedDOMDocument = "Msxml2.FreeThreadedDOMDocument";
var varXSLTemplate = "Msxml2.XSLTemplate";

if (msxmlvers!=3) {
	varFreeThreadedDOMDocument = "Msxml.FreeThreadedDOMDocument.4.0";
	varXSLTemplate = "Msxml2.XSLTemplate.4.0";
}

var x = null;
	    
try{ 
    x = new ActiveXObject(varFreeThreadedDOMDocument); 
}catch(e){
    hasXMLSupport = false;
}
 
try{ 
    x = new ActiveXObject(varXSLTemplate); 
}catch(e){
    hasXMLSupport = false;
}

// #############################################################################################################

function createTXTDocument(url) {
	var xmlDoc = null;
	if (explorer) {
		if (msxmlvers!=4)
			xmlDoc = new ActiveXObject("Msxml.FreeThreadedDOMDocument");
		else
			xmlDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
		xmlDoc.async = false;
		xmlDoc.resolveExternals = false;
		if (!xmlDoc.load(url)) {
//			alert('Fehler beim Zugriff auf das XML-Document "'+url+'"');
			return null;
		}
		xmlDoc = xmlDoc.xml;
	} else if (mozilla) {
		try {
			var request = new XMLHttpRequest();
			request.open("GET", url, false);
			request.send(null);
			xmlDoc = request.responseText;
		} catch (e) {
//                       alert('Fehler beim Zugriff auf das XML-Document "'+url+'"');
//                       alert(e);
		}
	}
	return xmlDoc;
}

// #############################################################################################################

function createXMLDocument(url) {
	var xmlDoc = null;
	if (explorer) {
		if (msxmlvers!=4)
			xmlDoc = new ActiveXObject("Msxml.FreeThreadedDOMDocument");
		else
			xmlDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
		xmlDoc.async = false;
		xmlDoc.resolveExternals = false;
        //	if (xmlDoc.setProperty) xmlDoc.setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
		if (!xmlDoc.load(url)) {
	//		alert('Fehler beim Zugriff auf das XML-Document "'+url+'"');
			return null;
		}
	} else if (mozilla) {
		try {
			var request = new XMLHttpRequest();
			request.open("GET", url, false);
			request.send(null);
			xmlDoc = request.responseXML;
		} catch (e) {
       //                alert('Fehler beim Zugriff auf das XML-Document "'+url+'"');
       //                alert(e);
		}
	}
	return xmlDoc;
}

function createXSLTProcessor(url) {
	var xsltProc = null;
	var XSLTDocument = createXMLDocument(url);
	if (explorer) {
		var xsltDoc;
		if (msxmlvers!=4)
			xsltDoc = new ActiveXObject("Msxml2.XSLTemplate");
		else
			xsltDoc = new ActiveXObject("Msxml2.XSLTemplate.4.0");
		if (XSLTDocument) {
			xsltDoc.stylesheet = XSLTDocument;
			xsltProc = xsltDoc.createProcessor();
		}
	} else if (mozilla) {
		if (XSLTDocument) {
                       try {
       			       	xsltProc = new XSLTProcessor();
		        	xsltProc.importStylesheet(XSLTDocument);
                       } catch (e) {
		        	alert('Fehler beim Import des Stylesheet "'+url+'"');
                               alert(e);
                               xsltProc = null;
		        }
		}
	}
	return xsltProc;
}

function transform(xml,processor) {
	var result = null;
	if (xml && processor) {
		if (explorer) {
			processor.input = xml;
			for (var i=2; i<arguments.length; i+=2)
				processor.addParameter(arguments[i],arguments[i+1]);
			processor.transform();
			result = processor.output;
		} else if (mozilla) {
			for (var i=2;i<arguments.length;i+=2)
				processor.setParameter(null,arguments[i],arguments[i+1]);
			result = new XMLSerializer().serializeToString(processor.transformToDocument(xml));
		}
	} else alert('Fehler beim XSLT Process: XML oder XSL gleich "null"');
	return result;
}

function serialize(xml) {
	var result = null;
	if (xml) {
		if (explorer) {
			result = xml.xml;
		} else if (mozilla) {
			result = new XMLSerializer().serializeToString(xml);
		}
	} else alert('Fehler beim Serialize Process: XML gleich "null"');
	return result;
}

function selectSingleNode(xml,xpath) {
	var node = null;
	if (explorer) node = xml.selectSingleNode(xpath);
	else if (mozilla) try {
               node = new XPathEvaluator().evaluate(xpath, xml, null,XPathResult.ANY_TYPE, null).iterateNext();
	} catch (e) { alert(e); }
	return node;
}

function selectNodes(xml,xpath) {
	var nodes = null;
	if (explorer) nodes = xml.selectNodes(xpath);
	else if (mozilla) {
		nodes = new Array();
		var r = new XPathEvaluator().evaluate(xpath,xml,null,0,null);
		var n = null;
		while (n=r.iterateNext()) nodes.push(n);
	}
	return nodes;
}

// ##################### fuer asag ordermanager - listbox #####################

function createXSLTProcessor4(xsl) {
	var xsltProc = null;
	if (xsl) {
		if (explorer) {
			var xsltDoc;
			if (msxmlvers!=4) {
                               if (explorer_6)
				        xsltDoc = new ActiveXObject("Msxml2.XSLTemplate");
                               else
			                xsltDoc = new ActiveXObject("Msxml.DOMDocument");
                        }
			else
				xsltDoc = new ActiveXObject("Msxml2.XSLTemplate.4.0");
				
			xsltDoc.stylesheet = xsl;
			xsltProc = xsltDoc.createProcessor();

		} else if (mozilla) {
			xsltProc = new XSLTProcessor();
			xsltProc.importStylesheet(xsl);
		}
	}
	return xsltProc;
}

function createXSLTProcessor4a(xslin) {
	xsl = createXMLDocument(xslin)
	var xsltProc = null;
	if (xsl) {
		if (explorer) {
			var xsltDoc;
			if (msxmlvers!=4) {
                               if (explorer_6)
				        xsltDoc = new ActiveXObject("Msxml2.XSLTemplate");
                               else
			                xsltDoc = new ActiveXObject("Msxml.DOMDocument");
                        }
			else {
				xsltDoc = new ActiveXObject("Msxml2.XSLTemplate.4.0");
			}
				
			try {
				xsltDoc.stylesheet = xsl;
				xsltProc = xsltDoc.createProcessor();
			}
			catch(e) {
				xsltProc = null;
			}

		} else if (mozilla) {
			xsltProc = new XSLTProcessor();
			xsltProc.importStylesheet(xsl);
		}
	}
	return xsltProc;
}

function addParameter(processor) {
	if (explorer) {
		for (var i=1; i<arguments.length; i+=2) processor.addParameter(arguments[i],arguments[i+1]);
	} else if (mozilla) {
		for (var i=1;i<arguments.length;i+=2) processor.setParameter(null,arguments[i],arguments[i+1]);
	}
}
