function loadXMLString(txt) {
    try //Internet Explorer
			    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(txt);
        return xmlDoc;
    }
    catch (e) {
        try //Firefox, Mozilla, Opera, etc.
			    {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(txt, "text/xml");
            return xmlDoc;
        }
        catch (e) { alert(e.message) }
    }
    return null;
}

function loadXMLDoc(fname) {
    var xmlDoc;
    // code for IE
    if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("", "", null);
    }
    else {
        alert('Your browser cannot handle this script');
    }
    xmlDoc.async = false;
    xmlDoc.load(fname);
    return (xmlDoc);
}


function replaceSubstring(inputString, fromString, toString) {
    var temp = inputString;
    if (fromString == "") {
        return inputString;
    }

    if (toString.indexOf(fromString) == -1) {
        while (temp.indexOf(fromString) != -1) {
            var toTheLeft = temp.substring(0, temp.indexOf(fromString));
            var toTheRight = temp.substring(temp.indexOf(fromString) + fromString.length, temp.length);
            temp = toTheLeft + toString + toTheRight;
        }
    }
    else {
        var midStrings = new Array("~", "`", "_", "^", "#");
        var midStringLen = 1;
        var midString = "";

        while (midString == "") {
            for (var i = 0; i < midStrings.length; i++) {
                var tempMidString = "";
                for (var j = 0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
                if (fromString.indexOf(tempMidString) == -1) {
                    midString = tempMidString;
                    i = midStrings.length + 1;
                }
            }
        }

        while (temp.indexOf(fromString) != -1) {
            var toTheLeft = temp.substring(0, temp.indexOf(fromString));
            var toTheRight = temp.substring(temp.indexOf(fromString) + fromString.length, temp.length);
            temp = toTheLeft + midString + toTheRight;
        }

        while (temp.indexOf(midString) != -1) {
            var toTheLeft = temp.substring(0, temp.indexOf(midString));
            var toTheRight = temp.substring(temp.indexOf(midString) + midString.length, temp.length);
            temp = toTheLeft + toString + toTheRight;
        }
    }
    return temp;
}



Array.prototype.has = function(v) {
    for (i = 0; i < this.length; i++) {
        if (this[i] == v) return i;
    }
    return -1;
}


function fixLinks() {

    links = document.getElementsByTagName("a");
    var linksText = new Array();
    var linksOnPage = new Array();
    x = 0;

    for (var i in links) {

        if (linksText.has(links[i].innerHTML) < 0) {
            linksText[x] = links[i].innerHTML;
            linksOnPage[x] = links[i];
            x++
        }
        else {
            links[i].href = linksOnPage[linksText.has(links[i].innerHTML)].href;
        }

    }

}



function writeCalendar() {

    var sCalendarText;

    var container = document.getElementById('calendar-container');
    var code = innerXHTML(container);

    sCalendarText = '<?xml version="1.0" encoding="ISO-8859-1"?>\n<calendar>\n' +
                    code + '\n</calendar>';

    mXmlDoc = loadXMLString(sCalendarText);

    xsl = loadXMLDoc("/xslt/calendar_only.xsl");

    // code for IE
    if (window.ActiveXObject) {
        ex = mXmlDoc.transformNode(xsl);
        document.getElementById("calendar_content").innerHTML = ex;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsl);
        resultDocument = xsltProcessor.transformToFragment(mXmlDoc, document);
        document.getElementById("calendar_content").appendChild(resultDocument);
    }


}

function navYear(nYear) {
    ShowCalendar(48, nYear, nYear, 'a', '', 'False', '')
}

function navMonth(nMonth, nYear) {
    sURL = document.location.href;
    sURL = sURL.substring(0, sURL.indexOf("#")) + "#" + nMonth + "-" + nYear;
    window.location = sURL;
    window.location.reload();
}


function writeCalendarHeader() {

    var monthNames = [".", "January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

    var sMonth = document.getElementById("ddMonth").value;

    var sYear = document.getElementById("ddYear").value;

    header = document.getElementById("calendar_header");

    header.innerHTML = '<h1><center>' + monthNames[sMonth] + ' ' + sYear + '</center><br />' +
    '<div id="leftNav" style="float: left"><a href="javascript:navMonth(' + (sMonth - 1) + ', ' + sYear + ')">&lt;</a></div>' +
    '<div id="leftNav" style="float: right"><a href="javascript:navMonth(' + (parseInt(sMonth) + 1) + ', ' + sYear + ')">&gt;</a></div>';

}
