function loginOnLoad() {
    function _addEventListener(node, event, fn) {
        if (node.addEventListener) node.addEventListener(event, fn, false);
        else node.attachEvent("on" + event, fn);
    }

    function _removeEventListener(node, event, fn) {
        if (node.removeEventListener) node.removeEventListener(event, fn, false);
        else node.detachEvent("on" + event, fn);
    }

    function _addClass(node, token) {
		if (!token || _hasClass(node, token)) return;
		if (!node.className) {
			node.className = token;
			return;
		};
		node.className += " " + token;
	}

	function _removeClass(node, token) {node.className = node.className.replace(new RegExp("\\s?\\b" + token + "\\b"), "")};

	function _hasClass(node, token) {
		if (node.className.search(new RegExp("\\b" + token + "\\b")) != -1) return true;
		return false;
	}


    function _getEventTarget(e) {
        if (e.target) return e.target;
        else return e.srcElement;
    }

    function _getRelatedTarget(e) {
        if (e.relatedTarget) return e.relatedTarget;
        if (e.type == 'mouseover') return e.fromElement;
        else if (e.type == 'mouseout') return e.toElement;
        return null;
    }

    function _preventEventDefault(e) {
        if (e.preventDefault) e.preventDefault();
        return false;
    }



    var CLASS_HOVER = "account-hover";


    var link;
    var over;
    var focus;


    function _onMouseOver(e) {
        _removeEventListener(link, 'mouseover', _onMouseOver);
        _addEventListener(link.parentNode.parentNode, 'mouseout', _onMouseOut);

        over = true;
        if (focus) return;

        _addClass(link.parentNode.parentNode, CLASS_HOVER);
    }

    function _onMouseOut(e) {
        var node = _getRelatedTarget(e);
        if (!node) return;

        var parent = link.parentNode.parentNode;
        for(; node.parentNode; node = node.parentNode) {
            if (node == parent) return;
        }

        _removeEventListener(link.parentNode, 'mouseout', _onMouseOut);
        _addEventListener(link, 'mouseover', _onMouseOver);

        over = false;
        if (focus) return;

        _removeClass(link.parentNode.parentNode, CLASS_HOVER);
    }

    function _onClick(e) {
        link.parentNode.getElementsByTagName('input')[0].focus();

        return _preventEventDefault(e);
    }

    function _onFocus(e) {
        focus = true;
        if (over) return;

        _addClass(link.parentNode.parentNode, CLASS_HOVER);
    }

    function _onBlur(e) {
        focus = false;
        if (over) return;

        _removeClass(link.parentNode.parentNode, CLASS_HOVER);
    }

    (function() {
        if (window.removeEventListener) {
            window.removeEventListener('DOMContentLoaded', loginOnLoad, false);
            window.removeEventListener('load', loginOnLoad, false);
        } else window.detachEvent('onload', loginOnLoad);

        link = document.getElementById('login-link');
        if (!link) return;

        over = false;
        focus = false;

        _addEventListener(link, 'mouseover', _onMouseOver);
        _addEventListener(link, 'click', _onClick);

        var node = link.parentNode.getElementsByTagName('input');
        for (var i = 0, item = node[0]; item; item = node[++i]) {
            _addEventListener(item, 'focus', _onFocus);
            _addEventListener(item, 'blur', _onBlur);
        }

        node = link.parentNode.getElementsByTagName('a');
        for (i = 0, item = node[0]; item; item = node[++i]) {
             if (!_hasClass(item, "password")) continue;
            _addEventListener(item, 'focus', _onFocus);
            _addEventListener(item, 'blur', _onBlur);
        }
    })();
}



if (window.addEventListener) {
    window.addEventListener('DOMContentLoaded', loginOnLoad, false);
    window.addEventListener('load', loginOnLoad, false);
} else if (window.attachEvent) window.attachEvent('onload', loginOnLoad);
