if ( window.dateformat == null ) window.dateformat = "MM/DD/YYYY"; function getTargetFieldJScript_inline(form, targetstring, bInExtremeList) { var targets = targetstring.split(":"); var fld = null; if (bInExtremeList) fld = getExtremeCalendarField(); else if (targets.length == 1) { if ((form == null)||(form == '')) form = '0'; fld = document.forms[form].elements[targets[0]]; if( !fld ) fld = document.getElementById(targets[0]); } else { var formobj = document.forms[targets[0]+"_form"]; if (formobj == null) formobj = document.forms[targets[0]]; if (formobj != null) fld = formobj.elements[targets[1]]; if( fld == null ) fld = document.getElementById(targets[1]); } return fld; } function pickdate_inline(s) { hideCalendarDIV(); var datearray = s.split('/'); var caldiv = NLCalender_getCalendarDIV(true); var fld = caldiv.datefield; var d = new Date(datearray[2],(datearray[0]-1),datearray[1]); if (fld.datefldtype == 'mmyydate') { fld.value = getmmyydatestring(d, NLDate_short_months) } else { fld.value = getdatestring(d); } // Extreme List fields do not have their event handlers defined since it is handled internally if (fld.onchange != null) fld.onchange(); if (isFocusable(fld)) fld.focus(); } function pickdate(s) { var datearray = s.split('/'); var div = NLCalender_getCalendarDIV(); div.selecteddate = new Date(datearray[2],(datearray[0]-1),datearray[1]); SetView('day'); } function pickdateinweek(s) { var datearray = s.split('/'); var div = NLCalender_getCalendarDIV(); div.selecteddate = new Date(datearray[2],(datearray[0]-1),datearray[1]); SetView('week'); } function pickmonth(s) { var datearray = s.split('/'); var div = NLCalender_getCalendarDIV(); div.selecteddate = new Date(datearray[2],(datearray[0]-1),datearray[1]); SetView('month'); } function getNow() { return new Date(); } function getCalendarDetailPortletId() { if ( window.calendarDetailPortletId != null ) return window.calendarDetailPortletId; return 'nl_calendar'; } function getCalendarDetailQueryId() { if ( window.calendarDetailQueryId != null ) return window.calendarDetailQueryId; return 'nl_calendar'; } function refreshEventBasedPortlets() { if ( window.calendarDetailPortletId ) { changeday(0); } if ( window.eventPortletQueryId ) { refreshPortlet(window.eventPortletQueryId,'EVENTS',false,'-29'); } } function goView(s, view, cal) { if ( !isDetailCalSync() ) return; if ( window.isOLC ) { var date = new Date( s ); buildDetailCalendar( date, view ); } else { var url = window.calendarBaseUrl; if ( url != null ) { url = addParamToURL(url,'qelem',getCalendarDetailQueryId()); url = addParamToURL(url,'_viewFilter',view); url = addParamToURL(url,'date',s); if ( !cal && document.getElementById('ccal_current') != null ) cal = document.getElementById('ccal_current').getAttribute('calendar'); if ( cal ) url = addParamToURL(url,'ccal',cal); setPortletToUpdating(getCalendarDetailPortletId()); url = addStickyTagToUrl(url, 'EVENTS'); if ( isIE ) document.frames[getCalendarDetailQueryId() + '_frame'].document.location.replace( url ); else document.getElementById(getCalendarDetailQueryId() + '_frame').src = url; } } } function goWeek(s) { goView(s,'week'); } function goMonth(s) { goView(s,'month'); } function goDay(s) { goView(s,'day'); } function getCalendar() { var returnMe = null; if ( document.getElementById('ccal') != null ) returnMe = getSelectValue(document.getElementById('ccal')); else if ( document.getElementById('ccal_fs') != null ) returnMe = getSelectValue(document.getElementById('ccal_fs')); return returnMe } function editEvent(id,sdate,instance,a) { if ( window.isOLC ) navigateToRecord('edit','event', id, new Array("startdate",sdate)); else if ( window.eventUrl != null ) a.href = addNextParamPrefixToURL( window.eventUrl ) + 'id='+id+ (isValEmpty(sdate) ? '' : '&date='+escape(sdate)) +(getCalendar() != null ? '&ccal='+getCalendar() : '') + '&e=T'+ (instance ? '&_instance=T' : ''); } function viewEvent(id,sdate,a) { if ( window.isOLC ) navigateToRecord('view','event', id, new Array("startdate",sdate)); else if ( window.eventUrl != null ) a.href = addNextParamPrefixToURL( window.eventUrl ) + 'id='+id+ (isValEmpty(sdate) ? '' : '&date='+escape(sdate)) +(getCalendar() != null ? '&ccal='+getCalendar() : ''); } function editCall(id,sdate,instance,a) { if ( window.isOLC ) navigateToRecord('edit','call', id); else a.href = addNextParamPrefixToURL( '/app/crm/calendar/call.nl' ) + 'id='+id+'&e=T'; } function viewCall(id,sdate,a) { if ( window.isOLC ) navigateToRecord('view','call', id); else a.href = addNextParamPrefixToURL( '/app/crm/calendar/call.nl' ) + 'id='+id; } function editTask(id,sdate,instance,a) { if ( window.isOLC ) navigateToRecord('edit','task', id); else a.href = addNextParamPrefixToURL( '/app/crm/calendar/task.nl' ) + 'id='+id+'&e=T'; } function viewTask(id,sdate,a) { if ( window.isOLC ) navigateToRecord('view','task', id); else a.href = addNextParamPrefixToURL( '/app/crm/calendar/task.nl' ) + 'id='+id; } function addCalendarWhenceToURL(url,sdate,viewFilter) { return addParamToURL(url, 'whence', escape('/app/crm/calendar/calendar.nl?ccal=' + getCalendar() + '&date=' + sdate + (viewFilter ? ('&_viewFilter=' + viewFilter) : ''))); } function newEvent(sdate,stime,a,bWhenceToCalendar,viewFilter) { if ( window.isOLC ) { var starttime = isValEmpty( stime ) ? '' : hhmmtotimestring( stime ); var endtime = isValEmpty( starttime ) ? '' : gettimestring( addhours( stringtotime( sdate, starttime ), 1 ) ); navigateToRecord('new','event', null, new Array("startdate",sdate, "starttime", starttime, "endtime", endtime)); } else if ( window.eventUrl != null ) { var url = addNextParamPrefixToURL( window.eventUrl ) + 'date='+escape(sdate)+ (isValEmpty(stime) ? '' : '&time='+stime) + (getCalendar() != null ? '&ccal='+getCalendar() : ''); if (bWhenceToCalendar) url = addCalendarWhenceToURL(url,sdate,viewFilter); eval( a ? 'a.href = url' : 'document.location = url'); } } function newCall(sdate,stime,a,bWhenceToCalendar) { if ( window.isOLC ) { var starttime = isValEmpty( stime ) ? '' : hhmmtotimestring( stime ); var endtime = isValEmpty( starttime ) ? '' : gettimestring( addhours( stringtotime( sdate, starttime ), 1 ) ); navigateToRecord('new','call', null, new Array("startdate",sdate, "starttime", starttime, "endtime", endtime)); } else { var url = addNextParamPrefixToURL( '/app/crm/calendar/call.nl' ) + 'date='+escape(sdate)+ (isValEmpty(stime) ? '' : '&time='+stime); if (bWhenceToCalendar) url = addCalendarWhenceToURL(url,sdate); eval( a ? 'a.href = url' : 'document.location = url'); } } function newTask(sdate,stime,a,bWhenceToCalendar) { if ( window.isOLC ) { var starttime = isValEmpty( stime ) ? '' : hhmmtotimestring( stime ); var endtime = isValEmpty( starttime ) ? '' : gettimestring( addhours( stringtotime( sdate, starttime ), 1 ) ); navigateToRecord('new','task', null, new Array("startdate",sdate, "starttime", starttime, "endtime", endtime)); } else { var url = addNextParamPrefixToURL( '/app/crm/calendar/task.nl' ) + 'date='+escape(sdate)+ (isValEmpty(stime) ? '' : '&time='+stime); if (bWhenceToCalendar) url = addCalendarWhenceToURL(url,sdate); eval( a ? 'a.href = url' : 'document.location = url'); } } function changemonth( delta, bInline) { var div = NLCalender_getCalendarDIV( bInline ); if(bInline) { div.view = 'day'; } else { if ( div.view == null ) div.view = 'month'; } if (div.currdate == null) div.currdate = getNow(); var tempdate = new Date(div.currdate.getFullYear(),div.currdate.getMonth(),div.currdate.getDate()); addmonths(tempdate, delta); var tempstring = (tempdate.getMonth()+1)+'/'+tempdate.getDate()+'/'+tempdate.getFullYear(); div.selecteddate = tempdate; WriteCalendar(tempdate, bInline); if (!bInline) goView(tempstring, getView(bInline)); } function prevmonth(bInline) { changemonth(-1, bInline); } function nextmonth(bInline) { changemonth(1, bInline); } function changeweek( delta ) { var div = NLCalender_getCalendarDIV(); if ( div.view == null ) div.view = 'week'; if (div.currdate == null) div.currdate = getNow(); var tempdate = new Date(div.currdate.getFullYear(),div.currdate.getMonth(),div.currdate.getDate()); adddays(tempdate,delta); var tempstring = (tempdate.getMonth()+1)+'/'+tempdate.getDate()+'/'+tempdate.getFullYear(); div.selecteddate = tempdate; WriteCalendar(tempdate); goView(tempstring, getView()); } function prevweek() { changeweek( -7 ); } function nextweek() { changeweek( 7 ); } function changeday( delta ) { var div = NLCalender_getCalendarDIV(); if ( div.view == null ) div.view = 'day'; if (div.currdate == null) div.currdate = getNow(); var tempdate = new Date(div.currdate.getFullYear(),div.currdate.getMonth(),div.currdate.getDate()); adddays(tempdate,delta); var tempstring = (tempdate.getMonth()+1)+'/'+tempdate.getDate()+'/'+tempdate.getFullYear(); div.selecteddate = tempdate; WriteCalendar(tempdate); goView(tempstring, getView()); } function prevday() { changeday(-1); } function nextday() { changeday(1); } function gotoToday() { document.location = "/app/crm/calendar/calendar.nl?date="+ getTodayShortDate(); } function getLongDate(date, useTruncatedNames) { var dayVar = useTruncatedNames ? NLDate_short_days[date.getDay(date)] + ' ' : ''; var dateformat = "Month DD, YYYY"; if(useTruncatedNames) dateformat = dateformat.replace(/month/i, "Mon"); return dayVar + getdatestring(date, dateformat); } function getTodayLongDate() { return getLongDate( getNow() ) } function getTodayShortDate() { var tempdate = getNow(); return tempdate.getMonth()+1 +"/" + tempdate.getDate() + "/" + tempdate.getFullYear(); } function getView(bInline) { if(bInline) { return 'day'; } else { var div = NLCalender_getCalendarDIV( bInline); var view = div.view; return (view != null ? view : 'day'); } } function SetView(view, init) { var div = NLCalender_getCalendarDIV(); var tempdate = (div.selecteddate != null ? div.selecteddate : getNow()); var datestring = (tempdate.getMonth()+1)+'/'+tempdate.getDate()+'/'+tempdate.getFullYear(); if ( !init ) { if (view == 'week') goWeek(datestring); else if (view == 'month') goMonth(datestring); else goDay(datestring); } div.view = view; WriteCalendar(tempdate); } function markToday(today,date) { if (today == date) return ""+date+"" ; else return date; } function isDetailCalSync() { return document.getElementById(getCalendarDetailPortletId()) != null; } function isDetailOrDeferredCalSync() { return isDetailCalSync() || window.calendarDetailDeferredLoad == true; } function isPopupCal() { return false; } function getCalendarHTMLHeader( bIsInline, date ) { var sTitleClass = "portletlabel"; if(bIsInline) { sTitleClass = "smalltextb"; return "
  "+getdatestring(date, 'Month YYYY')+"  
"; } else { bIsInline = ""; return "
  "+getdatestring(date, 'Month YYYY')+"  
"; } } var NLDate_days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); var NLDate_short_days = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); if ( false ) { var id = 0; for(id=1-1;id<= 7-1;id++) { NLDate_short_days[id] = NLDate_short_days[id].substr(2,1); } } function WriteCalendar( d, bIsInline) { var calendarDiv = NLCalender_getCalendarDIV(bIsInline); if ( !bIsInline && document.getElementById('calendarDetailPortletId') != null && window.calendarDetailPortletId != null ) { document.getElementById('calendarDetailPortletId').id = window.calendarDetailPortletId; } calendarDiv.currdate = d; var months = new Array("January","February","March", "April","May","June","July", "August","September","October","November","December"); var curmonth=d.getMonth()+1; var curyear = d.getFullYear(); var d0 = new Date(curyear,curmonth-1,1); var firstdofw = getFirstDayOfWeekOffSet( d0 ); d0.setDate(0); var lastmonthday = d0.getDate() - firstdofw+1; d0 = new Date(curyear,curmonth-1,1); if (d0.getMonth() == 11) { d0.setMonth(0); d0.setFullYear(d0.getFullYear()+1); } else d0.setMonth(d0.getMonth()+1); d0.setDate(0); var lastday = d0.getDate(); var week; var dofw; var day; var nextmonthday = 1; var now = getNow(); var today; if (now.getFullYear() == d.getFullYear() && now.getMonth() == d.getMonth()) today = now.getDate(); else today = 0; if (calendarDiv.selecteddate == null) calendarDiv.selecteddate = getNow(); var tabletext = "
\n"; tabletext += " \n"; tabletext += " \n"; tabletext += bIsInline ? "" : "
"; tabletext += getCalendarHTMLHeader(bIsInline, d); tabletext += ""; if(!bIsInline) { var todayhref = !isDetailOrDeferredCalSync() && !isPopupCal() ? "javascript:gotoToday()" : "javascript:pickdate(getTodayShortDate())"; tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; } tabletext += " \n"; tabletext += " \n"; if ( !bIsInline && isDetailOrDeferredCalSync() ) { tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; tabletext += " \n"; style = view == 'day' ? 'bglttext' : 'text'; tabletext += "\n"; style = view == 'week' ? 'bglttext' : 'text'; tabletext += "\n"; style = view == 'month' ? 'bglttext' : 'text'; tabletext += "\n"; tabletext += " \n"; } tabletext += "
"+'Today'+": \n"; tabletext += " "+getTodayLongDate()+"
\n"; tabletext += "\n"; var view = getView(bIsInline); if ( view == 'month' ) { tabletext += " \n"; var i = 0, style; for (i=1; i<=12; i++) { style = (i == calendarDiv.selecteddate.getMonth()+1) ? 'smalltextlt nowrap' : 'smalltext'; tabletext += " \n"; if (i%3==0) tabletext += "\n"; } } else { tabletext += " \n"; var monToFri = "\n\n\n\n\n\n"; var sunday = "\n\n"; var saturday = "\n\n"; if (0 == 0) tabletext += sunday + monToFri + saturday; else if (0 == +1) tabletext += monToFri + saturday + sunday; else if (0 == -1) tabletext += saturday + sunday + monToFri; tabletext += "\n\n"; var dayofthemonth = calendarDiv.selecteddate.getDate(); var sMouseOver = "onMouseOver=\"this.className='bglttext'\" onMouseOut=\"this.className='textnolink'\""; var startOfSelectedWeekOffset = (calendarDiv.selecteddate.getDay() - 0 + 7) % 7; var sundaybeforeselectedday = dayofthemonth - startOfSelectedWeekOffset; var satafterselectedday = sundaybeforeselectedday + 6; for (week=1,dofw=1,day=1;day<=lastday || dofw <= 7;) { if (dofw == 1) tabletext += "\n"; if (week==1 && dofw < firstdofw + 1) { var sPrevDate = (curmonth>1 ? curmonth-1 : 12) +"/"+lastmonthday+"/"+(curmonth>1 ? curyear : curyear-1); var lastmonthdayhref = !isDetailOrDeferredCalSync() && !isPopupCal() ? "/app/crm/calendar/calendar.nl?date=" + sPrevDate: "javascript:"+(view == 'week' ? 'pickdateinweek' : 'pickdate')+"(\""+ sPrevDate +"\");"; var clickhandle = ""; if(bIsInline) { lastmonthdayhref = "#"; clickhandle = "onclick='pickdate_inline(\"" + sPrevDate + "\");'"; } tabletext += ""; lastmonthday++; dofw++; } else if (day > lastday) { var sNextDate = (curmonth<12 ? curmonth+1 : 1) +"/"+nextmonthday+"/"+(curmonth<12 ? curyear : curyear+1); var nextmonthdayhref = !isDetailOrDeferredCalSync() && !isPopupCal() ? "/app/crm/calendar/calendar.nl?date=" + sNextDate : "javascript:"+(view == 'week' ? 'pickdateinweek' : 'pickdate')+"(\"" + sNextDate +"\");"; var clickhandle = ""; if(bIsInline) { nextmonthdayhref = "#"; clickhandle = "onclick='pickdate_inline(\"" + sNextDate + "\");'"; } tabletext += ""; nextmonthday++; dofw++; } else { var classname, style, hiLiteCondition; if ( isDetailOrDeferredCalSync() || isPopupCal() ) hiLiteCondition = (view=='week' && sundaybeforeselectedday <= day && day <= satafterselectedday) || (view=='day' && day == dayofthemonth); else hiLiteCondition = view=='day' && now.getDate() == day && now.getMonth()+1 == curmonth && now.getFullYear() == curyear; if ( hiLiteCondition ) style = 'smalltextlt nowrap'; else style = 'smalltext'; if ( view == 'week' ) { tabletext += "\n"; } else { var sDate = curmonth+"/"+day+"/"+curyear; var dayhref = !isDetailOrDeferredCalSync() && !isPopupCal() ? "/app/crm/calendar/calendar.nl?date=" + sDate : "javascript:pickdate(\"" + sDate + "\");"; var clickhandle = ""; if(bIsInline) { dayhref = "#"; clickhandle = "onclick='pickdate_inline(\"" + sDate +"\");'"; } tabletext += "\n"; } day++; if (dofw == 7) { tabletext += "\n\n"; week++; dofw = 1; } else dofw++; } } if ( dofw != 0 ) tabletext += ""; tabletext += "\n\n"; } tabletext += "
"+NLDate_short_months[i-1]+"
"+NLDate_short_days[1]+""+NLDate_short_days[2]+""+NLDate_short_days[3]+""+NLDate_short_days[4]+""+NLDate_short_days[5]+""+NLDate_short_days[0]+""+NLDate_short_days[6]+"
"; tabletext += ""+lastmonthday+""; tabletext += ""; tabletext += ""+nextmonthday+""; tabletext += ""+markToday(today,day)+""; //tabletext += ""; tabletext += ""+markToday(today,day)+"
\n"; tabletext += "
"+'Day'+""+'Week'+""+'Month'+"
\n"; tabletext += "
"; tabletext += " \n"; tabletext += " \n"; tabletext += "" calendarDiv.innerHTML = tabletext; if ( bIsInline ) nlSyncCanvas(calendarDiv.outerdiv); if ( !bIsInline && document.getElementById('calendarPortletId') != null && window.calendarPortletId != null) { var titleTr = document.getElementById('calendarPortletId'); titleTr.id = window.calendarPortletId; var tds = titleTr.getElementsByTagName("font")[0].getElementsByTagName("td"); if (tds.length > 0) { var tr = tds[tds.length-1].parentNode; var td = document.createElement("td"); td.className = "smalltextb"; td.align = "right"; td.noWrap = -1; td.style.paddingLeft = '2px'; td.style.paddingRight = '2px'; td.vAlign = 'middle'; tr.appendChild(td); var label = "Hide"; var tdContent = ""; tdContent += "" + label + ""; tdContent += ""; td.innerHTML = tdContent; } } } function NLCalender_getCalendarDIV( bIsInline ) { if(!bIsInline) { return document.getElementById('calendar_div'); } var calendarDiv = document.getElementById('CalendarInlineDIV'); if( calendarDiv == null ) { var outerDiv = document.createElement('div'); outerDiv.style.zIndex = 1000; outerDiv.id = 'calendar_outerdiv'; outerDiv.className = 'calendarouter'; outerDiv.style.border = '1px solid black'; outerDiv.style.position = 'absolute'; outerDiv.style.padding = '0px'; outerDiv.onclick = new Function("return false;"); outerDiv.onmousedown = new Function("return false;"); outerDiv.onmouseup = new Function("return false;"); calendarDiv = document.createElement('div'); calendarDiv.style.zIndex = 1000; calendarDiv.id = 'CalendarInlineDIV'; calendarDiv.className = 'bgmd'; calendarDiv.style.border = '1px solid #999999'; calendarDiv.style.borderTop = '1px solid white'; calendarDiv.style.borderLeft = '1px solid white'; calendarDiv.style.padding = '3px'; calendarDiv.onclick = new Function("return false;"); calendarDiv.onmousedown = new Function("return false;"); calendarDiv.onmouseup = new Function("return false;"); calendarDiv.outerdiv = outerDiv; outerDiv.appendChild(calendarDiv); document.body.appendChild(outerDiv); } if (isIE) nlInsertCanvas(calendarDiv.outerdiv); return calendarDiv; } function NLCalender_popup( src, form, target, bIsExtreme) { var fldDate = getTargetFieldJScript_inline(form, target, bIsExtreme); window.NLCalendar_onMouseUp = NLCalendar_onMouseUp; if ( fldDate ) { var calendarDiv = NLCalender_getCalendarDIV(true); var launchbtn = src.firstChild; src.blur(); launchbtn.src = "/images/forms/calendardown.gif"; calendarDiv.launchbutton = launchbtn; calendarDiv.datefield = fldDate; window.calendarDIV = calendarDiv.outerdiv; calendarDiv.outerdiv.launchbutton = launchbtn; var d; if (fldDate.datefldtype == 'mmyydate') { d = stringtodate(fldDate.value); if( !d || isNaN(d) ) { d = new Date(); } } else d = parseDateOrTodayOnFail(fldDate.value); WriteCalendar( d, true); window.calendarDIV.style.display = 'block'; NLCalender_positionDIV(calendarDiv); } } function NLCalender_positionDIV(div) { var btn = div.launchbutton; var x = findPosX(btn); var y = findPosY(btn); var fx = x - getScrollLeftOffset(btn); var fy = y + 16 - getScrollTopOffset(btn); var iDocHeight = getDocumentHeight(); var iDocWidth = getDocumentWidth(); var iDivWidth = parseInt(div.outerdiv.offsetWidth); var iDivHeight = parseInt(div.outerdiv.offsetHeight); if ( (fx + iDivWidth) > iDocWidth ) { fx = getDocumentWidth() - iDivWidth; } if ( fy + iDivHeight > iDocHeight ) { if ( (y - iDivHeight ) > 0 ) { fy = y - iDivHeight + 1; } else { fy = parseInt(( iDocHeight - iDivHeight ) / 2); fx = x + 16; if ( fx + iDivWidth > iDocWidth ) { fx = getDocumentWidth() - iDivWidth - 16; } if ( fx < 0 ) { fx = 0; } } } var outerdiv = div.outerdiv; outerdiv.style.left = fx; outerdiv.style.top = fy; nlSyncCanvas(outerdiv); } function NLCalendar_onMouseUp(evnt) { var caldiv = window.calendarDIV if( caldiv != null ) { var target = getEventTarget(evnt); var div = findClassUp(target,'calendarouter'); if ( div != caldiv) { hideCalendarDIV(); } } } function hideCalendarDIV() { var caldiv = window.calendarDIV if(caldiv) { caldiv.launchbutton.src = "/images/forms/calendar.gif"; caldiv.style.display = 'none'; nlRemoveCanvas(caldiv); window.calendarDIV = null; } } function getFirstDayOfWeekOffSet( date ) { return (date.getDay() - 0 + 7) % 7; } function getLastDayOfWeekOffSet( date ) { return 6 - getFirstDayOfWeekOffSet( date ); } function NLDate_cloneDate( date ) { return new Date(date.getTime()); } function NLDateField_onKeyPress(element, evnt) { var sDateFormat = window.dateformat; var dResult = null; var rtnValue = true; var bNoMinus = sDateFormat ? (sDateFormat.indexOf("-") != -1 ) : false; var bNoLetters = bNoMinus; var datestr = element.value; var key = getEventKeypress(evnt); switch (key) { case 61: case 43: dResult = parseDateOrTodayOnFail(datestr); adddays(dResult,1); break; case 45: if(bNoMinus) break; case 95: dResult = parseDateOrTodayOnFail(datestr); adddays(dResult,-1); break; case 84: dResult = new Date(); adddays(dResult,1); break; case 116: if(bNoLetters) break; dResult = new Date(); break; case 121: if(bNoLetters) break; dResult = new Date(); adddays(dResult, -1); break; case 109: if(bNoLetters) break; dResult = new Date(); dResult.setDate(NLDate_getLastDayOfMonth(dResult)); break; case 112: if(bNoLetters) break; if(window.pp_es) { var sel = document.forms['main_form'].elements['postingperiod']; var value = getSelectValue(sel); elementValue = ((value.length != 0 && pp_es.length > value) ? pp_es[value] : ''); dResult = NLDate_parseString(elementValue); } break; } if( dResult ) { var sNewValue = getdatestring(dResult); if( datestr != sNewValue ) { element.value = sNewValue; window.ischanged = true; element.checkvalid = true; if(element.onchange) { element.onchange(); } } setEventCancelBubble(evnt); return false; } return true; } function parseDateOrTodayOnFail(sDate) { var d = stringtodate(sDate); if(d == null) d = new Date(); return d; } function NLEvent(id, type, startdate, title, status) { this.id = id; this.type = type; this.startDate = startdate; this.endDate = this.startDate; this.title = title; this.status = status; this.message = null; this.location = null; this.timezone = null; this.startTime = null; this.endTime = null; this.isTimed = true; this.period = null; this.frequency = "NONE"; this.recurrenceDOW = this.recurrenceDOWIM = this.recurrenceDOWMask = null; this.endByDate = null; this.exclusionDates = null; this.response = "accepted"; this.isEventOnDate = NLCalendar_isEventOnDate; this.isExclusionDate = NLCalendar_isExclusionDate; this.isEventStartInPeriod = NLCalendar_isEventStartInPeriod; this.isEventInPeriod = NLCalendar_isEventInPeriod; this.getTitleLink = NLCalendar_getTitleLink; this.getPeriodSize = NLCalendar_getPeriodSize; this.getResponseIcon = NLCalendar_getResponseIcon; this.getRecurringIcon = NLCalendar_getRecurringIcon; this.getDailyCalendarCell = NLCalendar_getDailyCalendarCell; this.getWeeklyCalendarCell = NLCalendar_getWeeklyCalendarCell; this.getMonthlyCalendarCell = NLCalendar_getMonthlyCalendarCell; } function NLCalendar_isEventOnDate(date) { var dStart = stringtodate(this.startDate); var dDate = stringtodate(getdatestring(date)); if (dDate < dStart || (this.endByDate != null && dDate > stringtodate(this.endByDate)) || this.isExclusionDate(dDate)) return false; var deltaDays = daysBetween(dStart, dDate); var nPeriod = parseInt(this.period); if (this.frequency == 'NONE') return deltaDays == 0; if (this.frequency == 'DAY') return deltaDays % nPeriod == 0; var nDOW = dDate.getDay(); var weekModulus = daysBetween(adddays(NLDate_cloneDate(dStart), -dStart.getDay()), adddays(NLDate_cloneDate(dDate), -nDOW)) % (7*nPeriod); if (this.frequency == 'WEEK') { if (!this.recurrenceDOWMask || this.recurrenceDOWMask.length != 7) return deltaDays % (7*nPeriod) == 0; else return weekModulus == 0 && this.recurrenceDOWMask.charAt(nDOW) == 'T'; } else if (this.frequency == 'MONTH' || this.frequency == 'YEAR') { var monthPeriod = (this.frequency == 'YEAR') ? (12*nPeriod) : nPeriod; if (monthsBetween(dStart, dDate) % monthPeriod != 0) return false; if (!this.recurrenceDOWIM) return dDate.getDate() == dStart.getDate(); else return nDOW == this.recurrenceDOW && isDOWIM(dDate, this.recurrenceDOWIM); } else if (weekModulus == 0) { if (this.frequency == 'WEEKEND') return dDate.getDay() == 0 || dDate.getDay() == 6; else if (this.frequency == 'WEEKDAY') return dDate.getDay() > 0 && dDate.getDay() < 6; else if (this.frequency == 'MWF') return dDate.getDay() == 1 || dDate.getDay() == 3 || dDate.getDay() == 5; else if (this.frequency == 'TTH') return dDate.getDay() == 2 || dDate.getDay() == 4; } return false; } function NLCalendar_isExclusionDate( date ) { var excludeEvent = false, i = 0; if ( this.frequency != 'NONE' && this.exclusionDates != null && this.exclusionDates.length > 0 ) { while ( !excludeEvent && i < this.exclusionDates.length ) excludeEvent = date == this.exclusionDates[ i ]; } return excludeEvent; } function NLCalendar_isEventStartInPeriod( time, periodSize ) { var startTime = stringtotime( null, this.startTime ); var timeMinutes = parseInt( time.getHours()*60 + time.getMinutes() ); var startTimeMinutes = parseInt( startTime.getHours()*60 + startTime.getMinutes() ); return startTimeMinutes >= timeMinutes && startTimeMinutes < (timeMinutes + (periodSize ? periodSize : 30) ); } function NLCalendar_isEventInPeriod( time, periodSize ) { var endTime = stringtotime( null, this.endTime ); var startTime = stringtotime( null, this.startTime ); var timeMinutes = parseInt( time.getHours()*60 + time.getMinutes() ); var endTimeMinutes = parseInt( endTime.getHours()*60 + endTime.getMinutes() ); var startTimeMinutes = parseInt( startTime.getHours()*60 + startTime.getMinutes() ); return ( startTimeMinutes >= timeMinutes && startTimeMinutes < timeMinutes+(periodSize ? periodSize : 30) ) || ( endTimeMinutes > timeMinutes && endTimeMinutes <= timeMinutes+(periodSize ? periodSize : 30) ) || ( startTimeMinutes < timeMinutes && endTimeMinutes > timeMinutes+(periodSize ? periodSize : 30) ); } function NLCalendar_getPeriodSize( periodSize ) { var endTime = stringtotime( null, this.endTime ); var startTime = stringtotime( null, this.startTime ); var endTimeMinutes = parseInt( endTime.getHours()*60 + endTime.getMinutes() ); var startTimeMinutes = parseInt( startTime.getHours()*60 + startTime.getMinutes() ); return Math.ceil((endTimeMinutes - startTimeMinutes)/(periodSize ? periodSize : 30)); } function NLCalendar_getMaxEventsInPeriod( eventList, date, periodSize ) { var maxEventsInPeriod = 0; var workingDate = NLDate_cloneDate( date ); workingDate.setHours( 0 ); var dateEndOfDay = NLDate_cloneDate( workingDate ); dateEndOfDay.setHours( 23 ); while ( workingDate < dateEndOfDay ) { var eventsInPeriod = NLCalendar_getEventsInPeriod( eventList, workingDate, periodSize ); if ( maxEventsInPeriod < eventsInPeriod.length ) maxEventsInPeriod = eventsInPeriod.length; workingDate.setMinutes( workingDate.getMinutes() + periodSize ); } return maxEventsInPeriod; } function NLCalendar_getDailyCalendarCell( colspan ) { var cell = ""; cell += "

"+this.response+" "; if ( this.isTimed ) cell += this.startTime+"-"+this.endTime+" "; cell += this.getTitleLink(); cell += this.getRecurringIcon(); cell += "

"; cell += ""; return cell; } function NLCalendar_getWeeklyCalendarCell( ) { var cell = ""; cell += "

"+this.response+" "; if ( this.isTimed ) cell += this.startTime+"-"+this.endTime+" "; cell += this.getTitleLink(); cell += this.getRecurringIcon(); cell += "

"; cell += ""; return cell; } function NLCalendar_getMonthlyCalendarCell( ) { var cell = this.getTitleLink(); return cell; } function NLCalendar_getTitleLink( ) { var sStatus = getRecordValue( this.type+"status", this.status, "name" ); var sTitle = this.title + ' (' + sStatus + ')'; var sBottomLine = this.isTimed ? ( this.startTime + ' - ' + this.endTime ) : ''; sBottomLine += isValEmpty( this.location ) ? '' : (this.isTimed ? ' - ' : '') + this.location; sTitle += isValEmpty( sBottomLine ) ? '' : '
' + sBottomLine; var sMessage = emptyIfNull( this.message ).replace(/\n/g,'
'); var onMouseout = "if ( window.isinited == null || window.isinited ) hideToolTip()"; var onMouseover = "if ( window.isinited == null || window.isinited ) showToolTip('"+sTitle.replace( /\'/g ,"\\'")+"', '"+sMessage.replace( /\'/g ,"\\'")+"')"; var onClick = "viewEvent('"+this.id+"','"+this.startDate+"', this); return true"; return ""+this.title+""; } function NLCalendar_getResponseIcon( ) { var imgIcon = this.response+".gif"; if ( this.type == 'task' || this.type == 'call' ) imgIcon = this.type + "_transparent.gif"; else if ( this.response == 'tentative' || this.response == 'noresponse' ) imgIcon = "schedule_legend_tentative.gif"; else if ( this.status.toLowerCase() == 'cancelled' ) imgIcon = "cancelled.gif"; return "/images/nav/calendar/" + imgIcon + '?v=2008.2.0'; } function NLCalendar_getRecurringIcon( ) { var icon = ''; if ( this.frequency != 'NONE' ) icon += " Recurring Event"; return icon; } function NLCalendar_getEventsOnDate( eventList, date, showTimed ) { var eventsOnDateList = new Array(); for ( var i = 0; i < eventList.length; i++ ) { var obj = eventList[ i ]; if ( showTimed != null && ( (showTimed == 'timed' && !obj.isTimed) || (showTimed == 'untimed' && obj.isTimed) ) ) continue; if ( eventList[ i ].isEventOnDate( date ) ) eventsOnDateList[eventsOnDateList.length] = eventList[ i ]; } eventsOnDateList.sort( NLCalendar_startTimeComparator ); return eventsOnDateList; } function NLCalendar_getEventsStartInPeriod( eventList, time, period ) { var eventsInTimePeriodList = new Array(); for ( var i = 0; i < eventList.length; i++ ) if ( eventList[ i ].isEventStartInPeriod( time, period ) ) eventsInTimePeriodList[eventsInTimePeriodList.length] = eventList[ i ]; eventsInTimePeriodList.sort( NLCalendar_startTimeComparator ); return eventsInTimePeriodList; } function NLCalendar_getEventsInPeriod( eventList, time, period ) { var eventsInTimePeriodList = new Array(); for ( var i = 0; i < eventList.length; i++ ) if ( eventList[ i ].isEventInPeriod( time, period ) ) eventsInTimePeriodList[eventsInTimePeriodList.length] = eventList[ i ]; eventsInTimePeriodList.sort( NLCalendar_startTimeComparator ); return eventsInTimePeriodList; } function NLCalendar_startDateComparator(event1, event2) { var date1 = stringtodate(event1.startDate); var date2 = stringtodate(event2.startDate); return (date1 < date2) ? -1 : (date1 == date2 ? 0 : 1); } function NLCalendar_startTimeComparator(event1, event2) { var date1 = stringtotime(null, nvl( event1.startTime, "12:00 a") ); var date2 = stringtotime(null, nvl( event2.startTime, "12:00 a") ); return (date1 < date2) ? -1 : (date1 == date2 ? 0 : 1); } function NLCalendar_getAllEvents() { var recordList = new Array(); var currentUser = -4; var events = getXMLList( getRecordTypeData( "event" ), "/recordType/recordList/record[@perm > 0]" ); var responses = getRecordTypeData( "evententity" ); for ( var i = 0; events != null && i < events.length; i++ ) { var node = events[ i ]; var id = getXMLValue( node, "@id" ); var response = getXMLValue( responses, "/recordType/recordList/record[ activity='"+id+"' and attendee="+currentUser+"]/response"); if ( response == null || response.toLowerCase() == 'declined' ) continue; var record = new NLEvent( id, 'event', getXMLValue( node, "startdate" ), getXMLValue( node, "title" ), getXMLValue( node, "status" ) ); record.startTime = getXMLValue( node, "starttime" ); record.endTime = getXMLValue( node, "endtime" ); record.endByDate = getXMLValue( node, "endbydate" ); record.timezone = getXMLValue( node, "timezone" ); record.period = getXMLValue( node, "period" ); record.frequency = getXMLValue( node, "frequency", "NONE" ); record.recurrenceDOW = parseInt(getXMLValue( node, "recurrencedow" )); record.recurrenceDOWIM = parseInt(getXMLValue( node, "recurrencedowim" )); record.recurrenceDOWMask = getXMLValue( node, "recurrencedowmask" ); record.location = getXMLValue( node, "location" ); record.message = getXMLValue( node, "message" ); record.isTimed = getXMLBoolean( node, "timedevent" ); record.response = response.toLowerCase(); recordList[ recordList.length ] = record; } var tasks = getXMLList( getRecordTypeData( "task" ), "/recordType/recordList/record[@perm > 0 and assigned="+currentUser+"]" ); for ( var i = 0; tasks != null && i < tasks.length; i++ ) { var node = tasks[ i ]; var record = new NLEvent( getXMLValue( node, "@id" ), 'task', getXMLValue( node, "startdate" ), getXMLValue( node, "title" ), getXMLValue( node, "status" ) ); record.startTime = getXMLValue( node, "starttime" ); record.endTime = getXMLValue( node, "endtime" ); record.timezone = getXMLValue( node, "timezone" ); record.message = getXMLValue( node, "message" ); record.isTimed = getXMLBoolean( node, "timedevent" ); record.response = "accepted"; recordList[ recordList.length ] = record; } var calls = getXMLList( getRecordTypeData( "call" ), "/recordType/recordList/record[@perm > 0 and assigned="+currentUser+"]" ); for ( var i = 0; calls != null && i < calls.length; i++ ) { var node = calls[ i ]; var record = new NLEvent( getXMLValue( node, "@id" ), 'call', getXMLValue( node, "startdate" ), getXMLValue( node, "title" ), getXMLValue( node, "status" ) ); record.startTime = getXMLValue( node, "starttime" ); record.endTime = getXMLValue( node, "endtime" ); record.timezone = getXMLValue( node, "timezone" ); record.message = getXMLValue( node, "message" ); record.isTimed = getXMLBoolean( node, "timedevent" ); record.response = "accepted"; recordList[ recordList.length ] = record; } recordList.sort( NLCalendar_startDateComparator ); return recordList; } function buildDetailCalendar( date, view ) { date = stringtodate(getdatestring(date)); var titleBar = ''; var mainCalendar = ''; var eventList = NLCalendar_getAllEvents(); var titleFontColor = '#000000'; var calendarDom = document.getElementById(getCalendarDetailPortletId()); if ( view.toLowerCase() == 'week' ) { var dateStartOfWeek = NLDate_cloneDate( date ); dateStartOfWeek.setDate( date.getDate() - getFirstDayOfWeekOffSet( date ) ); var dateEndOfWeek = NLDate_cloneDate( date ); dateEndOfWeek.setDate( date.getDate() + getLastDayOfWeekOffSet( date ) ); var titleBarDateLabel = NLDate_months[dateStartOfWeek.getMonth()] + " " + dateStartOfWeek.getDate() + " - " + dateEndOfWeek.getDate() + ", "+dateEndOfWeek.getYear(); if ( dateEndOfWeek.getYear() != dateStartOfWeek.getYear() ) titleBarDateLabel = NLDate_months[dateStartOfWeek.getMonth()] + " " + dateStartOfWeek.getDate() + ", "+dateStartOfWeek.getYear() + " - "+ NLDate_months[dateEndOfWeek.getMonth()] + " " + dateEndOfWeek.getDate() + ", "+dateEndOfWeek.getYear() ; else if ( dateEndOfWeek.getMonth() != dateStartOfWeek.getMonth() ) titleBarDateLabel = NLDate_months[dateStartOfWeek.getMonth()] + " " + dateStartOfWeek.getDate() + " - "+ NLDate_months[dateEndOfWeek.getMonth()] + " " + dateEndOfWeek.getDate() + ", "+dateEndOfWeek.getYear() ; titleBar = ""+ ""+ ""+ ""+ ""+ ""+ "
 "+titleBarDateLabel+"  
"; mainCalendar += ""; mainCalendar += ""; var workingDate = NLDate_cloneDate( dateStartOfWeek ); for ( var i = 0; i < 7; i++ ) { var newEventScript = "newEvent('"+(workingDate.getMonth()+1)+"/"+workingDate.getDate()+"/"+workingDate.getYear()+"'); return false" var pickDateScript = "pickdate('"+(workingDate.getMonth()+1)+"/"+workingDate.getDate()+"/"+workingDate.getYear()+"'); return false"; mainCalendar += ""; var eventsOnDateList = NLCalendar_getEventsOnDate( eventList, workingDate ); for ( var j = 0; j < eventsOnDateList.length; j++ ) mainCalendar += "" + eventsOnDateList[ j ].getWeeklyCalendarCell() + ""; workingDate.setDate( workingDate.getDate() + 1 ); } mainCalendar += ""; mainCalendar += "
"+getLongDate( workingDate, true )+" New Event
"; } else if ( view.toLowerCase() == 'month' ) { var titleBarDateLabel = NLDate_months[date.getMonth()] + " " +date.getYear(); titleBar = ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ "
 "+titleBarDateLabel+"  
"; var dateStartOfMonth = NLDate_cloneDate( date ); dateStartOfMonth.setDate( 1 ); dateStartOfMonth.setDate( dateStartOfMonth.getDate() - getFirstDayOfWeekOffSet( dateStartOfMonth ) ); var dateEndOfMonth = NLDate_cloneDate( date ); dateEndOfMonth.setDate( NLDate_getLastDayOfMonth( date ) ); dateEndOfMonth.setDate( dateEndOfMonth.getDate() + getLastDayOfWeekOffSet( dateEndOfMonth ) ); var workingDate = NLDate_cloneDate( dateStartOfMonth ); mainCalendar += ""; mainCalendar += ""; for ( var i = 0; i < 7; i++ ) { mainCalendar += ""; mainCalendar += (i == 6) ? "" : ""; workingDate.setDate( workingDate.getDate() + 1 ); } mainCalendar += ""; workingDate = NLDate_cloneDate( dateStartOfMonth ); var dateStartOfWeek = NLDate_cloneDate( workingDate ); while ( workingDate < dateEndOfMonth ) { mainCalendar += ""; for ( var j = 0; j < 7; j++ ) { var pickDateScript = "pickdate('"+(workingDate.getMonth()+1)+"/"+workingDate.getDate()+"/"+workingDate.getYear()+"'); return false"; var newEventScript = "newEvent('"+(workingDate.getMonth()+1)+"/"+workingDate.getDate()+"/"+workingDate.getYear()+"'); return false"; var datePickerClass = workingDate.getMonth() != date.getMonth() ? "text" : "textbold"; var cellClass = workingDate.getMonth() != date.getMonth() ? "smalltext portlet" : "smalltext bglt"; mainCalendar += ""+ ""+ (j < 6 ? "" : ""); workingDate.setDate( workingDate.getDate() + 1 ); } mainCalendar += ""; workingDate = NLDate_cloneDate( dateStartOfWeek ); mainCalendar += ""; for ( var j = 0; j < 7; j++ ) { var cellClass = workingDate.getMonth() != date.getMonth() ? "smalltext portlet" : "smalltext bglt"; var eventsOnDateList = NLCalendar_getEventsOnDate( eventList, workingDate ); if ( eventsOnDateList.length == 0 ) mainCalendar += ""; else { mainCalendar += ""; } mainCalendar += (j < 6 ? "" : ""); workingDate.setDate( workingDate.getDate() + 1 ); } mainCalendar += ""; mainCalendar += ""; for ( var j = 0; j < 20; j++ ) mainCalendar += ""; mainCalendar += ""; dateStartOfWeek = NLDate_cloneDate( workingDate ); } mainCalendar += "
"+NLDate_short_days[ workingDate.getDay() ]+"
"+workingDate.getDate()+"New Event
 
    "; for ( var k = 0; k < eventsOnDateList.length; k++ ) mainCalendar += "
  • " + eventsOnDateList[ k ].getMonthlyCalendarCell() + "
  • "; mainCalendar += "

 
"; } else { var workingDate = NLDate_cloneDate( date ); titleBar = ""+ ""+ ""+ ""+ ""+ ""+ ""+ ""+ "
 "+ NLDate_days[ workingDate.getDay() ] + " " +getLongDate( workingDate )+ "  
"; mainCalendar += ""; var startHour = 8; var endHour = 18; var periodSize = 30; var eventsOnDateList = NLCalendar_getEventsOnDate( eventList, workingDate, 'timed' ); var maxEventsInPeriod = NLCalendar_getMaxEventsInPeriod( eventsOnDateList, workingDate, periodSize ); var untimedEventsList = NLCalendar_getEventsOnDate( eventList, workingDate, 'untimed' ); for ( var j = 0; j < untimedEventsList.length; j++ ) { mainCalendar += ""; mainCalendar += ""; mainCalendar += untimedEventsList[ j ].getDailyCalendarCell( maxEventsInPeriod ); mainCalendar += ""; } workingDate.setHours( startHour ); var dateEndOfDay = NLDate_cloneDate( workingDate ); dateEndOfDay.setHours( endHour ); while ( workingDate < dateEndOfDay ) { var hhmmtime = workingDate.getHours()*100 + workingDate.getMinutes(); var varTime = (workingDate.getHours()%12 == 0 ? "12" : workingDate.getHours()%12) + ":" + (workingDate.getMinutes() == 0 ? "00" : workingDate.getMinutes()); var newEventScript = "newEvent('"+(workingDate.getMonth()+1)+"/"+workingDate.getDate()+"/"+workingDate.getYear()+"','"+hhmmtime+"'); return false"; mainCalendar += ""; mainCalendar += ""; if ( maxEventsInPeriod == 0 ) mainCalendar += ""; else { var eventsStartInPeriod = NLCalendar_getEventsStartInPeriod( eventsOnDateList, workingDate, periodSize ); if ( eventsStartInPeriod.length > 0 ) for ( var i = 0; i < eventsStartInPeriod.length; i++ ) mainCalendar += eventsStartInPeriod[ i ].getDailyCalendarCell(); var eventsInPeriod = NLCalendar_getEventsInPeriod( eventsOnDateList, workingDate, periodSize ).length; if ( (maxEventsInPeriod-eventsInPeriod) > 0 ) mainCalendar += ""; } mainCalendar += ""; workingDate.setMinutes( workingDate.getMinutes() + periodSize ); } mainCalendar += "
 
"+varTime+"  
"; } var legendBar = ""+ ""+ ""+ ""+ "
Event AcceptedAccepted Event TentativeTentative/ No response Event CanceledCanceled 
"; mainCalendar = "" + legendBar + "
"+mainCalendar+"
"; var html = ""; html += ""; html += ""; html += "'; html += ""; html += ""; html += ""; html += "'; html += ""; html += ""; html += ""; html += "
"+titleBar+'
"+mainCalendar+'
"+ ""+ ""+ ""+ "
"; calendarDom.innerHTML = html; }