﻿
/*
    Computer Science Group, LLC
    225-766-2397 office
    225-205-0263 cell
    darrell@computersciencegroup.com
    Copyright © 2008 Computer Science Group, LLC, All rights reserved.
*/

//***************************************************************************//
//calendar
//***************************************************************************//

//
var __calendarDates = new Array();
//
var ocsgPrevious;
var ocsgNext;
var ocsgUpdatePanel;
//
var __backgroundColorSelected = "#FBE7AA";
var ocalendarCellHeaderSelectedDIV = "url(../images/csgCalendarCellHeaderSelectedDIV.png)";
var __backgroundColorNotSelected = "#FDFEFC";
var ocalendarCellHeaderNotSelectedDIV = "url(../images/csgCalendarCellHeaderDIV.png)";
var __backgroundColorNotInThisMonth = "#E8E8E8";
//drop down list
var odropDownMonth;
var odropDownYear;
//check box
var oshowAccountTasks;
var oshowAccountEvents;
var oshowPublicEvents;
var oshowUserTasks;
var oshowUserEvents;
//imageButtons
var ocalendarMovePrevious;
var ocalendarMoveNext;
//floating iframes
var ocsgIFrameAccountTaskDetail;
var ocsgIFrameUserTaskDetail;
var ocsgIFrameAccountEventDetail;
var ocsgIFrameUserEventDetail;
var ocsgIFramePublicEventDetail;
//select when clicked
var oDivPreviousSelected;
var oDivSelected;
// toolbar
var otoolBar;
//
//var oMsgDocumentIsLoading = "Document is still loading. Please wait until document is loaded.";
var oMsgMustBeLoggedIn = "Must be logged into an active account.";

//pageLoad()
//08/14/2008
function pageLoad()
{
    var oDiv;
    var oDay;
    var ohiddenTodaysDateValue;
    /****************************************************************************************/
    //09/11/2009
    //do this for all pages
    ocsgPage.initializePage();
    /****************************************************************************************/
    //
    //***************************************************************************//
    //notes IFrame
    //***************************************************************************//
    if (ocsgPage.getSystemAccount_idValue())
    {
        ocsgIFrameAccountTaskDetail = new csgIFrame("accountTaskDetailContainerDiv", "accountTaskDetailHeaderDiv", "accountTaskDetailHeaderDivImg", "accountTaskDetailIFrame", "5px", "5px", "500px", "310px");
        ocsgIFrameManager.iFrameArray.push(ocsgIFrameAccountTaskDetail);    
        ocsgIFrameUserTaskDetail = new csgIFrame("userTaskDetailContainerDiv", "userTaskDetailHeaderDiv", "userTaskDetailHeaderDivImg", "userTaskDetailIFrame", "5px", "5px", "500px", "310px");
        ocsgIFrameManager.iFrameArray.push(ocsgIFrameUserTaskDetail);    
        ocsgIFrameAccountEventDetail = new csgIFrame("accountEventDetailContainerDiv", "accountEventDetailHeaderDiv", "accountEventDetailHeaderDivImg", "accountEventDetailIFrame", "5px", "5px", "420px", "310px");
        ocsgIFrameManager.iFrameArray.push(ocsgIFrameAccountEventDetail);    
        ocsgIFrameUserEventDetail = new csgIFrame("userEventDetailContainerDiv", "userEventDetailHeaderDiv", "userEventDetailHeaderDivImg", "userEventDetailIFrame", "5px", "5px", "420px", "310px");
        ocsgIFrameManager.iFrameArray.push(ocsgIFrameUserEventDetail);
        if (ocsgPage.getSystemUserType_idValue() == 1)
        {
            ocsgIFramePublicEventDetail = new csgIFrame("publicEventDetailContainerDiv", "publicEventDetailHeaderDiv", "publicEventDetailHeaderDivImg", "publicEventDetailIFrame", "5px", "5px", "420px", "310px");
            ocsgIFrameManager.iFrameArray.push(ocsgIFramePublicEventDetail);
        }
    }
    //***************************************************************************//
    //calendar
    //***************************************************************************//
    ocsgUpdatePanel = new csgUpdatePanel("UpdatePanel1", "UpdateProgress1");
    //dropdowns
    odropDownMonth = new csgDropDownList("dropDownMonth");
    odropDownYear = new csgDropDownList("dropDownYear");
    //check box
    oshowAccountEvents = new csgCheckBox("showAccountTasks");
    oshowUserTasks = new csgCheckBox("showUserTasks");
    oshowAccountEvents = new csgCheckBox("showAccountEvents");
    oshowUserEvents = new csgCheckBox("showUserEvents");
    oshowPublicEvents = new csgCheckBox("showPublicEvents");
    //imageButtons 
    ocalendarMovePrevious = new csgImageButton("calendarMovePrevious", __imagesPath + "csgCalendarMovePrevious.gif", "Display the previous calendar month.");
    ocalendarMoveNext = new csgImageButton("calendarMoveNext", __imagesPath + "csgCalendarMoveNext.gif", "Display the next calendar month.");
    //example toolbar
    otoolBar = new csgToolbar("csgToolbar1");
    //
    initializeDateObjects();
    //Select the Div containing todays date as the currently selected Div.
    ohiddenTodaysDateValue = ocsgPage.getHiddenFieldValue("hiddenTodaysDate");
    if (ohiddenTodaysDateValue)
    {
        for (var i=0; i<__calendarDates.length; i++)
        {
            if (__calendarDates[i].date == ohiddenTodaysDateValue)
            {
                oDiv = document.getElementById(__calendarDates[i].divId);
                if (oDiv)
                {
                    oDivSelected = oDiv;
                    selectElements(oDiv, true)
                    break;
                }
            }
        }
    }
    if (ocsgPage.getSystemAccount_idValue())
    {
        //05/06/2010 Add support for check boxes
        setHiddenFieldValuesInIFrame("accountTaskDetailIFrame", "hiddenShowAccountTasks");
        setHiddenFieldValuesInIFrame("userTaskDetailIFrame", "hiddenShowUserTasks");
        setHiddenFieldValuesInIFrame("accountEventDetailIFrame", "hiddenShowUserEvents");
        setHiddenFieldValuesInIFrame("userEventDetailIFrame", "hiddenShowUserEvents");
    }
    
    /****************************************************************************************/
    //09/11/2009
    //do this for all pages
    ocsgPage.finishUpPageLoad();
    /****************************************************************************************/
}

//finishUpPageLoad()
//09/30/2009
window.finishUpPageLoad = function()
{
    var ohiddenWorkbookToOpen = $get("hiddenWorkbookToOpen");
    if (ohiddenWorkbookToOpen)
    {
        if (ohiddenWorkbookToOpen.value)
        {
            ocsgPage.confirmExcelWorkbookDownload(ohiddenWorkbookToOpen.value, true);
            ohiddenWorkbookToOpen.value = "";
        }
    }
}

//initializeDateObjects()
//09/09/2009
function initializeDateObjects()
{
    var o;
    var oArray1;
    var oArray2;
    var ohiddenCalendarObjectsValue = ocsgPage.getHiddenFieldValue("hiddenCalendarObjects");
    if (ohiddenCalendarObjectsValue)
    {
        __calendarDates = new Array();
        oArray1 = ohiddenCalendarObjectsValue.split("]");
        for (var i=0; i<oArray1.length; i++)
        {
            o = new Object();
            oArray2 = oArray1[i].split("|");
            o.divId = oArray2[0];
            o.date = oArray2[1];
            o.inThisMonth = (oArray2[2] === "true");
            __calendarDates[__calendarDates.length] = o;
        }
    }
    for (var i=0; i<__calendarDates.length; i++)
    {
        if (__calendarDates[i].inThisMonth == false)
        {
            oDiv = document.getElementById(__calendarDates[i].divId);
            if (oDiv)
            {
                setContentTDBackgroundColor(contentTD(oDiv), __backgroundColorNotInThisMonth);
            }
        }
    }
}

//getDateObjectFromDivId(<opDivId>)
//09/08/2009
function getDateObjectFromDivId(opDivId)
{
    var oReturn = false;
    for (var i=0; i<__calendarDates.length; i++)
    {
        if (__calendarDates[i].divId == opDivId)
        {
            oReturn = __calendarDates[i].date;
            break;
        }
    }
    return oReturn;
}

//ocsgPage.toolbarOnClick(<opElement>)
//07/02/2009
ocsgPage.toolbarOnClick = function(opElement)
{
    var oAction = otoolBar.getAction(opElement);
    if (oAction == "createCalendarToExcel") { ocsgUpdatePanel.doPostBack("export"); }
    else
    {
        if (ocsgPage.getSystemAccount_idValue())
        { 
            switch (oAction)
            {
                case "accountTask":
                    setHiddenFieldValuesInIFrame("accountTaskDetailIFrame", "hiddenShowAccountTasks");
                    postBackIFrame(ocsgIFrameAccountTaskDetail);
                    ocsgIFrameManager.toolBarClick(ocsgIFrameAccountTaskDetail);
                    break;
                case "userTask":
                    setHiddenFieldValuesInIFrame("userTaskDetailIFrame", "hiddenShowUserTasks");
                    postBackIFrame(ocsgIFrameUserTaskDetail);
                    ocsgIFrameManager.toolBarClick(ocsgIFrameUserTaskDetail);
                    break;
                case "accountEvent":
                    setHiddenFieldValuesInIFrame("accountEventDetailIFrame", "hiddenShowUserEvents");
                    postBackIFrame(ocsgIFrameAccountEventDetail);
                    ocsgIFrameManager.toolBarClick(ocsgIFrameAccountEventDetail);
                    break;
                case "userEvent":
                    setHiddenFieldValuesInIFrame("userEventDetailIFrame", "hiddenShowUserEvents");
                    postBackIFrame(ocsgIFrameUserEventDetail);
                    ocsgIFrameManager.toolBarClick(ocsgIFrameUserEventDetail);
                    break;
                case "publicEvent":
                    if (ocsgPage.getSystemAccount_idValue() == 1)
                    {
                        setHiddenFieldValuesInIFrame("publicEventDetailIFrame", "hiddenShowPublicEvents");
                        postBackIFrame(ocsgIFramePublicEventDetail);
                        ocsgIFrameManager.toolBarClick(ocsgIFramePublicEventDetail);
                    }
                    else { alert("Must be logged in as system administrator."); }
                    break;
            }
        }
        else { alert("Must be logged in."); }
    }
}

//setHiddenFieldValuesInIFrame(<opIFrameId>, <opHiddenCheckBoxId>)
//07/13/2009
//05/06/2010 Add support for check boxes
function setHiddenFieldValuesInIFrame(opIFrameId, opHiddenCheckBoxId)
{
    var oContentWindow = document.getElementById(opIFrameId).contentWindow;
    if (oContentWindow)
    {
        oHidden = oContentWindow.document.getElementById("hiddenCalendarDate");
        if (oHidden) { oHidden.value = ocsgPage.getHiddenFieldValue("hiddenCalendarDate"); }
        //Hidden field for check boxes will have the same ID
        oHidden = oContentWindow.document.getElementById(opHiddenCheckBoxId);
        if (oHidden) { oHidden.value = document.getElementById(opHiddenCheckBoxId).value; }
        
    }
}

//ocsgPage.headerDivOnClick(<opCsgIFrame>)
//09/10/2008
ocsgPage.headerDivOnClick = function(opCsgIFrame) { ocsgIFrameManager.bringDivToFront(opCsgIFrame); }

//ocsgPage.iFrameOnClick(<opCsgIFrame>)
//09/10/2008
ocsgPage.iFrameOnClick = function(opCsgIFrame) { ocsgIFrameManager.bringDivToFront(opCsgIFrame); }

//ocsgPage.checkBoxOnClick(<opCsgCheckBox>)
//09/09/2009
ocsgPage.checkBoxOnClick = function(opCsgCheckBox)
{
    var oHidden = document.getElementById("hidden" + opCsgCheckBox.checkBox.id.substring(0, 1).toUpperCase() + opCsgCheckBox.checkBox.id.substr(1))
    if (oHidden)
    {
        oHidden.value = (opCsgCheckBox.checkBox.checked == true ? "checked" : "");
        ocsgUpdatePanel.doPostBack("checkbox");
    }
}

//contentTD(<opDiv>)
//09/07/2009
//events for the header DIV look for the content TD below it
function contentTD(opDiv)
{
    var oRow;
    var oColumn;
    var oContentTD;
    //   
    oRow = parseInt(opDiv.id.split("_")[1].substr(1)) + 1;
    oColumn = parseInt(opDiv.id.split("_")[2].substr(1));
    oContentTD = document.getElementById("calendarCellTD_r" + oRow.toString() + "_c" + oColumn.toString());
    return oContentTD;
}
//headerDIV(<opTD>)
//09/07/2009
//events for the content TD look for the header DIV above it
function headerDIV(opTD)
{
    var oRow;
    var oColumn;
    var oHeaderDIV;
    //   calendarCellHeaderDIV_r2_c1
    oRow = parseInt(opTD.id.split("_")[1].substr(1)) - 1;
    oColumn = parseInt(opTD.id.split("_")[2].substr(1));
    oHeaderDIV = document.getElementById("calendarCellHeaderDIV_r" + oRow.toString() + "_c" + oColumn.toString());
    return oHeaderDIV;
}

//selectElements(<opElement>, <opIsSelected>)
//09/08/2009
function selectElements(opElement, opIsSelected)
{
    var oTD;
    var oDIV;
    //clicked on the header DIV
    if (opElement.tagName == "DIV")
    {
        //don't fire this if the DIV is not in this month
        if (divIsInThisMonth(opElement) == true)
        {
            if (opIsSelected)
            {
                //header
                opElement.style.backgroundImage = ocalendarCellHeaderSelectedDIV;
                opElement.style.color = "Black";
                //content
                oTD = contentTD(opElement);
                if (oTD) { setContentTDBackgroundColor(oTD, __backgroundColorSelected); }
            }
            else
            {
                if (oDivSelected)
                {
                    if (opElement.id != oDivSelected.id)
                    {
                        //header
                        opElement.style.backgroundImage = ocalendarCellHeaderNotSelectedDIV;
                        opElement.style.color = "White";
                        //content
                        oTD = contentTD(opElement);
                        if (oTD) { setContentTDBackgroundColor(oTD, __backgroundColorNotSelected); }
                    }
                }
            }
        }
    }
    //clicked on the content TD
    if (opElement.tagName == "TD")
    {
        oDIV = headerDIV(opElement);
        if (oDIV)
        {
            if (divIsInThisMonth(oDIV) == true)
            {
                if (opIsSelected)
                {
                    //header
                    oDIV.style.backgroundImage = ocalendarCellHeaderSelectedDIV;
                    oDIV.style.color = "Black";
                    //content
                    if (opElement) { setContentTDBackgroundColor(opElement, __backgroundColorSelected); }
                }
                else
                {
                    if (oDivSelected)
                    {
                        if (oDIV.id != oDivSelected.id)
                        {
                            //header
                            oDIV.style.backgroundImage = ocalendarCellHeaderNotSelectedDIV;
                            oDIV.style.color = "White";
                            //content
                            setContentTDBackgroundColor(opElement, __backgroundColorNotSelected);
                        }
                    }
                }
            }
        }
    }
}

//setContentTDBackgroundColor(<opTD>, <opColor>)
//09/08/2009
function setContentTDBackgroundColor(opTD, opColor)
{
    if (opTD)
    {
        opTD.style.backgroundColor = opColor;
        for (var i=0; i<opTD.children.length; i++)
        {
           opTD.children[i].style.backgroundColor = opColor;
           setChildBackgroundColor(opTD.children[i], opColor)
        }
    }
}

//setChildBackgroundColor(<opElement>, <opColor>)
//09/07/2009
function setChildBackgroundColor(opElement, opColor)
{
    for (var i=0; i<opElement.children.length; i++)
    {
       opElement.children[i].style.backgroundColor = opColor;
       setChildBackgroundColor(opElement.children[i], opColor)
    }
}

//divIsInThisMonth(<opDiv>)
//09/07/2009
function divIsInThisMonth(opDIV)
{
    var divIsInThisMonth = (__calendarDates.length > 0);
    for (var i=0; i<__calendarDates.length; i++)
    {
        if (opDIV.id == __calendarDates[i].divId)
        {
            divIsInThisMonth = (__calendarDates[i].inThisMonth == true);
            break;
        }
    }
    return divIsInThisMonth;
}

//calendarHeaderClickDIV(<opDiv>)
//calendarHeaderMouseOverDIV(<opDiv>)
//calendarHeaderMouseOutDIV(<opDiv>)
//09/07/2009
function calendarHeaderClickDIV(opDiv)
{
    var oDiv;
    if (divIsInThisMonth(opDiv) == true)
    {
        //save the currently selected date
        ocsgPage.setHiddenFieldValue("hiddenCalendarDate", getDateObjectFromDivId(opDiv.id));
        //
        oDiv = oDivSelected;
        oDivSelected = opDiv;
        selectElements(oDiv, false);
        selectElements(oDivSelected, true);
    }
}
function calendarHeaderMouseOverDIV(opDiv) { if (divIsInThisMonth(opDiv) == true) { selectElements(opDiv, true); } }
function calendarHeaderMouseOutDIV(opDiv) { if (divIsInThisMonth(opDiv) == true) { selectElements(opDiv, false); } }

//calendarCellClickTD(<opTD>)
//calendarCellMouseOverTD(<opTD>)
//calendarCellMouseOutTD(<opTD>)
//09/11/2009
function calendarCellClickTD(opTD)
{
    var oDiv;
//    //only do this if someone is logged in
//    if (ocsgPage.getSystemAccount_idValue())
//    { 
        oDiv = headerDIV(opTD);
        if (divIsInThisMonth(oDiv) == true)
        {
            //save the currently selected date
            ocsgPage.setHiddenFieldValue("hiddenCalendarDate", getDateObjectFromDivId(oDiv.id));
            //
            oDiv = oDivSelected;
            oDivSelected = headerDIV(opTD);
            selectElements(oDiv, false);
            selectElements(oDivSelected, true);
            postBackIFrames();
        }
//    }
}
function calendarCellMouseOverTD(opTD) { if (divIsInThisMonth(opTD) == true) {selectElements(opTD, true); } }
function calendarCellMouseOutTD(opTD) { if (divIsInThisMonth(opTD) == true) {selectElements(opTD, false); } }

//selectToday()
//09/09/2009
function selectToday() { ocsgUpdatePanel.doPostBack("today"); }

//ocsgPage.dropDownListOnChange(<opCsgDropDownList>)
//09/09/2009
ocsgPage.dropDownListOnChange = function(opCsgDropDownList)
{
    var oValue;
    var oHiddenValue = ocsgPage.getHiddenFieldValue("hiddenCalendarDate");
    var oDate;
    if (oHiddenValue) { oDate = new Date(ocsgPage.getHiddenFieldValue("hiddenCalendarDate")); }
    else { oDate = new Date(); }
    switch (opCsgDropDownList.dropDownListID)
    {
        case "dropDownMonth":
            oValue = opCsgDropDownList.getValue();
            ocsgPage.setHiddenFieldValue("hiddenCalendarDate", oValue.value + "/01/" + oDate.getFullYear().toString());
            ocsgUpdatePanel.doPostBack("dropdown");
            break;
        case "dropDownYear":
            oValue = opCsgDropDownList.getValue();
            ocsgPage.setHiddenFieldValue("hiddenCalendarDate", (oDate.getMonth() + 1).toString() + "/01/" + oValue.value);
            ocsgUpdatePanel.doPostBack("dropdown");
            break;
    }
}


//ocsgPage.imageOnClick(<opCsgImageButton>)
//09/08/2009
ocsgPage.imageOnClick = function(opCsgImageButton)
{
    switch (opCsgImageButton.imageID)
    {
        case "calendarMovePrevious":
            ocsgUpdatePanel.doPostBack("decrement");
            break;
        case "calendarMoveNext":
            ocsgUpdatePanel.doPostBack("increment");
            break;
    }
}

//postBackIFrame(<opCsgIFrame>)
//09/10/2009
//Postback iFrames when calender day is clicked.
function postBackIFrame(opCsgIFrame)
{
    var oContentWindowCsgGrid;
    var oContentWindow = opCsgIFrame.iFrame.contentWindow;
    if (oContentWindow)
    {
        oContentWindowCsgGrid = oContentWindow.window.ocsgGrid;
        if (oContentWindowCsgGrid) { oContentWindowCsgGrid.postBack(); }
    }
}

//postBackIFrames()
//09/11/2009
//05/06/2010 Add support for check boxes
function postBackIFrames()
{
    if (ocsgPage.getSystemAccount_idValue())
    { 
        if (document.readyState == "complete")
        {
            //update hidden field values
            //05/06/2010 Add support for check boxes
            setHiddenFieldValuesInIFrame("accountTaskDetailIFrame", "hiddenShowAccountTasks");
            setHiddenFieldValuesInIFrame("userTaskDetailIFrame", "hiddenShowUserTasks");
            setHiddenFieldValuesInIFrame("accountEventDetailIFrame", "hiddenShowUserEvents");
            setHiddenFieldValuesInIFrame("userEventDetailIFrame", "hiddenShowUserEvents");
            if (ocsgPage.getSystemUserType_idValue() == 1) { setHiddenFieldValuesInIFrame("publicEventDetailIFrame", "hiddenShowPublicEvents"); }
            //postback the iframes
            if (ocsgIFrameAccountTaskDetail.isVisible() == true) { postBackIFrame(ocsgIFrameAccountTaskDetail); }
            if (ocsgIFrameUserTaskDetail.isVisible() == true) { postBackIFrame(ocsgIFrameUserTaskDetail); }
            if (ocsgIFrameAccountEventDetail.isVisible() == true) { postBackIFrame(ocsgIFrameAccountEventDetail); }
            if (ocsgIFrameUserEventDetail.isVisible() == true) { postBackIFrame(ocsgIFrameUserEventDetail); }
            if (ocsgPage.getSystemUserType_idValue() == 1) { if (ocsgIFramePublicEventDetail.isVisible() == true) { postBackIFrame(ocsgIFramePublicEventDetail); } }
        }
    }
}