calenstyle
Version:
CalenStyle is a Responsive Drag-and-Drop Event Calendar for Web, iOS, Android & Windows. CalenStyle is customizable plugin having multiple, clean-designed event calendar templates specially designed for web & mobile applications.
1,336 lines (1,114 loc) • 135 kB
JavaScript
/* -----------------------------------------------------------------------------
CalenStyle - Responsive Event Calendar
Version 2.0.8
Copyright (c)2017 Lajpat Shah
Contributors : https://github.com/nehakadam/CalenStyle/contributors
Repository : https://github.com/nehakadam/CalenStyle
Homepage : https://nehakadam.github.io/CalenStyle
----------------------------------------------------------------------------- */
/*! ---------------------------------- CalenStyle Detail View Start ---------------------------------- */
//"use strict";
CalenStyle.prototype = $.extend(CalenStyle.prototype, {
_getTimeSlotsArrayForCurrentView: function()
{
var to = this;
var iNumOfDays = $.cf.compareStrings(to.setting.visibleView, "DayEventDetailView") ? 1 : to.tv.iNoVDay,
iMaxTimeSlots = 24 * to.tv.iUTmSlt,
bArrTemp, iDateIndex, iSlotsIndex, iTempIndex, iNumOfSlotsSpanned,
iTempHour, iTempMinutes, iTempSlot, iTempSlotIndex;
to.tv.bADVCur = []; to.tv.sADVInfo = [];
// ---------------------- Set arrayOfTimeSlots Start --------------------------
for(iDateIndex = 0; iDateIndex < iNumOfDays; iDateIndex++)
{
bArrTemp = [];
for(var iHoursIndex = 0; iHoursIndex < 24; iHoursIndex++)
{
for(iSlotsIndex = 0; iSlotsIndex < to.tv.iUTmSlt; iSlotsIndex++)
{
bArrTemp.push(0);
}
}
bArrTemp.push(0); // For All Day
to.tv.bADVCur.push(bArrTemp);
}
// ---------------------- Set arrayOfTimeSlots End ----------------------------
// ------------- Set RestrictedSection and BusinessHours in arrayOfTimeSlots Start --------------
var dThisTempDate = new Date(to.tv.dVDSDt),
iThisTempDate = to.tv.dVDSDt.getTime();
for(iDateIndex = 0; iDateIndex < iNumOfDays; iDateIndex++)
{
if(to.tv.bABsDays[dThisTempDate.getDay()] || !to.setting.excludeNonBusinessHours)
{
bArrTemp = to.tv.bADVCur[iDateIndex];
var dArrTempResSec = to._getRestrictedSectionForCurrentView(dThisTempDate),
oArrTempBusinessHours = to._getBusinessHoursForCurrentView(dThisTempDate);
// ---------------------- Set Available Date Array Indicator Start --------------------------
if(oArrTempBusinessHours.length > 0)
{
for(iTempIndex = 0; iTempIndex < oArrTempBusinessHours.length; iTempIndex++)
{
var dArrTempAvailable = oArrTempBusinessHours[iTempIndex],
dTempAvailableStart = new Date(dArrTempAvailable[0]),
dTempAvailableEnd = new Date(dArrTempAvailable[1]);
iNumOfSlotsSpanned = Math.floor((dTempAvailableEnd.getTime() - dTempAvailableStart.getTime()) / to.tv.iUTmMS);
iTempHour = dTempAvailableStart.getHours();
iTempMinutes = dTempAvailableStart.getMinutes();
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
for(iSlotsIndex = 0; iSlotsIndex < iNumOfSlotsSpanned; iSlotsIndex++)
{
iTempSlotIndex = (iTempHour === 0) ? iTempSlot : ((iTempHour * to.tv.iUTmSlt) + iTempSlot);
bArrTemp[iTempSlotIndex] = 1;
iTempMinutes += to.setting.unitTimeInterval;
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
if(iTempMinutes >= 60)
{
iTempMinutes = iTempMinutes % to.setting.unitTimeInterval;
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
iTempHour += 1;
}
}
}
}
// ----------------------- Set Available Date Array Indicator End ---------------------------
// --------------- Set RestrictedSection Date Array Indicator Start ---------------------------------
if(dArrTempResSec.length > 0)
{
for(iTempIndex = 0; iTempIndex < dArrTempResSec.length; iTempIndex++)
{
var dArrResSec = dArrTempResSec[iTempIndex],
dTempResSecStart = new Date(dArrResSec.start),
bCompStart = to.compareDates(dThisTempDate, dTempResSecStart) === 0,
dTempResSecEnd = new Date(dArrResSec.end),
bCompEnd = to.compareDates(dThisTempDate, dTempResSecEnd) === 0;
if(!bCompStart)
dTempResSecStart = to._normalizeDateTime(dThisTempDate, "START", "T");
if(!bCompEnd)
dTempResSecEnd = to._normalizeDateTime(dThisTempDate, "END", "T");
iNumOfSlotsSpanned = Math.round((dTempResSecEnd.getTime() - dTempResSecStart.getTime()) / to.tv.iUTmMS);
iNumOfSlotsSpanned = (iNumOfSlotsSpanned === 0) ? 1 : (iNumOfSlotsSpanned > iMaxTimeSlots) ? iMaxTimeSlots : iNumOfSlotsSpanned;
var iInfoIndex = 2, oDVInfo,
bBGColorFound = false,
bClassFound = false,
bMatchFound = false,
sResSecBg = dArrResSec.backgroundColor,
bValidBGColor = $.cf.isValid(sResSecBg),
sResSecClass = dArrResSec.class,
bValidClass = $.cf.isValid(sResSecClass);
if(bValidBGColor || bValidClass)
{
for(iInfoIndex = 0; iInfoIndex < to.tv.sADVInfo.length; iInfoIndex++)
{
oDVInfo = to.tv.sADVInfo[iInfoIndex];
bBGColorFound = bValidBGColor && (oDVInfo.bgColor === sResSecBg);
bClassFound = bValidClass && (oDVInfo.class === sResSecClass);
if(bValidBGColor && bValidClass)
{
if(bBGColorFound && bClassFound)
{
iInfoIndex = oDVInfo.index;
bMatchFound = true;
break;
}
}
else
{
if(bBGColorFound || bClassFound)
{
iInfoIndex = oDVInfo.index;
bMatchFound = true;
break;
}
}
}
if(!bMatchFound)
{
oDVInfo = {};
iInfoIndex = 3 + to.tv.sADVInfo.length;
oDVInfo.index = iInfoIndex;
if(bValidBGColor)
oDVInfo.bgColor = sResSecBg;
if(bValidClass)
oDVInfo.class = sResSecClass;
to.tv.sADVInfo.push(oDVInfo);
}
}
if(iNumOfSlotsSpanned === iMaxTimeSlots)
{
bArrTemp[bArrTemp.length - 1] = iInfoIndex;
}
iTempHour = dTempResSecStart.getHours();
iTempMinutes = dTempResSecStart.getMinutes();
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
for(iSlotsIndex = 0; iSlotsIndex < iNumOfSlotsSpanned; iSlotsIndex++)
{
iTempSlotIndex = (iTempHour === 0) ? iTempSlot : ((iTempHour * to.tv.iUTmSlt) + iTempSlot);
bArrTemp[iTempSlotIndex] = iInfoIndex;
iTempMinutes += to.setting.unitTimeInterval;
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
if(iTempMinutes >= 60)
{
iTempMinutes = iTempMinutes % to.setting.unitTimeInterval;
iTempSlot = Math.floor(iTempMinutes / to.setting.unitTimeInterval);
iTempHour += 1;
}
}
}
}
// --------------- Set RestrictedSection Date Array Indicator End -----------------------------------
to.tv.bADVCur[iDateIndex] = bArrTemp;
}
iThisTempDate += $.CalenStyle.extra.iMS.d;
dThisTempDate = new Date(iThisTempDate);
}
// ------------- Set RestrictedSection and BusinessHours in arrayOfTimeSlots Start --------------
},
_getStartAndEndDatesOfEventWithId: function(iEventId)
{
var to = this;
var oThisEvent = to.getEventWithId(iEventId);
return [oThisEvent.start, oThisEvent.end];
},
_getNumberOfHoursOfEventWithId: function(sEventId)
{
var to = this;
var oEvent = to.getEventWithId(sEventId);
return to.__getNumberOfHoursOfEvent(oEvent.isAllDay, oEvent.start, oEvent.end);
},
_getNumberOfDaysOfEventForWeek: function(bIsAllDay, dStartDateTime, dEndDateTime, bWithHours, bForView)
{
var to = this;
var dTempEndDateTime;
if(bIsAllDay && to.compareDateTimes(dStartDateTime, dEndDateTime) === 0)
dTempEndDateTime = new Date(dEndDateTime.getTime() + $.CalenStyle.extra.iMS.d);
else
dTempEndDateTime = new Date(dEndDateTime);
if(dTempEndDateTime.getHours() === 0 && dTempEndDateTime.getMinutes() === 0)
dTempEndDateTime.setMinutes(dTempEndDateTime.getMinutes() - 1);
var iNumOfDays = 0,
dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dTempEndDateTime),
dTempStartDate = dArrTempDates[0], dTempEndDate = dArrTempDates[1],
iNumOfMinutes = Math.round((dTempEndDate.getTime() - dTempStartDate.getTime()) / $.CalenStyle.extra.iMS.m),
iNumOfHours = Math.round(iNumOfMinutes / 60);
if(iNumOfMinutes < 0)
console.log("Invalid Start And End Dates " + dStartDateTime + " " + dTempEndDateTime);
else
{
iNumOfDays = 0;
if(to.compareDates(dTempStartDate, dTempEndDate) !== 0)
{
var dNewStartDate = to.setDateInFormat({"date": dTempStartDate}, "START"),
dNewEndDate = to.setDateInFormat({"date": dTempEndDate}, "START"),
iNewNumOfHours = (dNewEndDate.getTime() - dNewStartDate.getTime()) / $.CalenStyle.extra.iMS.h;
iNumOfDays = Math.round(iNewNumOfHours / 24) + 1;
if(bForView)
{
var dTempDate = new Date(dNewStartDate), iTempNumOfDays = 0;
for(var iTempIndex = 0; iTempIndex < iNumOfDays; iTempIndex++)
{
if(to.__findWhetherDateIsVisibleInCurrentView(dTempDate, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate))
iTempNumOfDays++;
dTempDate.setDate(dTempDate.getDate() + 1);
}
iNumOfDays = iTempNumOfDays;
}
}
else
{
if(bForView)
{
if(to.__findWhetherDateIsVisibleInCurrentView(dTempStartDate, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate))
iNumOfDays = 1;
}
else
iNumOfDays = 1;
}
}
if(bWithHours)
return [iNumOfDays, iNumOfHours];
else
return iNumOfDays;
},
_getLeftPositionOfEventSeg: function(iLeftPos)
{
var to = this;
var iArrDVDaysLength = to.tv.fADVDayLftPos.length,
iDVTableColumnWidth = $(to.elem).find(".cdvTableColumns").width(),
iNewLeftPos = 0;
for(var iTempIndex1 = 0; iTempIndex1 < iArrDVDaysLength; iTempIndex1++)
{
var iHoriStartPos = to.tv.fADVDayLftPos[iTempIndex1],
iHoriEndPos = iHoriStartPos + iDVTableColumnWidth;
iHoriStartPos -= 5;
iHoriEndPos -= 5;
if(iTempIndex1 === (iArrDVDaysLength - 1))
iHoriEndPos += 5;
if(iLeftPos >= iHoriStartPos && iLeftPos <= iHoriEndPos)
{
iNewLeftPos = to.tv.fADVDayLftPos[iTempIndex1];
break;
}
}
return iNewLeftPos;
},
_getDateBasedOnLeftPosition: function(iLeftPos)
{
var to = this;
if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView"))
return to.setting.selectedDate;
var iDVTableColumnWidth = $(to.elem).find(".cdvTableColumns").width(),
iArrDVDaysLength = to.tv.fADVDayLftPos.length,
iTempIndex = 0, iThisIndex = 0, iTempIndex1;
for(iTempIndex1 = 0; iTempIndex1 < iArrDVDaysLength; iTempIndex1++)
{
var iHoriStartPos = to.tv.fADVDayLftPos[iTempIndex1] - 5,
iHoriEndPos = iHoriStartPos + iDVTableColumnWidth - 5;
if(iTempIndex1 === (iArrDVDaysLength - 1))
iHoriEndPos += 5;
if(iLeftPos >= iHoriStartPos && iLeftPos <= iHoriEndPos)
{
iThisIndex = iTempIndex1 + 1;
break;
}
}
for(iTempIndex1 = 0; iTempIndex1 < to.tv.dAVDt.length; iTempIndex1++)
{
var dThisDate = to.tv.dAVDt[iTempIndex1];
if(to.__isDateInCurrentView(dThisDate))
{
iTempIndex++;
if(iTempIndex === iThisIndex)
return dThisDate;
}
}
},
_getDateForDayNumber: function(iDayNumber, bFromLeft)
{
var to = this;
var iThisIndex = (bFromLeft) ? 0 : (to.tv.iNoVDay - 1),
iThisDayNumber = 0;
for(var iTempIndex = 0; iTempIndex < to.tv.iNoVDay; iTempIndex++)
{
iThisDayNumber++;
if(iThisDayNumber === iDayNumber)
return to.tv.dAVDt[iThisIndex];
iThisIndex = (bFromLeft) ? (iThisIndex + 1) : (iThisIndex - 1);
}
},
_createCopyOfArray: function(oArrInput)
{
var to = this;
var oArrOutput = [];
return oArrOutput.concat(oArrInput);
},
//------------------------------- Event Segment Manipulation Start -------------------------------
_setPropertiesOfEventSeg: function()
{
var to = this;
var oArrCollidingEvents = [], oTempArrEventSegs, oArrTempSlot, oArrTimeSlots, iSlotIndex;
// ---------------------------- setPropertiesOfEventSegments ----------------------------
for(var iThisDay = 0; iThisDay < to.tv.dAVDt.length; iThisDay++)
{
var oArrConditions = [];
oArrConditions.push(["eventSegStart", to.tv.dAVDt[iThisDay]]);
var oArrTempEvents = to._getEventSegWith(oArrConditions);
oArrTempEvents = to._sortEventSeg(to._createCopyOfArray(oArrTempEvents));
oArrTimeSlots = [];
for(var iThisEvent = 0; iThisEvent < oArrTempEvents.length; iThisEvent++)
{
var oEventSeg = oArrTempEvents[iThisEvent],
dSegStartDate = oEventSeg.eventSegStart,
dSegEndDate = oEventSeg.eventSegEnd;
if(oArrTimeSlots.length <= 0)
{
oTempArrEventSegs = new Array(oEventSeg);
oArrTempSlot = new Array(dSegStartDate, dSegEndDate, oTempArrEventSegs);
oArrTimeSlots.push(oArrTempSlot);
}
else
{
var bAddedInExisting = 0;
for(iSlotIndex = 0; iSlotIndex < oArrTimeSlots.length; iSlotIndex++)
{
var oTimeSlot = oArrTimeSlots[iSlotIndex],
dSlotStartDate = oTimeSlot[0],
dSlotEndDate = oTimeSlot[1],
bSegStartDate1 = 0, bSegStartDate2 = 0,
bSegEndDate1 = 0, bSegEndDate2 = 0,
iCompStartTime1 = to.compareDateTimes(dSegStartDate, dSlotStartDate),
iCompStartTime2 = to.compareDateTimes(dSegStartDate, dSlotEndDate),
iCompEndTime1 = to.compareDateTimes(dSegEndDate, dSlotStartDate),
iCompEndTime2 = to.compareDateTimes(dSegEndDate, dSlotEndDate);
if(iCompStartTime1 > 0 || iCompStartTime1 === 0)
bSegStartDate1 = 1;
if(iCompStartTime2 < 0)
bSegStartDate2 = 1;
if(iCompEndTime1 > 0)
bSegEndDate1 = 1;
if(iCompEndTime2 < 0 || iCompEndTime2 === 0)
bSegEndDate2 = 1;
if((bSegStartDate1 === 1 && bSegStartDate2 === 1) || (bSegEndDate1 === 1 && bSegEndDate2 === 1))
{
var oArrSlotSegments = oTimeSlot[2];
oArrSlotSegments.push(oEventSeg);
bAddedInExisting = 1;
}
if(iCompStartTime1 < 0)
oTimeSlot[0] = dSegStartDate; // Changing StartTime
if(iCompEndTime2 > 0 && iCompStartTime2 < 0)
oTimeSlot[1] = dSegEndDate; // Changing EndTime
}
if(bAddedInExisting === 0)
{
oTempArrEventSegs = new Array(oEventSeg);
oArrTempSlot = new Array(dSegStartDate, dSegEndDate, oTempArrEventSegs);
oArrTimeSlots.push(oArrTempSlot);
}
}
}
oArrCollidingEvents.push(oArrTimeSlots);
}
// ------------------------------ Colliding Events -------------------------------
var oAEventsegColumns = [];
for(var iIndex = 0; iIndex < oArrCollidingEvents.length; iIndex++)
{
oArrTimeSlots = oArrCollidingEvents[iIndex];
var oArrTempColumns = [];
for(iSlotIndex = 0; iSlotIndex < oArrTimeSlots.length; iSlotIndex++)
{
var oArrTempTimeSlot = oArrTimeSlots[iSlotIndex],
oAEventSegs = oArrTempTimeSlot[2],
oArrColumns = to._assignEventSegToColumnsInDetailView(oAEventSegs);
oArrTempColumns.push([oArrTempTimeSlot[0], oArrTempTimeSlot[1], oArrColumns]);
}
oAEventsegColumns.push(oArrTempColumns);
}
},
_getEventSegWith: function(oArrConditions)
{
var to = this;
var oArrTempEvents = [];
for(var iSeg = 0; iSeg < to.tv.oASmEvSeg.length; iSeg++)
{
var oEventSeg = to.tv.oASmEvSeg[iSeg],
bConditionSatisfied = 0;
for(var iCondition = 0; iCondition < oArrConditions.length; iCondition++)
{
var oCondition = oArrConditions[iCondition],
propertyName = oCondition[0],
compareToValue = oCondition[1];
if($.cf.compareStrings(propertyName, "eventSegStart") || $.cf.compareStrings(propertyName, "eventSegEnd"))
{
if(to.compareDates(oEventSeg[propertyName], compareToValue) === 0)
bConditionSatisfied++;
}
else
{
if(oEventSeg[propertyName] === compareToValue)
bConditionSatisfied++;
}
}
if(bConditionSatisfied === oArrConditions.length)
oArrTempEvents.push(oEventSeg);
}
return oArrTempEvents;
},
_sortEventSeg: function(oArrTempEventSegs)
{
var to = this;
// Event Segment Sorting Logic
// 1. Sort Event Segments Based on StartDateTime
// 2. Sort Events Based on Duration
var iNumOfEventSegs = oArrTempEventSegs.length;
if(iNumOfEventSegs > 1)
{
for(var iEventOut = 0; iEventOut < iNumOfEventSegs; iEventOut++)
{
var oEventSeg1 = oArrTempEventSegs[iEventOut],
sEventSeg1Id = parseInt(oEventSeg1.eventId),
dEvent1StartDate = to._getStartAndEndDatesOfEventWithId(sEventSeg1Id)[0],
oTempEventSeg;
for(var iEventIn = (iEventOut + 1); iEventIn < iNumOfEventSegs; iEventIn++)
{
var oEventSeg2 = oArrTempEventSegs[iEventIn],
sEventSeg2Id = parseInt(oEventSeg2.eventId);
if(sEventSeg1Id !== sEventSeg2Id)
{
var dEvent2StartDate = to._getStartAndEndDatesOfEventWithId(sEventSeg2Id)[0],
iCompTimes = to.compareDateTimes(dEvent1StartDate, dEvent2StartDate);
if(iCompTimes > 0)
{
oTempEventSeg = oEventSeg1;
oEventSeg1 = oEventSeg2;
oEventSeg2 = oTempEventSeg;
oArrTempEventSegs[iEventOut] = oEventSeg1;
dEvent1StartDate = dEvent2StartDate;
oArrTempEventSegs[iEventIn] = oEventSeg2;
}
else if(iCompTimes === 0)
{
var iEvent1Hours = to._getNumberOfHoursOfEventWithId(sEventSeg1Id),
iEvent2Hours = to._getNumberOfHoursOfEventWithId(sEventSeg2Id);
if(iEvent2Hours > iEvent1Hours)
{
oTempEventSeg = oEventSeg1;
oEventSeg1 = oEventSeg2;
oEventSeg2 = oTempEventSeg;
oArrTempEventSegs[iEventOut] = oEventSeg1;
dEvent1StartDate = oEventSeg1.eventSegStart;
oArrTempEventSegs[iEventIn] = oEventSeg2;
}
}
}
}
}
}
return oArrTempEventSegs;
},
_whetherEventsAreColliding: function(oEventSeg1, oEventSeg2)
{
var to = this;
var dEventSeg1StartDate = oEventSeg1.eventSegStart,
dEventSeg1EndDate = oEventSeg1.eventSegEnd,
dEventSeg2StartDate = oEventSeg2.eventSegStart,
dEventSeg2EndDate = oEventSeg2.eventSegEnd,
bSegStartDate1 = 0, bSegStartDate2 = 0,
bSegEndDate1 = 0, bSegEndDate2 = 0,
iCompStartTime1 = to.compareDateTimes(dEventSeg1StartDate, dEventSeg2StartDate),
iCompStartTime2 = to.compareDateTimes(dEventSeg1StartDate, dEventSeg2EndDate),
iCompEndTime1 = to.compareDateTimes(dEventSeg1EndDate, dEventSeg2StartDate),
iCompEndTime2 = to.compareDateTimes(dEventSeg1EndDate, dEventSeg2EndDate);
if(iCompStartTime1 > 0 || iCompStartTime1 === 0)
bSegStartDate1 = 1;
if(iCompStartTime2 < 0)
bSegStartDate2 = 1;
if(iCompEndTime1 > 0)
bSegEndDate1 = 1;
if(iCompEndTime2 < 0 || iCompEndTime2 === 0)
bSegEndDate2 = 1;
if((bSegStartDate1 === 1 && bSegStartDate2 === 1) || (bSegEndDate1 === 1 && bSegEndDate2 === 1))
return true;
else
return false;
},
_removeEventSegWithId: function(sId)
{
var to = this;
var oArrTemp = [];
sId = parseInt(sId);
for(var iSegIndex = 0; iSegIndex < to.tv.oASmEvSeg.length; iSegIndex++)
{
var oEventSeg = to.tv.oASmEvSeg[iSegIndex];
if(parseInt(oEventSeg.eventId) !== parseInt(sId))
oArrTemp.push(oEventSeg);
}
to.tv.oASmEvSeg = [];
to.tv.oASmEvSeg = oArrTemp;
},
_createAndAddEventSegForId: function(sId, bIsAllDay, dStartDateTime, dEndDateTime)
{
var to = this;
var dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dEndDateTime),
dTempStartDate = dArrTempDates[0],
dTempEndDate = dArrTempDates[1],
iNumOfHours = to.__getNumberOfHoursOfEvent(bIsAllDay, dStartDateTime, dEndDateTime),
iNumOfEventElements = to._getNumberOfDaysOfEventForWeek(bIsAllDay, dStartDateTime, dEndDateTime, false, true),
sEventTimeFormat = to.setting.is24Hour ? "HH:mm" : "h[:m]sm",
sStartDateTime = to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true),
sEndDateTime = to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true);
var dTempSDT = new Date(dTempStartDate);
while(!to.__findWhetherDateIsVisibleInCurrentView(dTempSDT, (bIsAllDay || iNumOfHours > 23), dTempStartDate, dTempEndDate))
{
dTempSDT.setDate(dTempSDT.getDate() + 1);
dTempSDT = to.setDateInFormat({"date": dTempSDT}, "START");
}
dTempStartDate = new Date(dTempSDT);
var dThisDate = to.setDateInFormat({"date": dTempStartDate}, "START");
for(var iSegIndex = 0; iSegIndex < iNumOfEventElements; iSegIndex++)
{
var iWkIndex = to.__getDayIndexInView(dThisDate);
var oSegArgs = {};
oSegArgs.iNumEvElem = iNumOfEventElements;
oSegArgs.iId = sId;
oSegArgs.sId = "Event-"+sId;
oSegArgs.dStart = dStartDateTime;
oSegArgs.dEnd = dEndDateTime;
oSegArgs.dStartView = dTempStartDate;
oSegArgs.dEndView = dTempEndDate;
oSegArgs.dThisDate = dThisDate;
oSegArgs.iEventElem = (iSegIndex + 1);
oSegArgs.iWkIndex = iWkIndex;
var oSegProperties = to._createAndAddEventSeg(oSegArgs),
sSegId = "#" + oSegProperties.sId,
sSegTitle = oSegProperties.sElemTitle,
iSegTopPos = oSegProperties.iTopPos,
iSegHeight = oSegProperties.iEventHeight,
iSegLeftPos = to.tv.fADVDayLftPos[iWkIndex];
if(to.tv.oDVEdtgEv !== {} && $.cf.isValid(to.tv.oDVEdtgEv.dEditingDate) && to.compareDates(to.tv.oDVEdtgEv.dEditingDate, dThisDate) === 0)
to.tv.oDVEdtgEv.iElemLeft = iSegLeftPos;
var $oThisSeg = $(to.elem).find(sSegId);
$oThisSeg.css({"top": iSegTopPos, "height": iSegHeight, "left": iSegLeftPos});
$oThisSeg.attr("data-pos", oSegProperties.sName);
$oThisSeg.attr("title", sSegTitle);
var oEventTooltip, sDateTime, sArrDateTime, oThisEvent;
oEventTooltip = {};
sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&");
sArrDateTime = sDateTime.split("&&");
oThisEvent = to.getEventWithId(sId);
oEventTooltip.title = oThisEvent.title || "";
oEventTooltip.startDateTime = sArrDateTime[0];
oEventTooltip.endDateTime = sArrDateTime[1];
$oThisSeg.data("tooltipcontent", oEventTooltip);
if(iSegTopPos < 0)
$oThisSeg.find(".cEventLink").css({"margin-top": Math.abs(iSegTopPos)});
else
$oThisSeg.find(".cEventLink").css({"margin-top": 0});
$oThisSeg.find(".cdvEventTime").html(sStartDateTime + "-" + sEndDateTime);
dThisDate = new Date(dThisDate.getTime() + $.CalenStyle.extra.iMS.d);
}
},
_createAndAddEventSeg: function(oSegArgs)
{
var to = this;
var iId = oSegArgs.iId,
sId = oSegArgs.sId,
dStartDateTime = oSegArgs.dStart,
dEndDateTime = oSegArgs.dEnd,
dThisDate = oSegArgs.dThisDate,
iEventElem = oSegArgs.iEventElem,
iWkIndex = oSegArgs.iWkIndex,
iTimeSlotTableRowHeight = (($(to.elem).find(".cdvTimeSlotTableRow" + ":eq(0)").outerHeight() + $(to.elem).find(".cdvTimeSlotTableRow" + ":eq(1)").outerHeight()) / 2),
iEventUnitHeight = iTimeSlotTableRowHeight / to.setting.unitTimeInterval,
iStartMinutes = 0, iStartHour = 0, iSlotMinutes = 0,
sStartTime = "", iTopPos = 0,
oThisDate = to.getDateInFormat({"date": dThisDate}, "object", false, false),
dStartDateTimeThis, dEndDateTimeThis;
if(to.setting.excludeNonBusinessHours)
{
dStartDateTimeThis = to.setDateInFormat({"iDate": {d: oThisDate.d, M: oThisDate.M, y: oThisDate.y, H: to.tv.oBsHours.startTime[0], m: to.tv.oBsHours.startTime[1], s: 0, ms: 0}}, "");
dEndDateTimeThis = to.setDateInFormat({"iDate": {d: oThisDate.d, M: oThisDate.M, y: oThisDate.y, H: to.tv.oBsHours.endTime[0], m: to.tv.oBsHours.endTime[1], s: 0, ms: 0}}, "");
}
else
{
dStartDateTimeThis = to.setDateInFormat({"iDate": oThisDate}, "START");
dEndDateTimeThis = to.setDateInFormat({"iDate": oThisDate}, "END");
}
var bBeforeDayStart = (to.compareDateTimes(dStartDateTime, dStartDateTimeThis) < 0),
bAfterDayEnd = (to.compareDateTimes(dEndDateTime, dEndDateTimeThis) > 0),
dStartDateTimeEv = bBeforeDayStart ? dStartDateTimeThis : dStartDateTime,
dEndDateTimeEv = bAfterDayEnd ? dEndDateTimeThis : dEndDateTime,
iActualHeight = (((dEndDateTimeEv.getTime() - dStartDateTime.getTime()) / $.CalenStyle.extra.iMS.m) * iEventUnitHeight),
iVisibleHeight = (((dEndDateTimeEv.getTime() - dStartDateTimeEv.getTime()) / $.CalenStyle.extra.iMS.m) * iEventUnitHeight),
iHeight = iVisibleHeight;
iStartHour = dStartDateTimeEv.getHours();
iStartMinutes = dStartDateTimeEv.getMinutes();
iSlotMinutes = Math.floor(iStartMinutes / to.setting.unitTimeInterval) * to.setting.unitTimeInterval;
sStartTime = to.getNumberStringInFormat(iStartHour, 2, false) + to.getNumberStringInFormat(iSlotMinutes, 2, false);
iTopPos = $(to.elem).find(".cdvTimeSlotTableRow"+sStartTime).position().top;
if(bBeforeDayStart)
{
iHeight = iActualHeight;
iTopPos -= (iActualHeight - iVisibleHeight);
}
var sName = sStartTime + "|" + iWkIndex + "|" + iTopPos,
sElemTitle = dStartDateTime + "\n" + dEndDateTime;
sId += "-" + iEventElem;
var oEventSeg = new CalEventSeg((iWkIndex + 1), iId, sElemTitle, sId, dStartDateTimeEv, dEndDateTimeEv, 0, 0);
to.tv.oASmEvSeg.push(oEventSeg);
var oSegProperties = {};
oSegProperties.sElemTitle = sElemTitle;
oSegProperties.sId = sId;
oSegProperties.sName = sName;
oSegProperties.iTopPos = iTopPos;
oSegProperties.iEventHeight = iHeight;
return oSegProperties;
},
_setOpacityOfEventSeg: function(sId, dEndDateTime)
{
var to = this;
var bPassedEvent = (to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0) ? true : false,
bHasClass = $(to.elem).find(".Event-"+sId).hasClass("cBlurredEvent");
if(bPassedEvent && !bHasClass)
$(to.elem).find(".Event-"+sId).addClass("cBlurredEvent");
if(!bPassedEvent && bHasClass)
$(to.elem).find(".Event-"+sId).removeClass("cBlurredEvent");
},
_changeViewPropertiesWhileEditing: function(sWhen, sId)
{
var to = this;
var sSelector;
if($.cf.isValid(to.tv.oDVEdtgEv))
{
if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEvent"))
sSelector = ".Event-"+sId;
else if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEventAllDay"))
sSelector = "#Event-"+sId;
if($.cf.compareStrings(sWhen, "BEFORE"))
{
if(! $(to.elem).find(sSelector).hasClass("cEditingEvent"))
{
if($.cf.compareStrings(to.tv.oDVEdtgEv.type, "cdvEvent"))
$(to.elem).find(sSelector).addClass("cEditingEvent cEditingEventUI");
else
$(to.elem).find(sSelector).addClass("cEditingEvent cEditingEventUI cEditingEventAllDay");
/*
$(to.elem).find(".cEventTooltip").tooltip("close");
The above line gives an error if bootstrap plugin is included in the webpage as it overrides jQuery UI tooltip plugin.
So if you are including Bootstrap it will be better to use bootstrap Tooltip and Popover.
*/
// if bootstrap toolip or popover plugin is applied
//if($(to.elem).find("[data-original-title]").length === 0 && $(to.elem).find(".cEventTooltip").length > 0)
// $(to.elem).find(".cEventTooltip").tooltip("close");
}
}
else if($.cf.compareStrings(sWhen, "AFTER"))
{
$(to.elem).find(sSelector).removeClass("cEditingEvent cEditingEventAllDay cEditingEventUI");
to.tv.iTSEndEditing = $.cf.getTimestamp();
}
}
},
//------------------------------- Event Segment Manipulation End -------------------------------
__updateDetailViewTable: function()
{
var to = this;
var iDateIndex, sDVDaysClass,
sColumnClass = (to.tv.iNoVDayDis === 1) ? "cdvSingleColumn" : "cdvMultiColumn",
iScrollbarWidth = $.CalenStyle.extra.iScrollbarWidth;
to._getTimeSlotsArrayForCurrentView();
if($.cf.compareStrings(to.tv.sLoadType, "Prev"))
to.tv.dLoadDt = to.tv.dAVDt[0];
else if($.cf.compareStrings(to.tv.sLoadType, "Next"))
to.tv.dLoadDt = to.tv.dAVDt[(to.tv.dAVDt.length - 1)];
var sTemplate = "";
//---------------------------------------------------------------------------------------------
sTemplate += "<thead>";
if(!$.cf.compareStrings(to.setting.visibleView, "DayEventDetailView"))
sTemplate += "<tr class='cdvDetailTableRow1 cExceptDayEventDetailView'>";
else
sTemplate += "<tr class='cdvDetailTableRow1 cDayEventDetailView'>";
sTemplate += "<td class='cdvDetailTableColumnTime'>";
sTemplate += "<div class='cdvCellWeekNumberLabel'></div>";
sTemplate += "<div class='cdvCellWeekNumber'></div>";
sTemplate += "</td>";
for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++)
{
var sTempId = "cdvCellDay"+iDateIndex;
sDVDaysClass = sColumnClass;
if(iDateIndex === (to.tv.iNoVDayDis - 1))
sDVDaysClass += " cdvLastColumn";
sTemplate += "<td id='" + sTempId + "' class='cdvTableColumns "+sDVDaysClass+"'>";
if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView"))
sTemplate += "<table class='cTable cdlvDaysTable cdlvDaysTableMain' cellspacing='0'></table>";
else
sTemplate += " ";
sTemplate += "</td>";
}
if(iScrollbarWidth > 0)
sTemplate += "<td class='cdvDetailTableScroll'> </td>";
sTemplate += "</tr>";
sTemplate += "</thead>";
//---------------------------------------------------------------------------------------------
sTemplate += "<tbody>";
sTemplate += "<tr class='cdvDetailTableRow2'>";
sTemplate += "<td class='cdvDetailTableColumnTime'> </td>";
for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++)
{
var sDVDaysId = "cdvAllDayColumn"+iDateIndex;
sDVDaysClass = "";
if(iDateIndex === (to.tv.iNoVDayDis - 1))
sDVDaysClass += " cdvLastColumn";
sTemplate += "<td id='"+sDVDaysId+"' class='cdvAllDayColumns "+sDVDaysClass+"' title='"+to.tv.dAVDt[iDateIndex]+"'> </td>";
}
if(iScrollbarWidth > 0)
sTemplate += "<td class='cdvDetailTableScroll'> </td>";
sTemplate += "</tr>";
//---------------------------------------------------------------------------------------------
sTemplate += "<tr class='cdvDetailTableRow3'>";
sTemplate += "<td class='cdvDetailTableColumnTime'> </td>";
for(iDateIndex = 0; iDateIndex < to.tv.iNoVDayDis; iDateIndex++)
{
sDVDaysClass = "cdvDetailTableColumn"+iDateIndex;
if(iDateIndex === (to.tv.iNoVDayDis - 1))
sDVDaysClass += " cdvLastColumn";
sTemplate += "<td class='cdvTableColumns "+sDVDaysClass+"'> </td>";
}
if(iScrollbarWidth > 0)
sTemplate += "<td class='cdvDetailTableScroll'> </td>";
sTemplate += "</tr>";
sTemplate += "</tbody>";
//---------------------------------------------------------------------------------------------
$(to.elem).find(".cdvDetailTableMain").html(sTemplate);
//----------------------------------------------------------------------------------------------
sTemplate = "";
sTemplate += "<span class='cdvCellHeaderAllDay'><span>"+to.setting.miscStrings.allDay+"</span></span>";
$(to.elem).find(".cdvContRow2Main").html(sTemplate);
//------------------------------------------------------------------------------
if($.cf.compareStrings(to.setting.visibleView, "DayEventDetailView"))
to.__updateDayListViewTable(false, true);
else
to._setDateStringsInDetailView();
//------------------------------------------------------------------------------
to._addTimeSlotTable();
//------------------------------------------------------------------------------
sTemplate = "";
sTemplate += "<div class='cdvContRow3Events'></div>";
$(to.elem).find(".cdvContRow3Main").append(sTemplate);
//------------------------------------------------------------------------------
to._takeActionOnTimeSlotTableClick();
},
__addEventsInDetailView: function(sEventTypeToAdd)
{
var to = this;
if(($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both")) && $(to.elem).find(".cdvContRow2Main").length > 0)
$(to.elem).find(".cdvContRow2Main .cdvEventAllDay").remove();
if(($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both")) && $(to.elem).find(".cdvContRow3Events").length > 0)
$(to.elem).find(".cdvContRow3Events").html("");
var oArrTempEvents = to.getArrayOfEventsForView(to.tv.dVDSDt, to.tv.dVDEDt),
bHideEventIcon = $.cf.isValid(to.setting.hideEventIcon[to.setting.visibleView]) ? to.setting.hideEventIcon[to.setting.visibleView] : $.cf.isValid(to.setting.hideEventIcon.Default) ? to.setting.hideEventIcon.Default : false,
bHideEventTime = $.cf.isValid(to.setting.hideEventTime[to.setting.visibleView]) ? to.setting.hideEventTime[to.setting.visibleView] : $.cf.isValid(to.setting.hideEventTime.Default) ? to.setting.hideEventTime.Default : false,
sEventTimeFormat = to.setting.is24Hour ? "HH:mm" : "h[:m]sm";
if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
to.tv.oASmEvSeg = [];
if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
to.tv.oAADEvSeg = [];
if(oArrTempEvents.length > 0)
{
var oArrTempTopPos = [];
for(var iEventIndex = 0; iEventIndex < oArrTempEvents.length; iEventIndex++)
{
var oEvent = oArrTempEvents[iEventIndex],
dStartDateTime = null, dEndDateTime = null,
bIsAllDay = 0,
sTitle = "", sDesc = "", sType = "", sURL = "",
sDroppableId = "", bIsMarked = false;
if(oEvent.start !== null)
dStartDateTime = oEvent.start;
if(oEvent.end !== null)
dEndDateTime = oEvent.end;
if(oEvent.isAllDay !== null)
bIsAllDay = oEvent.isAllDay;
if(oEvent.title !== null)
sTitle = oEvent.title;
if(oEvent.desc !== null)
sDesc = oEvent.desc;
if(oEvent.type !== null)
sType = oEvent.type;
if(oEvent.url !== null)
sURL = oEvent.url;
if(oEvent.droppableId !== null)
sDroppableId = oEvent.droppableId;
if(oEvent.isMarked !== null)
bIsMarked = oEvent.isMarked;
if(bIsMarked)
bIsAllDay = true;
var dArrTempDates = to.__getStartAndEndDatesOfEventForView(bIsAllDay, dStartDateTime, dEndDateTime),
dTempStartDate = dArrTempDates[0],
dTempEndDate = dArrTempDates[1],
iNumOfDaysOfEvent = to.getNumberOfDaysOfEvent(bIsAllDay, dStartDateTime, dEndDateTime, false, false, true),
iNumOfEventElements = to._getNumberOfDaysOfEventForWeek(bIsAllDay, dStartDateTime, dEndDateTime, false, true),
iTotalNumberOfHours = to.__getNumberOfHoursOfEvent(bIsAllDay, dStartDateTime, dEndDateTime);
var sId;
if(iNumOfEventElements > 0)
{
var dTempSDT = new Date(dTempStartDate);
while(!to.__findWhetherDateIsVisibleInCurrentView(dTempSDT, (bIsAllDay || iTotalNumberOfHours > 23), dTempStartDate, dTempEndDate))
{
dTempSDT.setDate(dTempSDT.getDate() + 1);
dTempSDT = to.setDateInFormat({"date": dTempSDT}, "START");
}
dTempStartDate = new Date(dTempSDT);
var dThisDate = to.setDateInFormat({"date": dTempStartDate}, "START"),
iThisDate = dThisDate.getTime();
//-------------------------------------------------------------------------------------------
var sEventColor = oEvent.backgroundColor;
sEventColor = ($.cf.compareStrings(sEventColor, "") || $.cf.compareStrings(sEventColor, "transparent")) ? "transparent" : sEventColor;
var sEventBorderColor = oEvent.borderColor || $.cf.addHashToHexcode(to.setting.borderColor);
sEventBorderColor = ($.cf.compareStrings(sEventBorderColor, "") || $.cf.compareStrings(sEventBorderColor, "transparent")) ? "transparent" : sEventBorderColor;
var sEventTextColor = oEvent.textColor || $.cf.addHashToHexcode(to.setting.textColor);
sEventTextColor = ($.cf.compareStrings(sEventTextColor, "") || $.cf.compareStrings(sEventTextColor, "transparent")) ? $.cf.addHashToHexcode(to.setting.textColor) : sEventTextColor;
var sStyle = "", sIcon = "", sEventIconStyle = "", sEventIconDotStyle = "", sPartialEventStyle = "", sLinkStyle ="";
if(bIsMarked)
{
if(oEvent.fromSingleColor)
{
sStyle += "background: " + sEventColor + "; ";
sStyle += "border-color: " + sEventBorderColor + "; ";
sStyle += "color: " + sEventTextColor + "; ";
sLinkStyle = "color: " + sEventTextColor + "; ";
sEventIconStyle = "background: " + sEventTextColor + "; color: #FFFFFF";
sEventIconDotStyle = "background: " + sEventTextColor + "; ";
}
else
{
sEventBorderColor = sEventColor;
sStyle += "background: " + $.cf.getRGBAString(sEventColor, 0.1) + "; ";
sStyle += "border-color: " + sEventBorderColor + "; ";
sStyle += "color: " + sEventColor + "; ";
sLinkStyle = "color: " + sEventColor + "; ";
sEventIconStyle = "background: " + sEventColor + "; color: " + sEventTextColor;
sEventIconDotStyle = "background: " + sEventColor + "; ";
}
}
else
{
sStyle += "background: " + sEventColor + "; ";
sStyle += "border-color: " + sEventBorderColor + "; ";
sStyle += "color: " + sEventTextColor + "; ";
sLinkStyle = "color: " + sEventTextColor + "; ";
sEventIconStyle = "color: " + sEventTextColor + "; ";
sEventIconDotStyle = "background: " + sEventTextColor + "; ";
sPartialEventStyle = "border-color: " + (oEvent.fromSingleColor ? sEventTextColor : "#000000");
}
if(sEventBorderColor === "transparent")
sStyle += "border-width: 0px; ";
if(bIsMarked)
sIcon = ($.cf.isValid(oEvent.icon) && oEvent.icon !== "Dot") ? oEvent.icon : "cs-icon-Mark";
else
sIcon = $.cf.isValid(oEvent.icon) ? oEvent.icon : to.setting.eventIcon;
var iWkIndex = to.__getDayIndexInView(dThisDate),
iLeftPos = to.tv.fADVDayLftPos[iWkIndex],
iTopPos = 0,
iEventHeight = 0,
sEventClass, sDateTime, oEventTooltip, sTemplate, sIdElem, $oSeg, $oSegContent,
sDataDroppableId,
sArrDateTime;
//-------------------------------------------------------------------------------------------
if(bIsAllDay === 1 || bIsAllDay === true || (iTotalNumberOfHours > 23))
{
if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
{
sId = "Event-"+oEvent.calEventId;
var bElementExists = $(to.elem).find("#"+sId).length > 0,
bElementHasStartDate = false;
if(bElementExists)
{
var dElemStartDate = new Date($(to.elem).find("#"+sId).data("startdate"));
bElementHasStartDate = to.compareDates(dElemStartDate, dTempStartDate) !== 0;
}
if((bElementExists && bElementHasStartDate) || !bElementExists)
{
var iWidthUnits = iNumOfEventElements,
bCompStartDates = to.compareDates(dStartDateTime, dTempStartDate),
bVSDCompESD = to.compareDates(to.tv.dVDSDt, dStartDateTime),
bVEDCompESD = to.compareDates(to.tv.dVDEDt, dStartDateTime),
isFirstSegment = (bVSDCompESD <= 0) && (bVEDCompESD >= 0),
bVSDCompEED = to.compareDates(to.tv.dVDSDt, dEndDateTime),
bVEDCompEED = to.compareDates(to.tv.dVDEDt, dEndDateTime),
isLastSegment = (bVSDCompEED <= 0) && (bVEDCompEED >= 0),
bCompEndDates = to.compareDates(dEndDateTime, dTempEndDate),
iNewTopIndex = 0,
oArrTemp;
if(oArrTempTopPos.length === 0)
{
iNewTopIndex = 1;
oArrTemp = [];
oArrTemp.push([dTempStartDate, dTempEndDate]);
oArrTempTopPos.push([iNewTopIndex, oArrTemp]);
}
else
{
var iMaxTopIndex = 0;
for(var iTempIndex = 0; iTempIndex < oArrTempTopPos.length; iTempIndex++)
{
oArrTemp = oArrTempTopPos[iTempIndex];
var iArrTempTopIndex = oArrTemp[0];
if(iArrTempTopIndex > iMaxTopIndex)
iMaxTopIndex = iArrTempTopIndex;
var oArrTempDates = oArrTemp[1];
var bSpaceAvailableForSegment = false;
for(var iInnerIndex = 0; iInnerIndex < oArrTempDates.length; iInnerIndex++)
{
var oArrTempSEDates = oArrTempDates[iInnerIndex];
if(to.compareDates(dTempStartDate, oArrTempSEDates[1]) <= 0)
{
bSpaceAvailableForSegment = false;
break;
}
else
bSpaceAvailableForSegment = true;
}
if(bSpaceAvailableForSegment)
{
iNewTopIndex = iArrTempTopIndex;
oArrTempDates.push([dTempStartDate, dTempEndDate]);
break;
}
}
if(iNewTopIndex === 0)
{
iNewTopIndex = iMaxTopIndex + 1;
oArrTemp = [];
oArrTemp.push([dTempStartDate, dTempEndDate]);
oArrTempTopPos.push([iNewTopIndex, oArrTemp]);
}
}
to.tv.oAADEvSeg.push([sId, iWidthUnits, iWkIndex, iNewTopIndex]);
sEventClass = "cdvEventAllDay ";
if(to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0)
sEventClass += "cBlurredEvent" +" ";
if(to.setting.isTooltipInDetailView)
sEventClass += " cEventTooltip";
if(bIsMarked)
sEventClass += " cMarkedDayEvent";
sDataDroppableId = $.cf.isValid(sDroppableId) ? "data-droppableid='" + sDroppableId + "'" : "";
sTemplate = "<span id='" + sId + "' class='" + sEventClass + "' style='" + sStyle + "' data-startdate='" + dTempStartDate + "' " + sDataDroppableId + " title='' data-id='" + oEvent.calEventId + "'>";
sTemplate += "<a class='cEventLink' style='" + sLinkStyle + "'>";
if(bIsMarked)
{
sTemplate += "<span class='cdvEventTitle'>" + sTitle + "</span>";
//if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot"))
sTemplate += "<span class='cdvEventIcon "+sIcon+"' style='" + sEventIconStyle + "'></span>";
if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status))
sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>";
}
else
{
if(bCompStartDates !== 0)
sTemplate += "<span class='cPartialEvent cPartialEventLeft' style='" + sPartialEventStyle + "'></span>";
if(!bHideEventTime && !bIsAllDay && (iNumOfDaysOfEvent > 1 && isFirstSegment))
sTemplate += "<span class='cdvEventTimeLeft'>" + to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + "</span>";
if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot"))
sTemplate += "<span class='cdvEventIcon " +sIcon+"' style='"+sEventIconStyle+"'></span>";
if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status))
sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>";
sTemplate += "<span class='" + "cdvEventTitle" + "'>" + sTitle + "</span>";
if(!bHideEventTime && !bIsAllDay && (iNumOfDaysOfEvent > 1 && isLastSegment))
sTemplate += "<span class='cdvEventTimeRight'>" + to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + "</span>";
if(bCompEndDates !== 0)
sTemplate += "<span class='cPartialEvent cPartialEventRight' style='" + sPartialEventStyle + "'></span>";
}
sTemplate += "</a>";
sTemplate += "</span>";
$(to.elem).find(".cdvContRow2Main").append(sTemplate);
sIdElem = "#"+sId;
$oSeg = $(to.elem).find(sIdElem);
$oSegContent = $oSeg.find(".cEventLink");
oEventTooltip = {};
sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&");
sArrDateTime = sDateTime.split("&&");
oEventTooltip.title = sTitle;
oEventTooltip.startDateTime = sArrDateTime[0];
oEventTooltip.endDateTime = sArrDateTime[1];
$oSeg.data("tooltipcontent", oEventTooltip);
if(to.setting.eventRendered)
to.setting.eventRendered.call(to, oEvent, $oSeg, $oSegContent, to.setting.visibleView, false);
if($.cf.isValid(sURL) || to.setting.eventClicked)
{
$oSegContent.on($.CalenStyle.extra.sClickHandler, {"url": sURL, "eventId": oEvent.calEventId, "eventElemSelector": sIdElem, "eventType": "AllDay", "view": "DetailView", "pluginId": to.tv.pluginId}, to.__bindClick);
}
}
}
}
else
{
if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
{
var sClass = "Event-"+oEvent.calEventId;
if($(to.elem).find("."+sClass).length === 0)
{
for(var iEventElem = 1; iEventElem <= iNumOfEventElements; iEventElem++)
{
sId = sClass;
iWkIndex = to.__getDayIndexInView(dThisDate);
iLeftPos = to.tv.fADVDayLftPos[iWkIndex];
sEventClass = "cdvEvent ";
if(to.compareDates(dEndDateTime, $.CalenStyle.extra.dToday) < 0)
sEventClass += "cBlurredEvent ";
sEventClass += sId;
if(to.setting.isTooltipInDetailView)
sEventClass += " cEventTooltip";
var oSegArgs = {};
oSegArgs.iNumEvElem = iNumOfEventElements;
oSegArgs.iId = oEvent.calEventId;
oSegArgs.sId = sId;
oSegArgs.dStart = dStartDateTime;
oSegArgs.dEnd = dEndDateTime;
oSegArgs.dStartView = dTempStartDate;
oSegArgs.dEndView = dTempEndDate;
oSegArgs.dThisDate = dThisDate;
oSegArgs.iEventElem = iEventElem;
oSegArgs.iWkIndex = iWkIndex;
var oSegProperties = to._createAndAddEventSeg(oSegArgs);
var sName = oSegProperties.sName;
sId = oSegProperties.sId;
iTopPos = oSegProperties.iTopPos;
iEventHeight = oSegProperties.iEventHeight;
var sEventTime = to.getDateInFormat({"date": dStartDateTime}, sEventTimeFormat, to.setting.is24Hour, true) + " - " + to.getDateInFormat({"date": dEndDateTime}, sEventTimeFormat, to.setting.is24Hour, true);
sStyle += "left: " + 0 + "px; top: " + 0 + "px; height: " + parseInt(iEventHeight) + "px; width: " + 10 + "px;";
sTemplate = "";
sDataDroppableId = $.cf.isValid(sDroppableId) ? "data-droppableid='" + sDroppableId + "'" : "";
sTemplate += "<span id='" + sId + "' class='" + sEventClass + "' style='" + sStyle + "' data-pos='" + sName + "' " + sDataDroppableId + " title='' data-id='" + oEvent.calEventId + "'>";
sTemplate += "<a class='cEventLink' style='color: " + sEventTextColor+ ";'>";
if(!bHideEventIcon && !$.cf.compareStrings(sIcon, "Dot"))
sTemplate += "<span class='cdvEventIcon "+sIcon+"' style='"+sEventIconStyle +"' align='left'></span>";
sTemplate += "<div class='cdvEventDetails'>";
if($.cf.compareStrings(to.setting.visibleView, "DayEventListView") && $.cf.isValid(oEvent.status))
sTemplate += "<span class='cdvEventStatus' style='border-color: " + oEvent.statusColor + ";'></span>";
sTemplate += "<div class='cdvEventTitle'>" + sTitle + "</div>";
if(!bHideEventTime)
sTemplate += "<div class='cdvEventTime'>" + sEventTime + "</div>";
sTemplate += "</div>";
sTemplate += "</a>";
sTemplate += "</span>";
$(to.elem).find(".cdvContRow3Main .cdvContRow3Events").append(sTemplate);
sIdElem = "#"+sId;
$oSeg = $(to.elem).find(sIdElem);
$oSegContent = $oSeg.find(".cEventLink");
oEventTooltip = {};
sDateTime = to.getEventDateTimeString(dStartDateTime, dEndDateTime, bIsAllDay, "&&");
sArrDateTime = sDateTime.split("&&");
oEventTooltip.title = sTitle;
oEventTooltip.startDateTime = sArrDateTime[0];
oEventTooltip.endDateTime = sArrDateTime[1];
$oSeg.data("tooltipcontent", oEventTooltip);
iThisDate = iThisDate + $.CalenStyle.extra.iMS.d;
dThisDate.setTime(iThisDate);
if(to.setting.eventRendered)
to.setting.eventRendered.call(to, oEvent, $oSeg, $oSegContent, to.setting.visibleView, false);
if($.cf.isValid(sURL) || to.setting.eventClicked)
{
$oSegContent.on($.CalenStyle.extra.sClickHandler, {"url": sURL, "eventId": oEvent.calEventId, "eventElemSelector": sIdElem, "eventType": "Small", "view": "DetailView", "pluginId": to.tv.pluginId}, to.__bindClick);
}
}
}
}
}
}
}
to.tv.dDrgSDt = null;
to.tv.dDrgEDt = null;
if($.cf.compareStrings(sEventTypeToAdd, "AllDay") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
to._makeEventEditableInDetailView(".cdvEventAllDay");
if($.cf.compareStrings(sEventTypeToAdd, "Small") || $.cf.compareStrings(sEventTypeToAdd, "Both"))
{
to._setPropertiesOfEventSeg();
to._makeEventEditableInDetailView(".cdvEvent");
}
if(to.setting.isTooltipInDetailView)
to._addTooltipInDetailView();
if(to.setting.eventsAddedInView)
to.setting.eventsAddedInView.call(to, to.setting.visibleView, ".cdvEvent, .cdvEventAllDay");
}
else
console.log("to.__addEventsInDetailView - No Events");
to.addRemoveViewLoader(false, "cEventLoaderBg");
to.addRemoveLoaderIndicators(false, "cEventLoaderIndicator");
},
_takeActionOnTimeSlotTableClick: function()
{
var to = this;
$(to.elem).find(".calendarCont").on($.CalenStyle.extra.sClickHandler, function(e)
{
if(!$(to.elem).find(".cdvEvent").hasClass("cEditingEvent") && to.setting.cellClicked)
{
var pClickedAt = {};
pClickedAt.x = e.pageX || e.originalEvent.touches[0].pageX || e.originalEvent.changedTouches[0].pageX;
pClickedAt.y = e.pageY || e.originalEvent.touches[0].pageY || e.originalEvent.changedTouches[0].pageY;
var oArrElemsAtPt = to.__getElementsAtPoint(pClickedAt.x, pClickedAt.y);
var dSelectedDateTime, iHours = 0, iMinutes = 0;
var bElemAllDay, bElemSlot, bElemColumn;
for(var iTempIndex = 0; iTempIndex < oArrElemsAtPt.length; iTempIndex++)
{
var $oTempElem = $(oArrElemsAtPt[iTempIndex]),
bCDVAllDayColumns = $oTempElem.hasClass("cdvAllDayColumns"),
bCDVTableColumns =