function _gel(id) {
    return document.getElementById(id);
}
function hasAncestor(element, ancestor) {
    var el = ref(element);
    var an = ref(ancestor);
    while (el != document && el != null) {
        if (el == an) return true;
        el = el.parentNode;
    }
    return false;
}
var addListener = function() {
    if (window.addEventListener) {
        return function(el, type, fn) {
            el.addEventListener(type, fn, false);
        };
    }
    else if (window.attachEvent) {
        return function(el, type, fn) {
            var f = function() {
                fn.call(el, window.event);
            };
            if (!el._listeners) el._listeners = {};
            if (!el._listeners[type]) el._listeners[type] = {};
            el._listeners[type][fn] = f;
            el.attachEvent('on' + type, f);
        };
    }
    else {
        return function(el, type, fn) {
            el['on' + type] = fn;
        }
    }
} ();
var removeListener = function(el, type, func) {
    if (el.removeEventListener) {
        el.removeEventListener(type, func, false);
    } else if (el.detachEvent && el._listeners
&& el._listeners[type] && el._listeners[type][func]) {
        el.detachEvent('on' + type, el._listeners[type][func]);
    }
};
var dropdownMenu = {};
function dropdown(e, menuId, parentId, eventType) {
    hideDropdown();
    dropdownMenu.id = menuId;
    dropdownMenu.parentId = (parentId) ? parentId : _gel(menuId).parentNode.id;
    dropdownMenu.eventType = (eventType) ? eventType : "click";
    if (!e) e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
    showDiv(dropdownMenu.id);
    addClass(_gel(dropdownMenu.parentId), 'show-dropdown');
}
function hideDropdown() {
    if (dropdownMenu.id) {
        hideDiv(dropdownMenu.id);
        removeClass(_gel(dropdownMenu.parentId), 'show-dropdown');
        dropdownMenu = {};
    }
}
addListener(document, "click", function(e) {
    hideDropdown()
});
addListener(document, "mouseover", function(e) {
    var el = e.target || e.srcElement;
    if (dropdownMenu && dropdownMenu.eventType && dropdownMenu.parentId) {
        if (e.type.indexOf(dropdownMenu.eventType) != -1 && !hasAncestor(el, dropdownMenu.parentId))
            hideDropdown();
    }
});
function getDisplayStyleByTagName(o) {
    var n = o.nodeName.toLowerCase();
    return (n == "span" || n == "img" || n == "a") ? "inline" : (n == 'tr' || n == 'td' ? "" : "block");
}
function hideDiv(divName) {
    var tempDiv = ref(divName);
    if (!tempDiv) {
        return;
    }
    if (tempDiv.style.display == "inline") {
        addClass(tempDiv, "wasinline");
    } else if (tempDiv.style.display == "block") {
        addClass(tempDiv, "wasblock");
    }
    tempDiv.style.display = "none";
}
function hasClass(element, _className) {
    if (!element) {
        return;
    }
    var upperClass = _className.toUpperCase();
    if (element.className) {
        var classes = element.className.split(' ');
        for (var i = 0; i < classes.length; i++) {
            if (classes[i].toUpperCase() == upperClass) {
                return true;
            }
        }
    }
    return false;
}
function addClass(element, _class) {
    if (!hasClass(element, _class)) {
        element.className += element.className ? (" " + _class) : _class;
    }
}
function removeClass(element, _class) {
    var upperClass = _class.toUpperCase();
    var remainingClasses = [];
    if (element.className) {
        var classes = element.className.split(' ');
        for (var i = 0; i < classes.length; i++) {
            if (classes[i].toUpperCase() != upperClass) {
                remainingClasses[remainingClasses.length] = classes[i];
            }
        }
        element.className = remainingClasses.join(' ');
    }
}
function showDiv(divName) {
    var tempDiv = ref(divName);
    if (!tempDiv) {
        return;
    }
    if (hasClass(tempDiv, "wasinline")) {
        tempDiv.style.display = "inline";
        removeClass(tempDiv, "wasinline");
    } else if (hasClass(tempDiv, "wasblock")) {
        tempDiv.style.display = "block";
        removeClass(tempDiv, "block");
    } else {
        tempDiv.style.display = getDisplayStyleByTagName(tempDiv);
    }
}
function ref(instance_or_id) {
    return (typeof (instance_or_id) == "string") ? document.getElementById(instance_or_id) : instance_or_id;
}
//function selectI18n(loc, parameter) {
//    return; // todo!
//}
