var Widgets = new function()
{
    this.GridWidget = new function()
    {
    	this.getSelectedItem = function(gridWidgetId)
        {
            // get all item object for given grid
            var objects = document.getElementsByName('widgetItems_' + gridWidgetId + '[]');

            // iterate through the objects
            for (var i = 0; i < objects.length; i++)
            {
                // search for a checked item
                if (objects[i].checked)
                    return objects[i].value;
            }

            // when no item is selected then return empty string
            return '';
        }

        this.onCheckboxClick = function(gridWidgetId, itemValue, event)
        {
            // get all item objects for given grid
            var objects = document.getElementsByName('widgetItems_' + gridWidgetId + '[]');

            // iterate through the objects
            for (var i = 0; i < objects.length; i++)
            {
                // unckeck the checkbox for all items
                // other than the specified item
                if (objects[i].value != itemValue)
                    objects[i].checked = false;
            }

            // stop click event propagation
            if (event && event.stopPropagation)
                event.stopPropagation();
            else if (window.event)
                window.event.cancelBubble = true;
        }

        this.onRowClick = function(gridWidgetId, itemValue)
        {
            // get all item objects for given grid
            var objects = document.getElementsByName('widgetItems_' + gridWidgetId + '[]');

            // iterate through the objects
            for (var i = 0; i < objects.length; i++)
            {
                if (objects[i].value == itemValue)
                {
                    // toggle the checkbox for the specified item
                    objects[i].checked = !objects[i].checked;
                }
                else
                {
                    // unckeck the checkbox for all other items
                    objects[i].checked = false;
                }
            }
        }

        this.onPageNumberKeyDown = function(gridWidgetId, event)
        {
            // get page number object for specified grid
            pageNumberObject = document.getElementById('widgetPageNumber_' + gridWidgetId);

            // clear the key code temporary variable
            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 the page number object
                // and call "onblur" event handler
                pageNumberObject.blur();

                // do not call "onpagechange" event handler
                return false;
            }
            else if (keyCode == 13) // enter
            {
                // release focus on page number object
                // and do not call "onblur" event handler
                var oldOnBlur = pageNumberObject.onblur;
                pageNumberObject.onblur = '';
                pageNumberObject.blur();
                pageNumberObject.onblur = oldOnBlur;

                // call "onpagechange" event handler
                return true;
            }

            // do not call "onpagechange" event handler
            return false;
        }
    }

    this.BrowseWidget = new function()
    {
    	this.enable = function(browseWidgetId)
        {
            // enable widget components
            document.getElementById(browseWidgetId).disabled = false;
            document.getElementById('widgetBrowse_' + browseWidgetId).disabled = false;
        }

    	this.disable = function(browseWidgetId)
        {
            // disable widget components
            document.getElementById(browseWidgetId).disabled = true;
            document.getElementById('widgetBrowse_' + browseWidgetId).disabled = true;
        }
    }
}
