﻿
/*
    Computer Science Group, LLC
    225-766-2397 office
    225-205-0263 cell
    darrell@computersciencegroup.com
    Copyright © 2008 Computer Science Group, LLC, All rights reserved.
*/

//csgToolbar(<opToolbarID>)
//04/20/2008
function csgToolbar(opToolbarID)
{
    //global used in properties/methods/events
    var oCsgToolbar = this;
    /****************************************************************************************
    properties
    ****************************************************************************************/
    this.insertStatus = false;
    this.toolbar = document.getElementById(opToolbarID);
    //cannot continue if toolbar is not found.
    if (!this.toolbar)
    {
        alert("Toolbar " + opToolbarID + " not found.");
        return;
    }
    this.toolbarID = opToolbarID;
    this.enabled = true;
    /****************************************************************************************
    events
    ****************************************************************************************/
    //onclick
    //10/30/2009 - added document.readyState == "complete"
    this.onClick = function()
    {
        if (document.readyState == "complete")
        {
            if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
            {
                if (ocsgPage.toolbarOnClick) { ocsgPage.toolbarOnClick(event.srcElement); }
            }
        }
        else { alert(pageDocumentIsLoadingMsg); }
    }
    this.toolbar.onclick = oCsgToolbar.onClick;
    //ondblclick
    this.onDblClick = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (window.page_toolbarOnDblClick) { window.page_toolbarOnDblClick(event.srcElement); }
        }
    }
    this.toolbar.ondblclick = oCsgToolbar.onDblClick;
    //onmousedown
    this.onMouseDown = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (oCsgToolbar.thisIsAButton(event.srcElement) == true) { event.srcElement.className = "csgToolbarButtonMouseDown"; }
            if (window.page_toolbarOnMouseDown) { window.page_toolbarOnMouseDown(event.srcElement); }
        }
    }
    this.toolbar.onmousedown = oCsgToolbar.onMouseDown;
    //onmouseup
    this.onMouseUp = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (oCsgToolbar.thisIsAButton(event.srcElement) == true) { event.srcElement.className = "csgToolbarButtonMouseUp"; }
            if (window.page_toolbarOnMouseUp) { window.page_toolbarOnMouseUp(event.srcElement); }
        }
    }
    this.toolbar.onmouseup = oCsgToolbar.onMouseUp;
    //onmouseover
    this.onMouseOver = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (oCsgToolbar.thisIsAButton(event.srcElement) == true) { event.srcElement.className = "csgToolbarButtonMouseOver"; }
            if (window.page_toolbarOnMouseOver) { window.page_toolbarOnMouseOver(event.srcElement); }
        }
    }
    this.toolbar.onmouseover = oCsgToolbar.onMouseOver;
    //onmousemove
    this.onMouseMove = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (window.page_toolbarOnMouseMove) { window.page_toolbarOnMouseMove(event.srcElement); }
        }
    }
    this.toolbar.onmousemove = oCsgToolbar.onMouseMove;
    //onmouseout
    this.onMouseOut = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (oCsgToolbar.thisIsAButton(event.srcElement) == true) { event.srcElement.className = "csgToolbarButtonMouseOut"; }
            if (window.page_toolbarOnMouseOut) { window.page_toolbarOnMouseOut(event.srcElement); }
        }
    }
    this.toolbar.onmouseout = oCsgToolbar.onMouseOut;
    //onkeypress
    this.onKeyPress = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (window.page_toolbarOnKeyPress) { window.page_toolbarOnKeyPress(event.srcElement); }
        }
    }
    this.toolbar.onkeypress = oCsgToolbar.onKeyPress;
    //onkeydown
    this.onKeyDown = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (window.page_toolbarOnKeyDown) { window.page_toolbarOnKeyDown(event.srcElement); }
        }
    }
    this.toolbar.onkeydown = oCsgToolbar.onKeyDown;
    //onkeyup
    this.onKeyUp = function()
    {
        if (oCsgToolbar.buttonIsDisabled(event.srcElement) == false)
        {
            if (window.page_toolbarOnKeyUp) { window.page_toolbarOnKeyUp(event.srcElement); }
        }
    }
    this.toolbar.onkeyup = oCsgToolbar.onKeyUp;
    /****************************************************************************************
    methods
    ****************************************************************************************/
    //setEnabled(<opCell>, <bpEnabled>)
    //04/20/2008
    this.setEnabled = function(opCell, bpEnabled)
    {
        if (opCell)
        {
            if (oCsgToolbar.thisIsAButton(opCell) == true)
            {
                if (opCell.src)
                {
                    if ((bpEnabled == true) && (oCsgToolbar.enabled == true)) { oCsgToolbar.enableButton(opCell); }
                    else { oCsgToolbar.disableButton(opCell); }
                }
            }
        }
    }
    //isButtonDisabled(<opCell>)
    //07/03/2008
    this.buttonIsDisabled = function(opCell)
    {
        var oReturn;
        if (oCsgToolbar.thisIsAButton(opCell) == true) { oReturn = (opCell.src.lastIndexOf("Disabled.") > 0); }
        return oReturn;
    }
    //enableButton(<opCell>)
    //07/03/2008
    this.enableButton = function(opCell)
    {
        var opExtension;
        if (oCsgToolbar.thisIsAButton(opCell) == true)
        {
            if (oCsgToolbar.buttonIsDisabled(opCell) == true)
            {
                opExtension = opCell.src.substr(opCell.src.lastIndexOf(".") + 1);
                opCell.src = opCell.src.substr(0, opCell.src.lastIndexOf("Disabled.")) + "." + opExtension;
            }
        }
    }
    //disableButton(<opCell>)
    //07/03/2008
    this.disableButton = function(opCell)
    {
        var opExtension;
        if (oCsgToolbar.thisIsAButton(opCell) == true)
        {
            if (oCsgToolbar.buttonIsDisabled(opCell) == false)
            {
                opExtension = opCell.src.substr(opCell.src.lastIndexOf(".") + 1);
                opCell.src = opCell.src.substr(0, opCell.src.lastIndexOf(".")) + "Disabled." + opExtension;
                opCell.className = "csgToolbarButton";
            }
        }
    }
    //getAction(<opCell>)
    //04/20/2008
    this.getAction = function(opCell)
    {
        var oAction;
        if (oCsgToolbar.thisIsAButton(opCell) == true)
        {
            //strip off the _img part
            oAction = opCell.id.substr(0, opCell.id.lastIndexOf("_"));
            //strip off the toolbar id part
            oAction = oAction.substr(oAction.lastIndexOf("_")+1)
        }
        return oAction;
    }
    //thisIsAButton(<opCell>)
    //04/20/2008
    this.thisIsAButton = function(opCell) { return (opCell.tagName.toUpperCase() == "IMG"); }
    //enableNavigationToolbar()
    //04/20/2008
    this.enableNavigationToolbar = function(opEnabled, opDataTableRowNumber, opDataTableRowsCount)
    {
        var oEnabled = (typeof(opEnabled) == "undefined" ? true : opEnabled)
        oCsgToolbar.enabled = opEnabled;
        var iDataTableRowNumber = 1;
        if (isNaN(opDataTableRowNumber) == false) { iDataTableRowNumber = parseInt(opDataTableRowNumber); }
        var iDataTableRowsCount = parseInt(opDataTableRowsCount);
        var oMoveFirst = document.getElementById(oCsgToolbar.toolbarID+"_moveFirst_img");
        var oMovePrevious = document.getElementById(oCsgToolbar.toolbarID+"_movePreviousPage_img");
        var oMovePreviousPage = document.getElementById(oCsgToolbar.toolbarID+"_movePrevious_img");
        var oMoveNext = document.getElementById(oCsgToolbar.toolbarID+"_moveNext_img");
        var oMoveNextPage = document.getElementById(oCsgToolbar.toolbarID+"_moveNextPage_img");
        var oMoveLast = document.getElementById(oCsgToolbar.toolbarID+"_moveLast_img");
        //
        if (iDataTableRowsCount > 0)
        {
            oCsgToolbar.setEnabled(oMoveFirst, (iDataTableRowNumber != 1) && (oCsgToolbar.enabled));
            oCsgToolbar.setEnabled(oMovePrevious, (iDataTableRowNumber != 1) && (oCsgToolbar.enabled));
            oCsgToolbar.setEnabled(oMovePreviousPage, (iDataTableRowNumber != 1) && (oCsgToolbar.enabled));
            oCsgToolbar.setEnabled(oMoveNext, (iDataTableRowNumber != iDataTableRowsCount) && (oCsgToolbar.enabled));
            oCsgToolbar.setEnabled(oMoveNextPage, (iDataTableRowNumber != iDataTableRowsCount) && (oCsgToolbar.enabled));
            oCsgToolbar.setEnabled(oMoveLast, (iDataTableRowNumber != iDataTableRowsCount) && (oCsgToolbar.enabled));
        }
        else
        {
            oCsgToolbar.setEnabled(oMoveFirst, false);
            oCsgToolbar.setEnabled(oMovePrevious, false);
            oCsgToolbar.setEnabled(oMovePreviousPage, false);
            oCsgToolbar.setEnabled(oMoveNext, false);
            oCsgToolbar.setEnabled(oMoveNextPage, false);
            oCsgToolbar.setEnabled(oMoveLast, false);
        }
    }
    //enableEditingToolbar()
    //04/22/2008
    this.enableEditingToolbar = function(opEditing)
    {
        var oEditing = (typeof(opEditing) == "undefined" ? false : opEditing)
//        oCsgToolbar.enabled = opEditing;
        var oAddNew = document.getElementById(oCsgToolbar.toolbarID+"_addNew_img");
        var oCopy = document.getElementById(oCsgToolbar.toolbarID+"_copy_img");
        var oDelete = document.getElementById(oCsgToolbar.toolbarID+"_delete_img");
        var oSave = document.getElementById(oCsgToolbar.toolbarID+"_save_img");
        var oUndo = document.getElementById(oCsgToolbar.toolbarID+"_undo_img");
        oCsgToolbar.setEnabled(oAddNew, ((!oEditing) && (oCsgToolbar.enabled)));
        oCsgToolbar.setEnabled(oCopy, ((!oEditing) && (oCsgToolbar.enabled)));
        oCsgToolbar.setEnabled(oDelete, ((!oEditing) && (oCsgToolbar.enabled)));
        oCsgToolbar.setEnabled(oSave, ((oEditing) && (oCsgToolbar.enabled)));
        oCsgToolbar.setEnabled(oUndo, ((oEditing) && (oCsgToolbar.enabled)));
        //****************************************************
        //10/06/2009
        if (typeof ocsgGrid == "object")
        {
            ocsgGrid.editingToolbar = oCsgToolbar;
        }
        //****************************************************
    }
    //toolbarAddNew(<opGrid>, <opElement>)
    //10/06/2009
    this.toolbarAddNew = function(opGrid, opElement)
    {
        var oPagePermissionInsert = true;
        var oPermissionInsert = true;        
        //10/06/2009
        //keep track if the addNew or Copy button is clicked
        oCsgToolbar.insertStatus = true;
        //page specific permissions
        if (ocsgPage.pagePermissionInsert) { oPagePermissionInsert = ocsgPage.pagePermissionInsert(); }
        //user account permissions
        oPermissionInsert = ocsgPage.permissionInsert();
        //if user account permissions and page specific permissions
        if (oPermissionInsert && oPagePermissionInsert)
        {
            if (ocsgPage.addNew)
            {
                ocsgPage.addNew();
                oCsgToolbar.enableEditingToolbar(true);
                opGrid.enableNavigationToolbar(false);
            }
        }
        else
        {
            //10/06/2009
            if (typeof opElement == "object") { alert("Insert not allowed."); }
        }
        //10/06/2009
        if (typeof opElement == "object")
        {
            if (window.page_toolbarAddNew) { window.page_toolbarAddNew(opElement); }
        }
    }
    //toolbarCopy(<opGrid>, <opElement>)
    //10/06/2009
    this.toolbarCopy = function(opGrid, opElement)
    {
        //page specific permissions
        var oPagePermissionInsert = true;
        //user account permissions
        var oPermissionInsert = true;
        //10/06/2009
        //keep track if the addNew or Copy button is clicked
        oCsgToolbar.insertStatus = true;
        //page specific permissions
        if (ocsgPage.pagePermissionInsert) { oPagePermissionInsert = ocsgPage.pagePermissionInsert(); }
        //user account permissions
        oPermissionInsert = ocsgPage.permissionInsert();
        //if user account permissions and page specific permissions
        if (oPermissionInsert && oPagePermissionInsert)
        {
            if (ocsgPage.copy)
            {
                ocsgPage.copy();
                oCsgToolbar.enableEditingToolbar(true);
                opGrid.enableNavigationToolbar(false);
            }
        }
        else
        {
            //10/06/2009
            if (typeof opElement == "object") { alert("Insert not allowed."); }
        }
        //10/06/2009
        if (typeof opElement == "object")
        {
            if (window.page_toolbarCopy) { window.page_toolbarCopy(opElement); }
        }
    }
    //toolbarDelete(<opGrid>, <opElement>)
    //10/06/2009
    this.toolbarDelete = function(opGrid, opElement)
    {
        //page specific permissions
        var oPagePermissionDelete = true;
        //user account permissions
        var oPermissionDelete = true;
        //10/06/2009
        //keep track if the addNew or Copy button is clicked
        oCsgToolbar.insertStatus = false;
        //page specific permissions
        if (ocsgPage.pagePermissionDelete) { oPagePermissionDelete = ocsgPage.pagePermissionDelete(); }
        //user account permissions
        oPermissionDelete = ocsgPage.permissionDelete();
        //if user account permissions and page specific permissions
        if (oPermissionDelete && oPagePermissionDelete) { opGrid.deleteRow(); }
        else
        {
            //10/06/2009
            if (typeof opElement == "object") { alert("Delete not allowed."); }
        }
        //10/06/2009
        if (typeof opElement == "object")
        {
            if (window.page_toolbarDelete) { window.page_toolbarDelete(opElement); }
        }
    }
    //toolbarSave(<opGrid>, <opElement>)
    //10/06/2009
    this.toolbarSave = function(opGrid, opElement)
    {
        //page specific permissions
        var oPagePermissionUpdate = true;
        //user account permissions
        var oPermissionUpdate = true;
        //page specific permissions
        if (ocsgPage.pagePermissionUpdate) { oPagePermissionUpdate = ocsgPage.pagePermissionUpdate(); }
        //user account permissions
        oPermissionUpdate = ocsgPage.permissionUpdate();
        //if user account permissions and page specific permissions
        if (oPermissionUpdate && oPagePermissionUpdate) { if (ocsgPage.save) { ocsgPage.save(opElement, opGrid.csgToolbar); } }
        else
        {
            //10/06/2009
            if (typeof opElement == "object") { alert("Update not allowed."); }
        }
        //10/06/2009
        if (typeof opElement == "object")
        {
            if (window.page_toolbarSave) { window.page_toolbarSave(opElement); }
        }
        //10/06/2009
        //keep track if the addNew or Copy button is clicked
        oCsgToolbar.insertStatus = false;
    }
    //toolbarUndo(<opGrid>, <opElement>)
    //10/06/2009
    this.toolbarUndo = function(opGrid, opElement)
    {
        if (ocsgPage.undo) { ocsgPage.undo(opElement, opGrid.csgToolbar); }
        //10/06/2009
        if (typeof opElement == "object")
        {
            if (window.page_toolbarUndo) { window.page_toolbarUndo(opElement); }
        }
        if (oCsgToolbar.insertStatus == true)
        {
            if (ocsgGrid.activeRow)
            {
                if (ocsgGrid.grid.children[0])
                {
                    if (ocsgGrid.activeRow.rowIndex == ocsgGrid.grid.children[0].rows.length - 1)
                    {
                        oCsgToolbar.toolbarDelete(opGrid, opElement);
                    }
                }
            }
        }
        
        //10/06/2009
        //keep track if the addNew or Copy button is clicked
        oCsgToolbar.insertStatus = false;
    }

    //standardToolbar(<opGrid>, <opElement>)
    //06/30/2008
    this.standardToolbar = function(opGrid, opElement)
    {
        var oHandled = false;
        var oAction = opGrid.csgToolbar.getAction(opElement);
        switch (oAction)
        {
            //editing
            case "addNew":
                oCsgToolbar.toolbarAddNew(opGrid, opElement);
                oHandled = true;
                break;
            case "copy":
                oCsgToolbar.toolbarCopy(opGrid, opElement);
                oHandled = true;
                break;
            case "delete":
                oCsgToolbar.toolbarDelete(opGrid, opElement);
                oHandled = true;
                break;
            case "save":
                oCsgToolbar.toolbarSave(opGrid, opElement);
                oHandled = true;
                break;
            case "undo":
                oCsgToolbar.toolbarUndo(opGrid, opElement);
                oHandled = true;
                break;
            //navigation
            case "moveFirst":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.moveFirst(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMoveFirst) { window.page_toolbarMoveFirst(opElement); }
                break;
            case "movePrevious":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.movePrevious(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMovePrevious) { window.page_toolbarMovePrevious(opElement); }
                break;
            case "movePreviousPage":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.movePreviousPage(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMovePreviousPage) { window.page_toolbarMovePreviousPage(opElement); }
                break;
            case "moveNext":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.moveNext(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMoveNext) { window.page_toolbarMoveNext(opElement); }
                break;
            case "moveNextPage":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.moveNextPage(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMoveNextPage) { window.page_toolbarMoveNextPage(opElement); }
                break;
            case "moveLast":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.moveLast(); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarMoveLast) { window.page_toolbarMoveLast(opElement); }
                break;
            case "filter":
                opGrid.filterGrid();
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarFilterGrid) { window.page_toolbarFilterGrid(opElement); }
                break;
            case "toggleGrid":
                if (opElement.id.indexOf(opGrid.csgToolbar.toolbar.id) == 0) { opGrid.toggleGrid(opElement); }
                oHandled = true;
                //07/13/2009
                if (window.page_toolbarToggleGrid) { window.page_toolbarToggleGrid(opElement); }
                break;
        }
        return oHandled;
    }
    
    //reportToolbar(<opReport>, <opElement>)
    //10/10/2008
    this.reportToolbar = function(opReport, opElement)
    {
        //
        var oHandled = false;
        
        var oAction = opReport.csgToolbar.getAction(opElement);
        switch (oAction)
        {
            //navigation
            case "moveFirst":
                opReport.moveFirst();
                oHandled = true;
                break;
            case "movePreviousPage":
                opReport.movePreviousPage();
                oHandled = true;
                break;
            case "moveNextPage":
                opReport.moveNextPage();
                oHandled = true;
                break;
            case "moveLast":
                opReport.moveLast();
                oHandled = true;
                break;
            case "filter":
                opReport.filterReport();
                oHandled = true;
                break;
            case "refresh":
                opReport.refreshReport();
                oHandled = true;
                break;
            case "excel":
                if (ocsgPage.getSystemAccount_idValue()) { opReport.exportToExcel(); }
                else { alert(pageMustBeLoggedInToDownloadSpreadsheet); }
                oHandled = true;
                break;
        }
        return oHandled;
    }
    
        
    //filterToolbar(<opReport>, <opElement>)
    //10/14/2008
    this.filterToolbar = function(opReport, opElement)
    {
        //
        var oHandled = false;
        
        var oAction = opReport.csgToolbar.getAction(opElement);
        switch (oAction)
        {
            case "refresh":
                if (ocsgPage.refreshData) { ocsgPage.refreshData(); }
                oHandled = true;
                break;
            case "delete":
                if (ocsgPage.deleteLastRow) { ocsgPage.deleteLastRow(); }
                oHandled = true;
                break;
            case "addNew":
                if (ocsgPage.addNew) { ocsgPage.addNew(); }
                oHandled = true;
                break;
            case "filter":
                if (ocsgPage.clearFilter) { ocsgPage.clearFilter(); }
                oHandled = true;
                break;
        }
        return oHandled;
    }
}