function transform(xml, xsl) {
    if(window.ActiveXObject) {
    // code for IE
        var dummy = document.createElement('div');
        dummy.innerHTML = xml.XMLDocument.transformNode(xsl);
        return dummy;
    } else if(document.implementation && document.implementation.createDocument) {
    // code for Mozilla, Firefox, Opera, etc.
        var xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        var dummy = document.createElement('div');
        try {
            dummy.appendChild(xsltProcessor.transformToFragment(xml, document));
        } catch(e) {
            alert('Your browser is unable to natively transform xml. Hence, instead of adding lots of libraries (implementing something that a browser should do on its own), I chose not to support your browser');
            return;
        }
        return dummy;
    } else
        alert('Your browser is unable to natively transform xml. Hence, instead of adding lots of libraries (implementing something that a browser should do on its own), I chose not to support your browser');
}

function syncLoad(filename) {
    var loader;
    if(window.ActiveXObject) {
    // code for IE
        loader = new ActiveXObject('Microsoft.XMLDOM');
        loader.async = false;
        loader.load(filename);
        return loader;
    }
    if(document.implementation && document.implementation.createDocument) {
    // code for Mozilla, Firefox, Opera, etc.
        loader = document.implementation.createDocument('', '', null);
        if(loader.load) {
            loader.async = false;
            loader.load(filename);
            return loader;
        } else
            loader = undefined;
    }

    // code for Safari
    loader = new XMLHttpRequest();
    loader.open('GET', filename, false);
    loader.send(null);
    if((loader.readyState == 4) && (loader.status == 200)) {
        var dummy = document.implementation.createDocument('', '', null);
        dummy.nodeValue = loader.responseText;
        return dummy;
    }
    return null;
}
