(function($) {

    // Show table menu
    $.fn.showTMenu = function(event, options) {
        var defaults = {
            x_offset: 0,
            y_offset: 0,
            container_id: 'table_action_menu',
            parent_id: 'menu_actn_tpls',
            menu_class: 'use_menu',
            content: 'no content'
        };
        
        var opts = $.extend(defaults, options);
        
        var menu = '<div class="w-use_menu" id="'+defaults.parent_id+'" style="display: none;">' +
                        '<div class="use_menu">' +
                            '<table cellspacing="0">' +
                                '<tr>' +
                                    '<td class="lt_"></td>' +
                                    '<td class="t_"></td>' +
                                    '<td class="rt_"></td>' +
                                '</tr>' +
                                '<tr>' +
                                    '<td class="l_"></td>' +
                                    '<td class="cont">' + defaults.content + '</td>' +
                                    '<td class="r_"></td>' +
                                '</tr>' +
                                '<tr>' +
                                    '<td class="lb_"></td>' +
                                    '<td class="b_"></td>' +
                                    '<td class="rb_"></td>' +
                                '</tr>' +
                            '</table>' +
                        '</div>' +
                    '</div>';
        
        $('#'+defaults.container_id).html(menu);
        cursor = getPosition(event);
        x = cursor.x - defaults.x_offset; // Half from width of td + 13px
        y = cursor.y + defaults.y_offset; // Do not hide all clickable element if user clicks on top
        $('.'+defaults.menu_class).css('top', y+'px');
        $('.'+defaults.menu_class).css('left', x+'px');
        
        $('#'+defaults.parent_id).show();
        
        return false;
    }

    $.fn.hideTMenu = function(options) {
        var defaults = {
            container_id: 'table_action_menu',
            parent_id: 'menu_actn_tpls'
        };
        
        $.extend(defaults, options);
        
        // Hide table menu
        $('#'+defaults.container_id).empty();
        $('#'+defaults.parent_id).show();
    };
    
    function getPosition(e) {
        e = e || window.event;
        var cursor = {x:0, y:0};
        if (e.pageX || e.pageY) {
            cursor.x = e.pageX;
            cursor.y = e.pageY;
        }
        else {
            var de = document.documentElement;
            var b = document.body;
            cursor.x = e.clientX +
                (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
            cursor.y = e.clientY +
                (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
        }
        return cursor;
    }
    
})(jQuery);

