var UI = new function()
{
    this.showWaitPopup = function()
    {
        // prepare popup's inner html
        var innerHtml = '<div id="popup_dialog_wrapper">' +
                            '<div id="popup_dialog_content">' +
                                '<img src="images/wait.gif" alt="" width="48" height="48" />' +
                            '</div>' +
                        '</div>';

        // show wait popup
        Popup.show('wait_popup', innerHtml);
    }

    this.hideWaitPopup = function()
    {
        // hide wait popup
        Popup.hide('wait_popup');
    }

    this.showInformationPopup = function(caption, content, okButtonText, onOkClick)
    {
        // prepare popup's inner html
        var innerHtml = '<div id="popup_dialog_wrapper">' +
                            '<div id="popup_dialog_caption">' +
                                '<img src="images/logo.gif" alt="" width="16" height="16" />' +
                                caption +
                            '</div>' +
                            '<div id="popup_dialog_content">' +
                                content +
                            '</div>' +
                            '<div id="popup_dialog_buttons">' +
                                '<input id="information_popup_ok" type="button" value="' + okButtonText + '" />' +
                            '</div>' +
                        '</div>';

        // show information popup
        Popup.show('information_popup', innerHtml);

        // set onOkClick event handler
        document.getElementById('information_popup_ok').onclick = function()
        {
            // hide information popup
            Popup.hide('information_popup');

            // evaluate onOkClick code
            if (onOkClick != null)
                eval(onOkClick);
        }
    }

    this.showPromptPopup = function(caption, content, yesButtonText, noButtonText, onYesClick, onNoClick)
    {
        // prepare popup's inner html
        var innerHtml = '<div id="popup_dialog_wrapper">' +
                            '<div id="popup_dialog_caption">' +
                                '<img src="images/logo.gif" alt="" width="16" height="16" />' +
                                caption +
                            '</div>' +
                            '<div id="popup_dialog_content">' +
                                content +
                            '</div>' +
                            '<div id="popup_dialog_buttons">' +
                                '<input id="prompt_popup_yes" type="button" value="' + yesButtonText + '" />' +
                                '<input id="prompt_popup_no" type="button" value="' + noButtonText + '" />' +
                            '</div>' +
                        '</div>';

        // show prompt popup
        Popup.show('prompt_popup', innerHtml);

        // set onYesClick event handler
        document.getElementById('prompt_popup_yes').onclick = function()
        {
            // hide prompt popup
            Popup.hide('prompt_popup');

            // evaluate onYesClick code
            if (onYesClick != null)
                eval(onYesClick);
        }

        // set onNoClick event handler
        document.getElementById('prompt_popup_no').onclick = function()
        {
            // hide prompt popup
            Popup.hide('prompt_popup');

            // evaluate onNoClick code
            if (onNoClick != null)
                eval(onNoClick);
        }
    }

    this.getTableSelectedItem = function(tableId)
    {
        // get all item elements
        var itemElements = document.getElementsByName(tableId + '_items[]');

        // iterate through all item elements
        for (var i = 0; i < itemElements.length; i++)
        {
            // search for a checked item
            if (itemElements[i].checked)
                return itemElements[i].value;
        }

        // when no item is selected then return empty string
        return '';
    }

    this.onTableCheckboxClick = function(tableId, item, event)
    {
        // get all item elements
        var itemElements = document.getElementsByName(tableId + '_items[]');

        // iterate through all found item elements
        for (var i = 0; i < itemElements.length; i++)
        {
            if (itemElements[i].value != item)
            {
                // unckeck the checkbox for all items other than the specified item
                itemElements[i].checked = false;
            }
        }

        // stop click event propagation
        if (event && event.stopPropagation)
            event.stopPropagation();
        else if (window.event)
            window.event.cancelBubble = true;
    }

    this.onTableRowClick = function(tableId, item)
    {
        // get all item elements
        var itemElements = document.getElementsByName(tableId + '_items[]');

        // iterate through all found item elements
        for (var i = 0; i < itemElements.length; i++)
        {
            if (itemElements[i].value == item)
            {
                // toggle the checkbox for the specified item
                itemElements[i].checked = !itemElements[i].checked;
            }
            else
            {
                // unckeck the checkbox for all other items
                itemElements[i].checked = false;
            }
        }
    }

    this.onTablePageNumberEditKeyDown = function(tableId, event)
    {
        // get page number edit
        pageNumberEdit = document.getElementById(tableId + '_page_number');

        // clear key code
        var keyCode = 0;

        // get key code
        if (event && event.which)
            keyCode = event.which;
        else if (window.event)
            keyCode = window.event.keyCode;

        if (keyCode == 27) // esc
        {
            // release focus on table page number edit and call onblur event handler
            pageNumberEdit.blur();

            // do not call onpagechange event handler
            return false;
        }
        else if (keyCode == 13) // enter
        {
            // release focus on table page number edit and do not call onblur event handler
            var oldOnBlur = pageNumberEdit.onblur;
            pageNumberEdit.onblur = '';
            pageNumberEdit.blur();
            pageNumberEdit.onblur = oldOnBlur;

            // call onpagechange event handler
            return true;
        }

        // do not call onpagechange event handler
        return false;
    }
}