﻿// JScript File
function CalendarDataObj(thirdPartyUserName, hasConnectedPeviously, isConnected, calendarMeetingBlocks, allDayCalendarMeetings, isOrganizer, organizerCalendarMeetingBlocks, inviteeCalendarMeetingBlocks, calendarsMeetingDataArr, resourcesMeetingDataArr, tempResourcesMeetingDataArr, consolidateCalendarMeetingsBlocks, consolidateAllDayCalendarMeetings, consolidateResourceMeetingsBlocks, consolidateAllDayResourceMeetings, tempCalendarsMeetingDataArr)
{
    this.thirdPartyUserName = thirdPartyUserName;
    this.hasConnectedPeviously = hasConnectedPeviously;
    this.isConnected = isConnected;
    this.calendarMeetingBlocks = calendarMeetingBlocks;
    this.allDayCalendarMeetings = allDayCalendarMeetings;
    this.isOrganizer = isOrganizer;
    this.organizerCalendarMeetingBlocks = organizerCalendarMeetingBlocks;
    this.inviteeCalendarMeetingBlocks = inviteeCalendarMeetingBlocks;
    this.lastFetchedMeetingUpperBoundaryDate = null;
    this.calendarsMeetingDataArr = calendarsMeetingDataArr;
    this.resourcesMeetingDataArr = resourcesMeetingDataArr;
    this.tempResourcesMeetingDataArr = tempResourcesMeetingDataArr;
    this.consolidateCalendarMeetingsBlocks = consolidateCalendarMeetingsBlocks;
    this.consolidateAllDayCalendarMeetings = consolidateAllDayCalendarMeetings;
    this.consolidateResourceMeetingsBlocks = consolidateResourceMeetingsBlocks;
    this.consolidateAllDayResourceMeetings = consolidateAllDayResourceMeetings;
    this.scheduleCalendarObjs = null;
    this.useScheduledCalendar = '1';
    this.resourcesApiError = '0';
    this.calendarApiError = '0';
    this.showGetProfessionalMessage = '0';
    this.overlapMeetingGroupArr = null;
    this.intersectionResourceMeetingGroupArr = null;
    //this.resetCalendarList = true;
    this.timeZoneObj = null;
    this.resourcesSelected = false;
    this.tempCalendarsMeetingDataArr = tempCalendarsMeetingDataArr;
}

var curCalendarData = new CalendarDataObj();

CalendarDataObj.prototype.ChangeCalendarSelection = function (disable)
{
    if (this.calendarsMeetingDataArr != null)
    {
        var len = this.calendarsMeetingDataArr.length;
        for (var i=0; i<len; i++)
        {
            var calendarId = this.calendarsMeetingDataArr[i].calendarObj.calendarId;
            var element = document.getElementById(calendarId);
            if (element)
            {
                element.disabled = disable;
            }
        }
    }
    if (this.resourcesMeetingDataArr != null)
    {
        var len = this.resourcesMeetingDataArr.length;
        for (var i=0; i<len; i++)
        {
            var calendarId = this.resourcesMeetingDataArr[i].calendarObj.calendarId;
            var element = document.getElementById(calendarId);
            if (element)
            {
                element.disabled = disable;
            }
        }
    }
}

CalendarDataObj.prototype.ConsolidateScheduleMultiCalendarMeetings = function (selectedCalendarIds)
{
    selectedCalendarIds = new Array();
    if (this.calendarsMeetingDataArr != null)
    {
        var retArray = this.ConsolidateCalendarMeetings(selectedCalendarIds, this.overlapMeetingGroupArr, this.calendarsMeetingDataArr);
        selectedCalendarIds = retArray[0];
        this.overlapMeetingGroupArr = retArray[1];
        //this.calendarMeetingBlocks = this.consolidateCalendarMeetingsBlocks;
        //this.allDayCalendarMeetings = this.consolidateAllDayCalendarMeetings;
    }
}

CalendarDataObj.prototype.ConsolidateMultiCalendarMeetings = function (selectedCalendarIds)
{
    selectedCalendarIds = new Array();
    if (this.calendarsMeetingDataArr != null)
    {
        var retArray = this.ConsolidateCalendarMeetings(selectedCalendarIds, this.overlapMeetingGroupArr, this.calendarsMeetingDataArr);
        selectedCalendarIds = retArray[0];
        this.overlapMeetingGroupArr = retArray[1];
        //this.calendarMeetingBlocks = this.consolidateCalendarMeetingsBlocks;
        //this.allDayCalendarMeetings = this.consolidateAllDayCalendarMeetings;
    }
    if (this.resourcesMeetingDataArr != null)
    {
        var retArray = this.FindInterSectionResourceMeetings(selectedCalendarIds, this.intersectionResourceMeetingGroupArr, this.resourcesMeetingDataArr);
       selectedCalendarIds = retArray[0];
        this.intersectionResourceMeetingGroupArr = retArray[1];
    }
    return selectedCalendarIds;
}


CalendarDataObj.prototype.ConsolidateCalendarMeetings = function (selectedCalendarIds, overlapMeetingGroupArr, calendarsMeetingDataArr)
{
    overlapMeetingGroupArr = null;
    var len = calendarsMeetingDataArr.length;
    for (var i=0; i<len; i++)
    {
        aCalendarObj = calendarsMeetingDataArr[i].calendarObj;
        if (aCalendarObj.selected)
        {
            selectedCalendarIds[selectedCalendarIds.length] = aCalendarObj.calendarId;
            if (overlapMeetingGroupArr == null)
            {
                overlapMeetingGroupArr = new Array();
                var oLen = calendarsMeetingDataArr[i].overlapMeetingGroupArr.length;
                for (var j=0; j<oLen; j++)
                {
                    aGroup = calendarsMeetingDataArr[i].overlapMeetingGroupArr[j];
                    aGroupMeetings = new Array();
                    overlapMeetingGroupArr[j] = new OverlapMeetingGroup(aGroup.startTime, aGroup.endTime, aGroup.allDay, aGroupMeetings);
                    overlapMeetingGroupArr[j].meetingCalendarGroup[i] = aGroup.meetingCalendarGroup[0];
                    //overlapMeetingGroupArr[j].meetingCalendarGroup[0] = null;
                }
            }
            else
            {
               overlapMeetingGroupArr = this.MergeCalendarMeetingBlocks(overlapMeetingGroupArr, calendarsMeetingDataArr[i].overlapMeetingGroupArr, i, len);
            }
        }
    }
    var retArray = new Array(2);
    retArray[0] = selectedCalendarIds;
    retArray[1] = overlapMeetingGroupArr;
    return retArray;
}

CalendarDataObj.prototype.FindInterSectionResourceMeetings = function (selectedCalendarIds, intersectionResourceMeetingGroupArr, calendarsMeetingDataArr)
{
    intersectionResourceMeetingGroupArr = null;
    var len = calendarsMeetingDataArr.length;
    for (var i=0; i<len; i++)
    {
        aCalendarObj = calendarsMeetingDataArr[i].calendarObj;
        if (aCalendarObj.selected)
        {
            selectedCalendarIds[selectedCalendarIds.length] = aCalendarObj.calendarId;
            if (intersectionResourceMeetingGroupArr == null)
            {
                intersectionResourceMeetingGroupArr = new Array();
                var oLen = calendarsMeetingDataArr[i].overlapMeetingGroupArr.length;
                for (var j=0; j<oLen; j++)
                {
                    aGroup = calendarsMeetingDataArr[i].overlapMeetingGroupArr[j];
                    aGroupMeetings = new Array();
                    intersectionResourceMeetingGroupArr[j] = new OverlapMeetingGroup(aGroup.startTime, aGroup.endTime, aGroup.allDay, aGroupMeetings);
                    intersectionResourceMeetingGroupArr[j].meetingCalendarGroup[i] = aGroup.meetingCalendarGroup[0];                
                }
            }
            else
            {
               intersectionResourceMeetingGroupArr = this.CalculateIntersectionCalendarMeetingBlocks(intersectionResourceMeetingGroupArr, calendarsMeetingDataArr[i].overlapMeetingGroupArr, i, len);
            }
        }
    }
    var retArray = new Array(3);
    retArray[0] = selectedCalendarIds;
    retArray[1] = intersectionResourceMeetingGroupArr;
    return retArray;
}

CalendarDataObj.prototype.MergeCalendarMeetingBlocks = function (consolidateOverlapMeetingGroupArr, overlapMeetingGroupArr, calendarIndex, calendarArrLen)
{
    var retOverlapMeetingGroupArr = new Array();
    var aCount = 0;
    var bCount = 0;
    var aLength = consolidateOverlapMeetingGroupArr.length;
    var bLength = overlapMeetingGroupArr.length;
    while (aCount < aLength || bCount < bLength)
    {
        var consumed = false;
        if (!(aCount < aLength))
        {
            if (retOverlapMeetingGroupArr.length > 0)
            {
                var currCalendarMeetingsBlock = retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length - 1];
                if (IsSameDayMeeting(currCalendarMeetingsBlock.startTime, overlapMeetingGroupArr[bCount].startTime))
                {
                    if (currCalendarMeetingsBlock.allDay)
                    {   
                        consumed = true;
                        if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                        {
                           currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                        }
                        currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                        bCount++;
                    }
                    else if (!overlapMeetingGroupArr[bCount].allDay && currCalendarMeetingsBlock.endTime >= overlapMeetingGroupArr[bCount].startTime)
                    {
                        consumed = true;
                        if (currCalendarMeetingsBlock.endTime < overlapMeetingGroupArr[bCount].endTime)
                        {
                            currCalendarMeetingsBlock.endTime = overlapMeetingGroupArr[bCount].endTime;
                        }
                        if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                        {
                           currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                        }
                        currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                        bCount++;
                    }
                }
            }
            if (!consumed)
            {
              //  overlapMeetingGroupArr[bCount].meetingCalendarGroup[calendarIndex] = overlapMeetingGroupArr[bCount].meetingCalendarGroup[0];
                //overlapMeetingGroupArr[bCount].meetingCalendarGroup[0] = null;
                aGroup = overlapMeetingGroupArr[bCount];
                aGroupMeetings = new Array();
                retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length] = new OverlapMeetingGroup(aGroup.startTime, aGroup.endTime, aGroup.allDay, aGroupMeetings);
                
                retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length - 1].meetingCalendarGroup[calendarIndex] = aGroup.meetingCalendarGroup[0];
                bCount++;  
            }
        }
        else if (!(bCount < bLength))
        {
            if (retOverlapMeetingGroupArr.length > 0)
            {
                var currCalendarMeetingsBlock = retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length - 1];
                if (IsSameDayMeeting(currCalendarMeetingsBlock.startTime, consolidateOverlapMeetingGroupArr[aCount].startTime))
                {
                    if (currCalendarMeetingsBlock.allDay)
                    {   
                        consumed = true;
                        for(var i=0; i<calendarArrLen; i++)
                        {
                            if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                            {
                                if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                {
                                   currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                }
                                currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                            }
                        }
                        aCount++;
                    }
                    else if (!consolidateOverlapMeetingGroupArr[aCount].allDay && currCalendarMeetingsBlock.endTime >= consolidateOverlapMeetingGroupArr[aCount].startTime)
                    {
                        consumed = true;
                        if (currCalendarMeetingsBlock.endTime < consolidateOverlapMeetingGroupArr[aCount].endTime)
                        {
                            currCalendarMeetingsBlock.endTime = consolidateOverlapMeetingGroupArr[aCount].endTime;
                        }
                        for(var i=0; i<calendarArrLen; i++)
                        {
                            if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                            {
                                if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                {
                                   currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                }
                                currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                            }
                        }
                        aCount++;
                    }
                }
            }
            if (!consumed)
            {
                retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length] = consolidateOverlapMeetingGroupArr[aCount];
                aCount++;  
            }
        }
        else
        {   
            if (retOverlapMeetingGroupArr.length > 0)
            {
                var currCalendarMeetingsBlock = retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length - 1];
                if (consolidateOverlapMeetingGroupArr[aCount].startTime < overlapMeetingGroupArr[bCount].startTime)
                {
                    if (IsSameDayMeeting(currCalendarMeetingsBlock.startTime, consolidateOverlapMeetingGroupArr[aCount].startTime))
                    {
                        if (currCalendarMeetingsBlock.allDay)
                        {
                            consumed = true;
                            for(var i=0; i<calendarArrLen; i++)
                            {
                                if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                                {
                                    if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                    {
                                       currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                    }
                                    currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                                }
                            }
                            aCount++;
                        }
                        else if (!consolidateOverlapMeetingGroupArr[aCount].allDay && currCalendarMeetingsBlock.endTime >= consolidateOverlapMeetingGroupArr[aCount].startTime)
                        {
                            consumed = true;
                            if (currCalendarMeetingsBlock.endTime < consolidateOverlapMeetingGroupArr[aCount].endTime)
                            {
                                currCalendarMeetingsBlock.endTime = consolidateOverlapMeetingGroupArr[aCount].endTime;
                            }
                            for(var i=0; i<calendarArrLen; i++)
                            {
                                if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                                {
                                    if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                    {
                                       currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                    }
                                    currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                                }
                            }
                            aCount++;
                        }                    
                    }
                }
                else 
                {
                    if (IsSameDayMeeting(currCalendarMeetingsBlock.startTime, overlapMeetingGroupArr[bCount].startTime))
                    {
                        if (currCalendarMeetingsBlock.allDay)
                        {
                            consumed = true;
                            if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                            {
                               currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                            }
                            currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                            bCount++;
                        }
                        else if (!overlapMeetingGroupArr[bCount].allDay && currCalendarMeetingsBlock.endTime >= overlapMeetingGroupArr[bCount].startTime)
                        {
                            consumed = true;
                            if (currCalendarMeetingsBlock.endTime < overlapMeetingGroupArr[bCount].endTime)
                            {
                                currCalendarMeetingsBlock.endTime = overlapMeetingGroupArr[bCount].endTime;
                            }
                            if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                            {
                               currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                            }
                            currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                            bCount++;
                        }
                    }
                }
            }
            if (!consumed)
            {
                retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length] = new OverlapMeetingGroup();
                var currCalendarMeetingsBlock = retOverlapMeetingGroupArr[retOverlapMeetingGroupArr.length - 1];
                
                if (overlapMeetingGroupArr[bCount].startTime < consolidateOverlapMeetingGroupArr[aCount].startTime)
                {
                    currCalendarMeetingsBlock.startTime = overlapMeetingGroupArr[bCount].startTime;
                    currCalendarMeetingsBlock.endTime = overlapMeetingGroupArr[bCount].endTime;
                    currCalendarMeetingsBlock.meetingCalendarGroup = new Array();    
                    currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = overlapMeetingGroupArr[bCount].meetingCalendarGroup[0];
                    
                    if (overlapMeetingGroupArr[bCount].allDay)
                    {
                        currCalendarMeetingsBlock.allDay = true;
                        if (IsSameDayMeeting(consolidateOverlapMeetingGroupArr[aCount].startTime, overlapMeetingGroupArr[bCount].startTime))
                        {
                            for(var i=0; i<calendarArrLen; i++)
                            {
                                if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                                {
                                    if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                    {
                                       currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                    }
                                    currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                                }
                            }
                            aCount++;    
                        }
                    }
                    else if (consolidateOverlapMeetingGroupArr[aCount].allDay)
                    {
                        if (IsSameDayMeeting(consolidateOverlapMeetingGroupArr[aCount].startTime, overlapMeetingGroupArr[bCount].startTime))
                        {
                            currCalendarMeetingsBlock.allDay = true;
                            currCalendarMeetingsBlock.endTime = consolidateOverlapMeetingGroupArr[aCount].endTime;
                            for(var i=0; i<calendarArrLen; i++)
                            {
                                if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                                {
                                    if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                    {
                                       currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                    }
                                    currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                                }
                            }
                            aCount++;    
                        }
                    }
                    else if (overlapMeetingGroupArr[bCount].endTime >= consolidateOverlapMeetingGroupArr[aCount].startTime)
                    {
                        if (currCalendarMeetingsBlock.endTime < consolidateOverlapMeetingGroupArr[aCount].endTime)
                        {
                            currCalendarMeetingsBlock.endTime = consolidateOverlapMeetingGroupArr[aCount].endTime;
                        } 
                        for(var i=0; i<calendarArrLen; i++)
                        {
                            if (consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i] != null)
                            {
                                if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                {
                                   currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                }
                                currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup[i]);
                            }
                        }
                        aCount++;
                            
                    }
                    bCount++;
                }
                else
                {
                    currCalendarMeetingsBlock.startTime = consolidateOverlapMeetingGroupArr[aCount].startTime;
                    currCalendarMeetingsBlock.endTime = consolidateOverlapMeetingGroupArr[aCount].endTime;
                    currCalendarMeetingsBlock.meetingCalendarGroup = consolidateOverlapMeetingGroupArr[aCount].meetingCalendarGroup;
                    if (consolidateOverlapMeetingGroupArr[aCount].allDay)
                    {
                        currCalendarMeetingsBlock.allDay = true;
                        if (IsSameDayMeeting(consolidateOverlapMeetingGroupArr[aCount].startTime, overlapMeetingGroupArr[bCount].startTime))
                        {
                            if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                            {
                               currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                            }
                            currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                            bCount++;
                        }
                    }
                    else if (overlapMeetingGroupArr[bCount].allDay)
                    {
                        if (IsSameDayMeeting(consolidateOverlapMeetingGroupArr[aCount].startTime, overlapMeetingGroupArr[bCount].startTime))
                        {
                            currCalendarMeetingsBlock.allDay = true;
                            currCalendarMeetingsBlock.endTime = overlapMeetingGroupArr[bCount].endTime;
                            if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                            {
                               currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                            }
                            currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                            bCount++;
                        }
                    }
                    else if (consolidateOverlapMeetingGroupArr[aCount].endTime >= overlapMeetingGroupArr[bCount].startTime)
                    {
                        if (currCalendarMeetingsBlock.endTime < overlapMeetingGroupArr[bCount].endTime)
                        {
                            currCalendarMeetingsBlock.endTime = overlapMeetingGroupArr[bCount].endTime;
                        } 
                        if (currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] == null)
                        {
                           currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                        }
                        currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex].concat(overlapMeetingGroupArr[bCount].meetingCalendarGroup[0]);
                        bCount++;
                    }
                    aCount++;
                }
                               
            }
                   
        }
    }
    return retOverlapMeetingGroupArr;
}


CalendarDataObj.prototype.CalculateIntersectionCalendarMeetingBlocks = function (aConsolidateIntersectionMeetingsGroupArr, bOverlapMeetingsGroupArr, calendarIndex, calendarArrLen)
{
    var retIntersectionMeetingsGroupArr = new Array();
    var aCount = 0;
    var bCount = 0;
    var aLength = aConsolidateIntersectionMeetingsGroupArr.length;
    var bLength = bOverlapMeetingsGroupArr.length;
    while (aCount < aLength && bCount < bLength)
    {
        var aBlock = aConsolidateIntersectionMeetingsGroupArr[aCount];
        var bBlock = bOverlapMeetingsGroupArr[bCount];
        var aStartTime = aBlock.startTime;
        var aEndTime = aBlock.endTime;
        var bStartTime = bBlock.startTime;
        var bEndTime = bBlock.endTime;
        
        if (aStartTime < bStartTime)
        {
            if (aBlock.allDay)
            {
                if (IsSameDayMeeting(bBlock.startTime, aBlock.startTime))
                {
                    if (bBlock.allDay)
                    {   
                           if (aBlock.meetingCalendarGroup[calendarIndex] == null)
                           {
                               aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                           } 
                           aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
                           retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
                           aCount++;
                           bCount++;
                    }
                    else
                    {   
                        var aGroupMeetings = new Array();
                        retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = new OverlapMeetingGroup(bBlock.startTime, bBlock.endTime, bBlock.allDay, aGroupMeetings);
                        var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                        currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = bBlock.meetingCalendarGroup[0];
                        for(var i=0; i<calendarArrLen; i++)
                        {
                            if (aBlock.meetingCalendarGroup[i] != null)
                            {
                                if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                                {
                                   currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                                }
                                currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(aBlock.meetingCalendarGroup[i]);
                            }
                        }
                        currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                        bCount++;          
                    }
                }
                else
                {
                    aCount++;
                }
            }
            
            else if (bBlock.allDay)
            {
                if (IsSameDayMeeting(bBlock.startTime, aBlock.startTime))
                {
                   if (aBlock.meetingCalendarGroup[calendarIndex] == null)
                   {
                       aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                   } 
                   aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
                   retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
                   var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                    currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                }
                aCount++;
            }
            
            else if (aEndTime <= bStartTime)
            {
                aCount ++;
            }
            else if (aEndTime <= bEndTime)
            {
               if (aBlock.meetingCalendarGroup[calendarIndex] == null)
               {
                   aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
               } 
               aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
               aBlock.startTime = bStartTime;
               retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
               var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
               currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
               aCount++;
            }
            else
            {
                var aGroupMeetings = new Array();
                retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = new OverlapMeetingGroup(bBlock.startTime, bBlock.endTime, bBlock.allDay, aGroupMeetings);
                var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = bBlock.meetingCalendarGroup[0];
                for(var i=0; i<calendarArrLen; i++)
                {
                    if (aBlock.meetingCalendarGroup[i] != null)
                    {
                        if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                        {
                           currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                        }
                        currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(aBlock.meetingCalendarGroup[i]);
                    }
                }
                currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                bCount++;
            }
        }
        else
        {
            if (bBlock.allDay)
            {
                if (IsSameDayMeeting(bBlock.startTime, aBlock.startTime))
                {
                    if (aBlock.allDay)
                    {   
                           if (aBlock.meetingCalendarGroup[calendarIndex] == null)
                           {
                               aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                           } 
                           aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
                           retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
                           aCount++;
                           bCount++;
                    }
                    else
                    {   
                       if (aBlock.meetingCalendarGroup[calendarIndex] == null)
                       {
                           aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
                       } 
                       aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
                       retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
                       var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                        
                        currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                        aCount++;          
                    }
                }
                else
                {
                    bCount++;
                }
            }
            else if (aBlock.allDay)
            {
                if (IsSameDayMeeting(bBlock.startTime, aBlock.startTime))
                {
                    var aGroupMeetings = new Array();
                    retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = new OverlapMeetingGroup(bBlock.startTime, bBlock.endTime, bBlock.allDay, aGroupMeetings);
                    var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                    currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = bBlock.meetingCalendarGroup[0];
                    for(var i=0; i<calendarArrLen; i++)
                    {
                        if (aBlock.meetingCalendarGroup[i] != null)
                        {
                            if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                            {
                               currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                            }
                            currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(aBlock.meetingCalendarGroup[i]);
                        }
                    }
                    currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                }
                bCount++;
            }
            
            else if (bEndTime <= aStartTime)
            {
                bCount ++;
            }
            else if (bEndTime <= aEndTime)
            {
                var aGroupMeetings = new Array();
                retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = new OverlapMeetingGroup(aBlock.startTime, bBlock.endTime, bBlock.allDay, aGroupMeetings);
                var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                currCalendarMeetingsBlock.meetingCalendarGroup[calendarIndex] = bBlock.meetingCalendarGroup[0];
                for(var i=0; i<calendarArrLen; i++)
                {
                    if (aBlock.meetingCalendarGroup[i] != null)
                    {
                        if (currCalendarMeetingsBlock.meetingCalendarGroup[i] == null)
                        {
                           currCalendarMeetingsBlock.meetingCalendarGroup[i] = new Array(); 
                        }
                        currCalendarMeetingsBlock.meetingCalendarGroup[i] = currCalendarMeetingsBlock.meetingCalendarGroup[i].concat(aBlock.meetingCalendarGroup[i]);
                    }
                }
                currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                bCount++;
            }
            else
            {
               if (aBlock.meetingCalendarGroup[calendarIndex] == null)
               {
                   aBlock.meetingCalendarGroup[calendarIndex] = new Array(); 
               } 
               aBlock.meetingCalendarGroup[calendarIndex] =  aBlock.meetingCalendarGroup[calendarIndex].concat(bBlock.meetingCalendarGroup[0]);
               retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length] = aBlock;
               var currCalendarMeetingsBlock = retIntersectionMeetingsGroupArr[retIntersectionMeetingsGroupArr.length - 1];
                
                currCalendarMeetingsBlock.filterIntersectingMeetings(calendarIndex);
                aCount++;
            }
        }
        
    }
    return retIntersectionMeetingsGroupArr;
}


CalendarDataObj.prototype.CalculateIntersectionAllDayCalendarMeeting = function (aAllDayCalendarMeetings, bAllDayCalendarMeetings)
{
    var retAllCalendarMeetings = new Array();
    var aCount = 0;
    var bCount = 0;
    var aLength = aAllDayCalendarMeetings.length;
    var bLength = bAllDayCalendarMeetings.length;
    for (aCount = 0; aCount < aLength; aCount++)
    {
        var aMeeting = aAllDayCalendarMeetings[aCount];
        var aStartTime = aMeeting.startTime;
        for (bCount = 0; bCount < bLength; bCount++)
        {
           var bMeeting = bAllDayCalendarMeetings[aCount];
           var bStartTime = bMeeting.startTime;
           if (aStartTime.getUTCFullYear() == bStartTime.getUTCFullYear())
           {
               if (aStartTime.getUTCMonth() == bStartTime.getUTCMonth())
               {
                   if (aStartTime.getUTCDate() == bStartTime.getUTCDate())
                   {
                        retAllCalendarMeetings[retAllCalendarMeetings.length] = aMeeting;
                        break;
                   }
                
               }
           }
        }
    }
    return retAllCalendarMeetings;
}


function GroupOverlapMeetings(allDayMeetings, calendarMeetingBlocks)
{
    var overlapAllDayMeetingGroupArr = new Array();
    if (allDayMeetings != null)
    {
        var len = allDayMeetings.length;
        for (var i=0; i<len; i++)
        {
            var aMeeting = allDayMeetings[i];
            aMeeting.allDay = true;
            var isOverlap = false;
            var oLen = overlapAllDayMeetingGroupArr.length;
            for (var j=0; j<oLen; j++)
            {
                var overLapMeeting = overlapAllDayMeetingGroupArr[j];
                var startTime = aMeeting.startTime;
                if (curCalendarData.timeZoneObj != null && curCalendarData.timeZoneObj.id > 0)
                {
                    var aObj = new DateTimeObj(startTime.getUTCFullYear(), startTime.getUTCMonth(), startTime.getUTCDate(), 0, 0, 0, curCalendarData.timeZoneObj, true);
                    startTime = CreateNewDateFromMiliInUTC(aObj.innerMiliSecs);
                }
                if (IsSameDayMeeting(startTime, overLapMeeting.startTime))
                {
                    overLapMeeting.meetingCalendarGroup[0].push(aMeeting);
                    isOverlap = true;
                    break;
                }
            }
            if (!isOverlap)
            {
                var meetingArray = new Array();
                meetingArray[0] = aMeeting;
                var meetingGroup = new Array();            
                meetingGroup[0] = meetingArray;
                var startTime = aMeeting.startTime;
                var endTime = aMeeting.endTime;
                if (curCalendarData.timeZoneObj != null && curCalendarData.timeZoneObj.id > 0)
                {
                    var aObj = new DateTimeObj(startTime.getUTCFullYear(), startTime.getUTCMonth(), startTime.getUTCDate(), 0, 0, 0, curCalendarData.timeZoneObj, true);
                    var bObj = aObj.AddDay(1);
                    startTime = CreateNewDateFromMiliInUTC(aObj.innerMiliSecs);
                    endTime = CreateNewDateFromMiliInUTC(bObj.innerMiliSecs);
                }
                var overLapMeeting = new OverlapMeetingGroup(startTime, endTime, true, meetingGroup);
                overlapAllDayMeetingGroupArr[overlapAllDayMeetingGroupArr.length] = overLapMeeting;
            }    
        }
     }   
    
    var overlapMeetingGroupArr = new Array();
    if (calendarMeetingBlocks != null)
    {
        var len = calendarMeetingBlocks.length;
        for (var k=0; k<len; k++)
        {
            var aBlock = calendarMeetingBlocks[k];
            var isOverlap = false;
            var oLen = overlapAllDayMeetingGroupArr.length;
            var oIdx = -1;
            for (var j=0; j<oLen; j++)
            {
                var overLapMeeting = overlapAllDayMeetingGroupArr[j];
                if (IsSameDayMeeting(aBlock.startTime, overLapMeeting.startTime))
                {
                    overLapMeeting.meetingCalendarGroup[0] = overLapMeeting.meetingCalendarGroup[0].concat(aBlock.meetings);
                    isOverlap = true;
                    break;
                }
                else if (aBlock.startTime > overLapMeeting.startTime)
                {
                    oIdx = j;
                    //break;
                }
                //oIdx++;
            }
            if (oIdx >= 0)
            {
                var slicedOverlapAllDayMeetingGroupArr = overlapAllDayMeetingGroupArr.slice(0, oIdx+1);
                overlapMeetingGroupArr = overlapMeetingGroupArr.concat(slicedOverlapAllDayMeetingGroupArr);
                overlapAllDayMeetingGroupArr = overlapAllDayMeetingGroupArr.slice(oIdx+1);
            }
            if (!isOverlap)
            {   
                var meetingGroup = new Array();            
                meetingGroup[0] = cloneArray(aBlock.meetings);
                var overLapMeeting = new OverlapMeetingGroup(aBlock.startTime, aBlock.endTime, false, meetingGroup);
                overlapMeetingGroupArr[overlapMeetingGroupArr.length] = overLapMeeting;
            }    
        }
    }
    overlapMeetingGroupArr = overlapMeetingGroupArr.concat(overlapAllDayMeetingGroupArr);
    return overlapMeetingGroupArr;
}

function HandleCrossDayMeetingBlocks(calendarMeetingBlocks)
{
    var retCalendarMeetingBlocks = new Array();
    if (calendarMeetingBlocks) {
        var len = calendarMeetingBlocks.length;
        for (var k = 0; k < len; k++) {
            var aBlock = calendarMeetingBlocks[k];
            var splitBlocks = SplitCrossDayCalendarMeetingBlock(aBlock);
            retCalendarMeetingBlocks = retCalendarMeetingBlocks.concat(splitBlocks);
        }
    }
    return retCalendarMeetingBlocks;
}

function SplitCrossDayCalendarMeetingBlock(aBlock)
{
    var retCalendarMeetingsBlocks = new Array();
    var aStartTime = aBlock.startTime;
    var aEndTime = aBlock.endTime;
    if (IsSameDayMeeting(aStartTime, aEndTime))
    //if (true)
    {
        retCalendarMeetingsBlocks[0] = aBlock;
    }
    else
    {      
        var aObj = CreateNewDateFromMili(aStartTime.valueOf(),curCalendarData.timeZoneObj);
        var bObj = aObj.GetNextDay();
        var dayEndTime = CreateNewDateFromMiliInUTC(bObj.innerMiliSecs);
        var dayStartTime = aStartTime;
        var isBreak = false;
        while (!isBreak)
        {
            if (aEndTime < dayEndTime)
            {
                dayEndTime = aEndTime;
                isBreak = true;
            }
            var firstCalendarMeetingsBlock = new CalendarMeetingBlock();
            firstCalendarMeetingsBlock.startTime = dayStartTime;
            firstCalendarMeetingsBlock.endTime = dayEndTime;
            var firstMeetingArray = new Array();
            firstCalendarMeetingsBlock.meetings = firstMeetingArray;
            retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length] = firstCalendarMeetingsBlock;
            
            var len = aBlock.meetings.length;
            for (var i=0; i<len; i++)
            {
                var aMeeting = aBlock.meetings[i];
                if (aMeeting.startTime <= dayStartTime)
                {
                    if (aMeeting.endTime > dayStartTime)
                    {
                        firstMeetingArray[firstMeetingArray.length] = aMeeting;
                    }
                }
                else if (aMeeting.startTime < dayEndTime)
                {
                    firstMeetingArray[firstMeetingArray.length] = aMeeting;
                }
            } 
            if (!isBreak)
            {
                dayStartTime = dayEndTime;  
                bObj = bObj.GetNextDay();
                dayEndTime = CreateNewDateFromMiliInUTC(bObj.innerMiliSecs);
            }
        }
        
        
    }
    return retCalendarMeetingsBlocks;
}

function IsSameDayMeeting(aStartTime, bStartTime)
{
   var isSameDay = false;
   if (curCalendarData.timeZoneObj == null || curCalendarData.timeZoneObj.id <= 0)
   {
       if (aStartTime.getUTCFullYear() == bStartTime.getUTCFullYear())
       {
           if (aStartTime.getUTCMonth() == bStartTime.getUTCMonth())
           {
               if (aStartTime.getUTCDate() == bStartTime.getUTCDate())
               {
                    isSameDay = true;
               }
            
           }
       }
   }
   else
   {
        var aObj = CreateNewDateFromMili(aStartTime.valueOf(),curCalendarData.timeZoneObj);
        var bObj = CreateNewDateFromMili(bStartTime.valueOf(),curCalendarData.timeZoneObj);
        isSameDay = aObj.IsEqualToDate(bObj);
   }
   return isSameDay;
}

CalendarDataObj.prototype.HandleOverlapMeetingGrouping = function()
{   
    if ((this.calendarMeetingBlocks != null && this.calendarMeetingBlocks.length > 0) || (this.allDayCalendarMeetings != null && this.allDayCalendarMeetings.length > 0))
    {
        this.overlapMeetingGroupArr = GroupOverlapMeetings(this.allDayCalendarMeetings, this.calendarMeetingBlocks);
    }   
    else
    {
        if (this.calendarsMeetingDataArr != null)
        {
            var len = this.calendarsMeetingDataArr.length;
            for (var i=0; i<len; i++)
            {
                this.calendarsMeetingDataArr[i].HandleOverlapMeetingGrouping();
            }
        }
        if (this.resourcesMeetingDataArr != null)
        {
            var len = this.resourcesMeetingDataArr.length;
            for (var i=0; i<len; i++)
            {
                this.resourcesMeetingDataArr[i].HandleOverlapMeetingGrouping();
            }
        }
    }
}

CalendarDataObj.prototype.FindInterSectionResourceMeetingsWithoutOverlapCalc = function (selectedCalendarIds, consolidateCalendarMeetingsBlocks, consolidateAllDayCalendarMeetings, calendarsMeetingDataArr)
{
    consolidateCalendarMeetingsBlocks = null;
    consolidateAllDayCalendarMeetings = new Array();
    var len = calendarsMeetingDataArr.length;
    for (var i=0; i<len; i++)
    {
        aCalendarObj = calendarsMeetingDataArr[i].calendarObj;
        if (aCalendarObj.selected)
        {
            selectedCalendarIds[selectedCalendarIds.length] = aCalendarObj.calendarId;
            if (consolidateCalendarMeetingsBlocks == null)
            {
                consolidateAllDayCalendarMeetings = calendarsMeetingDataArr[i].allDayCalendarMeetings;
                consolidateCalendarMeetingsBlocks = calendarsMeetingDataArr[i].calendarMeetingBlocks;
            }
            else
            {
               consolidateCalendarMeetingsBlocks = this.CalculateIntersectionCalendarMeetingBlocksWithoutOverlapCalc(consolidateCalendarMeetingsBlocks, calendarsMeetingDataArr[i].calendarMeetingBlocks);
               consolidateAllDayCalendarMeetings = this.CalculateIntersectionAllDayCalendarMeeting( consolidateAllDayCalendarMeetings, calendarsMeetingDataArr[i].allDayCalendarMeetings);
            }
        }
    }
    var retArray = new Array(3);
    retArray[0] = selectedCalendarIds;
    retArray[1] = consolidateCalendarMeetingsBlocks;
    retArray[2] = consolidateAllDayCalendarMeetings;
    return retArray;
}



CalendarDataObj.prototype.CalculateIntersectionCalendarMeetingBlocksWithoutOverlapCalc = function (aCalendarMeetingsBlocks, bCalendarsMeetingBlocks)
{
    var retCalendarMeetingsBlocks = new Array();
    var aCount = 0;
    var bCount = 0;
    var aLength = aCalendarMeetingsBlocks.length;
    var bLength = bCalendarsMeetingBlocks.length;
    while (aCount < aLength && bCount < bLength)
    {
        var aBlock = aCalendarMeetingsBlocks[aCount];
        var bBlock = bCalendarsMeetingBlocks[bCount];
        var aStartTime = aBlock.startTime;
        var aEndTime = aBlock.endTime;
        var bStartTime = bBlock.startTime;
        var bEndTime = bBlock.endTime;
        if (aStartTime < bStartTime)
        {
            if (aEndTime <= bStartTime)
            {
                aCount ++;
            }
            else if (aEndTime <= bEndTime)
            {
                retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length] = new CalendarMeetingBlock();
                var currCalendarMeetingsBlock = retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length - 1];
                currCalendarMeetingsBlock.startTime = bStartTime;
                currCalendarMeetingsBlock.endTime = aEndTime;
                currCalendarMeetingsBlock.meetings = aBlock.meetings;
                currCalendarMeetingsBlock.meetings = currCalendarMeetingsBlock.meetings.concat(bBlock.meetings);
                
                aCount++;
            }
            else
            {
                retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length] = new CalendarMeetingBlock();
                var currCalendarMeetingsBlock = retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length - 1];
                currCalendarMeetingsBlock.startTime = bStartTime;
                currCalendarMeetingsBlock.endTime = bEndTime;
                currCalendarMeetingsBlock.meetings = aBlock.meetings;
                currCalendarMeetingsBlock.meetings = currCalendarMeetingsBlock.meetings.concat(bBlock.meetings);
                bCount++;
            }
        }
        else
        {
            if (bEndTime <= aStartTime)
            {
                bCount ++;
            }
            else if (bEndTime <= aEndTime)
            {
                retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length] = new CalendarMeetingBlock();
                var currCalendarMeetingsBlock = retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length - 1];
                currCalendarMeetingsBlock.startTime = aStartTime;
                currCalendarMeetingsBlock.endTime = bEndTime;
                currCalendarMeetingsBlock.meetings = aBlock.meetings;
                currCalendarMeetingsBlock.meetings = currCalendarMeetingsBlock.meetings.concat(bBlock.meetings);
                
                bCount++;
            }
            else
            {
                retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length] = new CalendarMeetingBlock();
                var currCalendarMeetingsBlock = retCalendarMeetingsBlocks[retCalendarMeetingsBlocks.length - 1];
                currCalendarMeetingsBlock.startTime = aStartTime;
                currCalendarMeetingsBlock.endTime = aEndTime;
                currCalendarMeetingsBlock.meetings = aBlock.meetings;
                currCalendarMeetingsBlock.meetings = currCalendarMeetingsBlock.meetings.concat(bBlock.meetings);
                
                aCount++;
            }
        }
        
    }
    return retCalendarMeetingsBlocks;
}

