
function get(x) { return document.getElementById(x) };

function createXMLHttpRequest() {
    if(typeof XMLHttpRequest != 'undefined')
        return new XMLHttpRequest();
    else {
        /* @cc_on @ */
        /* @if(@_jscript_version >= 5)
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(E) {
                return false;
            }
        }
        @end @ */
    }
    return false;
}

function requestPage(url, callback, postData) {
    var request = createXMLHttpRequest();
    if(postData) {
        request.open("POST", url, true);
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }
    else {
        url = encodeURI(url);
        request.open("GET", url, true);
        postData = null;
    }
    request.onreadystatechange = function() {
        if(request.readyState == 4) {
            callback(request.responseText);
            request.onreadystatechange = nullFunction;
        }
    }
    request.send(postData);
}

function nullFunction() {;};


// ------- utility end ---------


function showDiff() {
    var url = this.href.replace(/txt$/, "htm");
    var p = this.parentNode.parentNode;
    // have we already downloaded it?
    var lastElement = p.childNodes[p.childNodes.length - 1];
    if(lastElement.className == "diff") {
        // yes
        lastElement.style.display = "block";
        this.innerHTML = "Hide Difference &nbsp;<span>&sect;</span>";
    }
    else {
        var a = this;
        requestPage(url, function(diff) {
            var div = document.createElement("div");
            div.className = "diff";
            div.innerHTML = diff;
            p.appendChild(div);
            a.innerHTML = "Hide Difference &nbsp;<span>&sect;</span>";
        });
    }
    this.onclick = hideDiff;
    this.blur();
    return false;
}

function hideDiff() {
    var p = this.parentNode.parentNode;
    p.childNodes[p.childNodes.length - 1].style.display = "none";
    this.innerHTML = "View Difference &nbsp;<span>&sect;</span>";
    this.onclick = showDiff;
    this.blur();
    return false;
}


function init() {
    // Make the logo clicky
    if(get("changelog"))
        initDiffs();
}

function initDiffs() {
    var as = document.getElementsByTagName("a");
    var a;
    for(var i = 0, j = as.length; i < j; ++i) {
        a = as[i];
        if(a.className == "show-diff") {
            a.onclick = showDiff;
        }
    }
}
