var net;
if (!net || !net.canuda) {
    throw new Error("net.canuda has not been loaded!");
}

(function () {
    var checkMailFreq = 30000;
    var inited = false;
    var title = null;

    var checkRecentMail = function() {
        var mail = document.getElementById('dek_recent_mail');
        if (!mail) { return; }
//        var params = 'ajax=true&action=getRecentMail';
        var params = { ajax: 'true', action: 'getRecentMail' };

        var onComplete = function(req) {
            if (!mail) { return; }
            if (mail.firstChild) {
                mail.replaceChild(document.createTextNode(req.responseText),
                                  mail.firstChild);
            } else {
                mail.appendChild(document.createTextNode(req.responseText));
            }
            document.title = title + req.responseText;
            setTimeout(checkRecentMail, checkMailFreq);
        };

        var onTimeout = function()
        {
            setTimeout(checkRecentMail, checkMailFreq);
        };

//        new net.canuda.Ajax().call(net.canuda.Ajax.Method.get, params,
//                                   onComplete, onTimeout);
        net.canuda.Ajax.call({ params: params, onComplete: onComplete,
                               onTimeout: onTimeout, onError: onTimeout });
    };

    var init = function() {
        if (inited) { return; }
        inited = true;
        title = document.title;
        
        var new_entry = document.getElementById('dek_entry');
        if (new_entry) {
            if (location.href.indexOf('addEntry') != -1) {
                // Select body header and body from the new entry.
                // Focus gets set on last selected (header).
                // TODO: doesn't work on IE6. Not tested on IE7.
                new_entry.getElementsByTagName('textarea').item(0).select();
                new_entry.getElementsByTagName('input').item(0).select();
            } else {
                // Not new entry, but edit already existing. Focus but not select.
                new_entry.getElementsByTagName('input').item(0).focus();
            }
        } else {
            // set focus to google search box.
            if (location.href.indexOf('#') == -1) {
                var body = document.getElementById('dek_body');
                if (body) {
                    var input = body.getElementsByTagName('input')[0];
                    if (input) { input.focus(); }
                }
            }
        }

        // If logged in, start mail polling
        if (document.getElementById('dek_recent_mail')) {
            checkRecentMail();
        }

        // Search for all menu panels
        var menuTitles = [];
        var nodes = document.getElementById('dek_menu').
                             getElementsByTagName('dl')[0].
                             childNodes;
        for (var i = 0; i < nodes.length; ++i) {
            var node = nodes[i];
            if (node.tagName == 'DT') {
                menuTitles[menuTitles.length] = node;
                net.canuda.Event.addEventListener(node, 'selectstart', function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    return false;
                });
                net.canuda.Event.addEventListener(node, 'mousedown', function(e) {
                    e.stopPropagation();
                    e.preventDefault();
                    return false;
                });
                net.canuda.Event.addEventListener(node, 'dblclick', function(e) {
                    var menuContent = e.target.nextSibling;
                    while (menuContent && menuContent.tagName != 'DD') {
                        menuContent = menuContent.nextSibling;
                    }
                    if (menuContent && menuContent.tagName == 'DD') {
                        menuContent.style.display =
                            menuContent.style.display == 'none' ? '' : 'none';
                    }
                });
            }
        }
    };

    // Sould apply polling or something for browsers other
    // than gecko-based ones.
    net.canuda.Event.addEventListener(window, 'DOMContentLoaded', init);
    net.canuda.Event.addEventListener(window, 'load', init);
})();
