
function makeRequest()
{
    try {
        return new XMLHttpRequest();
    } catch (e) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
}

function requestDocumentText(url, doneCallback)
{
    var requestChangeCallback = function()
    {
        if (request.readyState == 4 && request.status == 200) {
            doneCallback(request.responseText);
        }
    };

    var request = makeRequest();
    request.onreadystatechange = requestChangeCallback;
    request.open("GET", url, true);
    request.send(null);
}

function updateElementFromUrl(elementId, url)
{
    var element = document.getElementById(elementId);
    var callback = function(responseText) { element.innerHTML = responseText };
    requestDocumentText(url, callback);
}

function appendToElement(id, s)
{
    var element = document.getElementById(id);
    element.innerHTML = element.innerHTML + s;
}

function debug(s)
{
    appendToElement('debug', s + '<br />\n');
}

function arrayKeys(array)
{
    var keys = new Array();

    for (key in array)
        keys.push(key);

    return keys;
}

function searchKanjiByRadicals(radicals)
{
    updateElementFromUrl('kanji', '/kanji?' + radicals.join(''));
}

function radicalClicked(element)
{
    var radical = element.innerHTML;
    var selected = window.selected;

    if (selected[radical] == undefined) {
        selected[radical] = true;
    } else {
        delete selected[radical];
    }

    var radicals = arrayKeys(selected);
    searchKanjiByRadicals(radicals);
    updateElementFromUrl('radicals', '/radicals?' + radicals.join(''));
}

function onLoad()
{
    searchKanjiByRadicals(new Array());
    updateElementFromUrl('radicals', '/radicals');
}

var selected = new Array();

