﻿Server.errorLevel = Server.errorLevels.fatal;
var Common = {
    Grid: { cancelReInvoke: false }
};
var windowWidth = getwindowwidth();
var windowHeight = getwindowheight();
Common.serverPingInterval = 5 * 60 * 1000;

// setting time on form. Updating every second.
setInterval(function()
{
    var сlientDateTimeDiv = document.getElementById('ClientDateTimeDiv');
    if (сlientDateTimeDiv)
    {
        var clientDate = new Date();
        сlientDateTimeDiv.innerHTML = clientDate.toLocaleDateString() + ' ' + clientDate.toLocaleTimeString();
    }
}, 1000);

setInterval(function()
{
    Server.get(Application.root + 'Home.mvc/Ping', true, null, Server.caches.noCache)
}, Common.serverPingInterval);


Common.registerNameSpace = function(nameSpace)
{
    var nameSpacesList = nameSpace.split(".");
    var parentObject = window;
    for (var i = 0; i < nameSpacesList.length; i++)
    {
        if (nameSpacesList[i] != '')
        {
            if (!parentObject[nameSpacesList[i]])
            {
                parentObject[nameSpacesList[i]] = {};
            }
            parentObject = parentObject[nameSpacesList[i]];
        }
    }
}

Common.resetGridFiltersFT = function(grid)
{
    if (grid.filterInfo.entries.length == 0)
        return;
    FormChangesTracker.instance.setFuncToCall(Common.resetGridFiltersFTRun, [grid]);
    if (!FormChangesTracker.instance.checkForChanges())
    {
        Common.resetGridFiltersFTRun(grid);
    }
}

Common.getGridSpecificLabel = function(grid, handler)
{
    if (grid.selectedRow)
    {
        Common.setBottomTitle(handler(grid.selectedRow));
    }
    else
    {
        Common.setBottomTitle();
    }
}

Common.resetGridFiltersFTRun = function(grid)
{
    grid.resetFilter();
    if (!grid.options.enableGrouping || !grid.groupInfo.isGrouped())
        grid.selectRowByIndex(0);
}

Common.coverAll = function(toShow, loadShow)
{
    if (toShow)
    {
        $('#blocking_div').show();
    }
    else
    {
        $('#blocking_div').hide();
        Loading.hide();
    }
    if (toShow && loadShow)
    {
        Loading.show();
    }
}

Common.altCover = function(toShow, loadShow)
{
    if (toShow)
    {
        $('#pageCoverDiv').show();
    }
    else
    {
        $('#pageCoverDiv').hide();
    }
}

function pageLoaded()
{
    windowWidth = getwindowwidth();
    windowHeight = getwindowheight();
    function menuItemHandler(i, el)
    {
        $($(el).children()[0]).bind('click', function(evt)
        {
            if (evt.stopPropagation)
            {
                evt.stopPropagation()
            }
            else
            {
                evt.cancelBubble = true;
            }

            Common.coverAll(true, true);
            window.location = this.href;
            return false;
        });
    }
    $('#menu').children().each(menuItemHandler);

    Common.main = $('#main');
    Common.top = $('#topContent');
    Common.bottom = $('#bottomContent');
    Common.single = $('#singleContent');
    horisontalResizer.create();

    setMainContainerSize();
    window.onresize = winResize;
    Common.coverAll(false);
    Common.altCover(false);
    Common.addMinimizer('topContentHead', 'topContent');
    Common.addMinimizer('bottomContentHead', 'bottomContent');

    if (Common.initHandler)
        Common.initHandler();
    winResize();
}

function setMainContainerSize()
{
    if (Common.main)
    {
        windowHeight = getwindowheight();
        Common.main.height(windowHeight - (126 + $('#menucontainer').height()));
        Common.main.width($('body').width() - 2);
    }
}

function winResize()
{
    windowWidth = getwindowwidth();
    windowHeight = getwindowheight();
    setMainContainerSize();
    Common.top.height(Math.round($('#main').height() / 2.3));

    if (window['horisontalResizer'])
    {
        invokeResizer(horisontalResizer);
    }

    if (Common && $type(Common.pageResizeHandler) == 'function' && Common.pageResizeHandler)
        Common.pageResizeHandler();
    Common.fitMaximized();
}

if (typeof TabControl != 'undefined' && TabControl)
{
    TabControl.VMORenderTabs = function(tabItem)
    {
        if (tabItem)
        {
            var objectInstance = tabItem.ownerTabControl;
            var tabControlTabsTableRow = document.getElementById(objectInstance.name + '_tabsTableRow');

            var tabControlTabsTableTd = document.createElement('TD'); ;
            tabControlTabsTableTd.setAttribute('vAlign', 'top');
            tabControlTabsTableRow.appendChild(tabControlTabsTableTd);

            var tabTable = document.createElement('TABLE');
            {
                tabTable.setAttribute('cellSpacing', '0');
                tabTable.setAttribute('cellPadding', '0');
                tabTable.setAttribute('border', '0');
                tabTable.onclick = function(event) { TabControl.handlers.itemClick(objectInstance, event, objectInstance.name, tabItem.id) }
                tabTable.className = 'TabOff ' + objectInstance.options.tabOffClass;
                tabTable.id = tabItem.id;
                tabTable.onmouseover = function() { objectInstance.mouseOver(tabItem.id); };
                tabTable.onmouseout = function() { objectInstance.mouseOut(tabItem.id); };
                tabControlTabsTableTd.appendChild(tabTable);

                var tabTBody = document.createElement('TBODY');
                tabTable.appendChild(tabTBody);

                var tabRow1 = document.createElement('TR');
                tabTBody.appendChild(tabRow1);
                {
                    var tabLC = document.createElement('TD');
                    tabLC.setAttribute('vAlign', 'top');
                    tabLC.className = 'TabLC';
                    tabRow1.appendChild(tabLC);

                    var tabLCimg = document.createElement('IMG');
                    tabLCimg.src = 'Images/TabFill.png';
                    tabLC.appendChild(tabLCimg);

                    var tabU = document.createElement('TD');
                    tabU.setAttribute('vAlign', 'top');
                    tabU.className = 'TabTop';
                    tabU.innerHTML = '&nbsp';
                    tabRow1.appendChild(tabU);

                    var tabRC = document.createElement('TD');
                    tabRC.setAttribute('vAlign', 'top');
                    tabRC.className = 'TabRC';
                    tabRow1.appendChild(tabRC);

                    var tabRCimg = document.createElement('IMG');
                    tabRCimg.src = 'Images/TabFill.png';
                    tabRC.appendChild(tabRCimg);
                }

                var tabRow2 = document.createElement('TR');
                tabTBody.appendChild(tabRow2);
                {
                    var tabL = document.createElement('TD');
                    tabL.setAttribute('vAlign', 'top');
                    tabL.className = 'TabLeft';
                    tabL.innerHTML = '&nbsp';
                    tabRow2.appendChild(tabL);

                    var tabI = document.createElement('TD');
                    tabI.setAttribute('vAlign', 'middle');
                    tabI.setAttribute('nowrap', 'nowrap');
                    tabI.className = 'TabInner';
                    tabRow2.appendChild(tabI);

                    var tabIspan = document.createElement('SPAN');
                    tabIspan.className = 'TabInnerText';
                    tabI.appendChild(tabIspan);

                    var tabR = document.createElement('TD');
                    tabR.setAttribute('vAlign', 'top');
                    tabR.className = 'TabRight';
                    tabR.innerHTML = '&nbsp';
                    tabRow2.appendChild(tabR);
                }
            }

            var InnerContent = tabItem.name;
            tabIspan.innerHTML = InnerContent;

            if (tabItem.allowClose)
            {
                tabI.innerHTML += ' ';
                var closeImg
                var closeImg = document.createElement('IMG');
                {
                    closeImg.setAttribute('alt', '');
                    closeImg.setAttribute('title', 'Close "' + tabItem.name + '"');
                    closeImg.setAttribute('width', '11');
                    closeImg.setAttribute('height', '11');
                    closeImg.id = tabItem.id + '_closer';
                    closeImg.src = 'controlResource.axd?controlKey=TabControl&resourceKey=Images.closeWindow.gif&type=image/gif';
                    closeImg.onclick = function() { return objectInstance.closeTab(tabItem.id); }
                    tabI.appendChild(closeImg);
                }
            }
        }
    }
}

function activeMenuItem(id)
{
    var menu = $('#menu');
    if (id)
    {
        var selFlag = false;

        menu.children().each(function(i, el)
        {
            $(el).removeClass('selected');
            if ($(el).attr('id') == id)
            {
                $(el).addClass('selected');
                selFlag = true;
            }
        });
        if (!selFlag)
            $(menu.children()[0]).addClass('selected');
    }
    else
    {
        var selectedMenuItem;
        menu.children().each(function(i, el)
        {
            if ($(el).hasClass('selected'))
            {
                selectedMenuItem = $(el).attr('id');
                return false;
            }
        });
        return selectedMenuItem;
    }
}

// grid common function
Common.selectGridFirstRecord = function(grid)
{
    if (!grid)
        return;
    if (!grid.groupInfo.isGrouped())
    {
        grid.selectRowByIndex(0);
        grid.scrollToTop();
    }
    else
    {
        // Open first group and select first record.
        var groupNumbers = [];
        for (var i = 0; i < grid.groupInfo.columns.length; i++)
            groupNumbers.push(0);
        grid.openSpecifiedGroup(grid.groupedTree.rootElement, groupNumbers);
        (function()
        {
            var child = grid.children.peek();
            child.selectRowByIndex(0);
        }).waitFor(100, function() { return (grid && !grid.getBusy()); });
    }
}

Common.commonGridActions = function(grid, tabControlStr)
{
    grid = grid || this;
    if (!grid)
        return;

    function wasSelected(grid)
    {
        if (grid.selectedRow)
        {
            grid.wasSelected = true;
        }
        else
        {
            grid.wasSelected = false;
        }
    }
    var eventManager = grid.eventHandlersManager;
    eventManager.register(JGrid.Events.rowClick, function(eventArgs)
    {        
        var grid = eventArgs.instance;
        while (grid.parentGrid)
            grid = grid.parentGrid;
        grid.clickedRow = eventArgs.eventParams[0];
    });
    eventManager.register(JGrid.Events.headerClicking, function(eventArgs)
    {
        wasSelected(eventArgs.instance);
    });
    eventManager.register(JGrid.Events.grouping, function(eventArgs)
    {
        wasSelected(eventArgs.instance);
    });
    eventManager.register(JGrid.Events.sorted, function(eventArgs)
    {
        if (eventArgs.eventParams[0].wasSelected)
            eventArgs.eventParams[0].selectRowByIndex(0);
    });
    if (tabControlStr !== undefined)
    {
        grid.eventHandlersManager.register(JGrid.Events.afterFilterApplied, function(eventArgs)
        {
            var tabControl = eval(tabControlStr);
            if (tabControl && tabControl.activeItem && grid.options.enableGrouping && grid.groupInfo.isGrouped())
            {
                tabControl.safeCloseCurrent();
            }
        });
    }
}
Common.checkGridForChanges = function(eventArgs, grid)
{
    if (typeof FormChangesTracker != 'undefined')
    {
        if (grid)
        {
            if (grid.editMode)
                grid.rowEditEnd();
            var doRefresh = grid.isDirty;
        }
        function callback(isSaving)
        {
            if (!isSaving) // canceling
            {
                if (grid && doRefresh)
                    grid.refresh();
            }
            if (!Common.Grid.cancelReInvoke)
                eventArgs.reInvoke();
            else
                Common.Grid.cancelReInvoke = false;
        }
        FormChangesTracker.instance.setFuncToCall(callback);
        eventArgs.cancel = FormChangesTracker.instance.checkForChanges();
    }
}
Common.checkGridSelectedRowChanged = function(grid)
{    
    if (!grid.clickedRow || !grid.selectedRow) return false;

    return grid.selectedRow.data[grid.options.rowUniqueKey] != grid.clickedRow.data[grid.options.rowUniqueKey];
}
// update grid and select row that was clicked before updating
Common.updateGridAndSelectRow = function(grid)
{
    if (!grid.clickedRow) return;

    var selRowChanged = Common.checkGridSelectedRowChanged(grid);
    var changingHandlers, changeHandlers, eventManager = grid.eventHandlersManager;
    if (!selRowChanged)
    {
        changingHandlers = eventManager.eventsCollection[JGrid.Events.selectChanging];
        changeHandlers = eventManager.eventsCollection[JGrid.Events.selectChange];
        eventManager.remove(JGrid.Events.selectChanging);
        eventManager.remove(JGrid.Events.selectChange);
    }
    var state = JGrid.internal.getState(grid);
    state.selectedRows = [grid.clickedRow.data[grid.options.rowUniqueKey]];

    var rowIndex = -1;
    if (grid.groupInfo && !grid.groupInfo.isGrouped() && grid.options.enableVirtualScroll)
    {
        rowIndex = grid.getRowIndex(grid.clickedRow);
    }
    else if (grid.groupInfo && grid.groupInfo.isGrouped() && grid.options.enableChildrenVirtualScroll)
    {
        rowIndex = grid.getChildGridRowIndex(grid.clickedRow);
    }
    if (rowIndex != -1)
    {
        var itemsToRender = Math.ceil(rowIndex / 3);
        if (itemsToRender > 10)
            grid.options.vsItemsToRender = itemsToRender;
        if (rowIndex > 99)
            grid.options.vsItemsToRetrieve = rowIndex + 1;
    }
    grid.setState(state, true);

    if (!selRowChanged)
    {
        eventManager.eventsCollection[JGrid.Events.selectChanging] = changingHandlers;
        eventManager.eventsCollection[JGrid.Events.selectChange] = changeHandlers;
    }

    if (selRowChanged)
        Common.Grid.cancelReInvoke = true;
}

Common.setTopTitle = function setHeaderTitle(title)
{
    $('#topContentHead').html((title) ? title : '&nbsp;');
}

Common.setBottomTitle = function setFooterTitle(title)
{
    $('#bottomContentHead').html((title) ? title : '&nbsp;');
}

Common.addMinimizer = function addHeaderMinimizer(placeHolderId, operateDivId)
{
    var img = $('<img src="/Images/redMinus.gif" />')
    .attr('id', 'minImage_' + placeHolderId)
    .attr('border', 0)
    .css('margin', '1px 2px')
    .appendTo($('#' + placeHolderId).parent().nextAll())
    .click(function(evt) { Common.handleMinimize(operateDivId, img) });
}
Common.handleMinimize = function handleMinimize(operateDivId, img)
{
    Common.altCover(1);
    var opEl = $('#' + operateDivId);
    var state = opEl.css('display') != 'none';
    if (state)
    {
        opEl.hide();
        opEl.attr('minimized', '1');
        img.attr('src', '/Images/redPlus.gif');
    }
    else
    {
        img.attr('src', '/Images/redMinus.gif');
        opEl.removeAttr('minimized');
        opEl.show();
    }
    var minimized;
    var maximized;
    $('#topContent, #bottomContent').each(function(index, item)
    {
        if ($(item).attr('minimized'))
            (minimized && minimized.length) ? minimized.add(item) : minimized = $(item);
        else
            (maximized && maximized.length) ? maximized.add(item) : maximized = $(item);
    });
    if (minimized && minimized.length > 0)
        horisontalResizer.instance.handle.hide();
    else
    {
        horisontalResizer.instance.handle.show();
    }
    winResize.delay(1);
}

Common.fitMaximized = function fitMaximized()
{
    var minimized;
    var maximized;
    $('#topContent, #bottomContent').each(function(index, item)
    {
        if ($(item).attr('minimized'))
            (minimized && minimized.length) ? minimized.add(item) : minimized = $(item);
        else
            (maximized && maximized.length) ? maximized.add(item) : maximized = $(item);
    });
    
    if (minimized && maximized && minimized.length == 1)
    {
        maximized.height($('#main').height() - (getObjectFullHeight(minimized.attr('id') + 'Head') + 26));
    }
    if (horisontalResizer)
        horisontalResizer.resizing();
    Common.altCover(0);
}