











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 "<b>"+date+"</b>" ;

	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 "<table width='100%' border=0 cellpadding=0 cellspacing=0><tr><td align='left' class='"+sTitleClass+"'><a href='javascript:void(0);' onclick='prevmonth(" + bIsInline + "); return false;'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='top' border='0'></a></td><td nowrap align='center' class='"+sTitleClass+"'>&nbsp;&nbsp;"+getdatestring(date, 'Month  YYYY')+"&nbsp;&nbsp;</td><td align='right' class='"+sTitleClass+"'><a href='javascript:void(0);' onclick='nextmonth(" + bIsInline + "); return false;'><img src='/images/nav/arrowright.gif' width='15' height='15' align='top' border='0'></a></td></tr></table></td></tr><tr>"; 
    }
    else
    {
        bIsInline = "";
        return "<table width='100%' width='100%' border=0 cellspacing=0 cellpadding=0 style='margin-bottom: 10px;'><tr class='portletlabel'><td style='border:solid 1px #999999;'><table width='100%' border=0 cellspacing=0 cellpadding=1 style='border-width:1 1 0 1; border-style:solid; border-color: #FFFFFF #BDBDBD #FFFFFF #FFFFFF'><tr><td nowrap class='smalltextb'  align='center' width='100%' style='padding-right:1'><font color='#000000'><table width='100%' border=0 cellpadding=0 cellspacing=0><tr><td align='left' class='"+sTitleClass+"'><a href='javascript:void(0);' onclick='prevmonth(" + bIsInline + "); return false;'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='top' border='0'></a></td><td nowrap align='center' class='"+sTitleClass+"'>&nbsp;&nbsp;"+getdatestring(date, 'Month  YYYY')+"&nbsp;&nbsp;</td><td align='right' class='"+sTitleClass+"'><a href='javascript:void(0);' onclick='nextmonth(" + bIsInline + "); return false;'><img src='/images/nav/arrowright.gif' width='15' height='15' align='top' border='0'></a></td></tr></table></font></td></tr></table></td><td width=2 style='background-image:url(/images/icons/dashboard/portletelements/right_gradient.gif)'><img height='100%' width='2' border=0 src='/images/icons/dashboard/portletelements/right_gradient.gif'></td></tr><tr><td style='border-left:solid 1px #B7B7B7; border-right:solid 1px #B7B7B7; background-color:#FFFFFF;' valign='top'><table width='100%' border='0' cellspacing='0' cellpadding='0' ><tr>";
    }
}

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 = "<table id='calendar' border='0' cellspacing='0' cellpadding='0' "+ (bIsInline ? "" : "width='100%'" ) +">\n";
        tabletext += "    <tr>\n";
        tabletext += "      <td valign='top'>";

        tabletext += getCalendarHTMLHeader(bIsInline, d);

 		tabletext += "<td align='center'><table><tr>";

	    
        
        if(!bIsInline)
        {
            var todayhref = !isDetailOrDeferredCalSync() && !isPopupCal() ? "javascript:gotoToday()" : "javascript:pickdate(getTodayShortDate())";
            tabletext += "                        <td colspan='3' class='smalltext' align='center' nowrap><a href='"+todayhref+"'>"+'Today'+"</a>: \n";
            tabletext += "                          "+getTodayLongDate()+"</td>\n";
            tabletext += "                      </tr>\n";
            tabletext += "                      <tr> \n";
            tabletext += "                        <td colspan='3' align='center' style='background-image: url(/images/nav/dashedline2.gif);'><img src='/images/nav/stretch.gif' height='0' width='0'></td>\n";
            tabletext += "                      </tr>\n";
            tabletext += "                      <tr> \n";
        }

        tabletext += "                        <td colspan='3'> \n";


	    
        
        tabletext += "<table border='0' cellspacing='0' cellpadding='2' width='100%'>\n";

        var view = getView(bIsInline);

        
        if ( view == 'month' )
        {
        	tabletext += "<tr> \n";
            var i = 0, style;
            for (i=1; i<=12; i++)
            {
                style = (i == calendarDiv.selecteddate.getMonth()+1) ? 'smalltextlt nowrap' : 'smalltext';
                tabletext += "  <td class='"+style+"' align='center'><a href='javascript:pickmonth(\""+i+"/1/"+curyear+"\");'>"+NLDate_short_months[i-1]+"</a></td>\n";
                if (i%3==0)
                    tabletext += "</tr>\n";
            }
        }
        else
        {
            
        	tabletext += "<tr> \n";
			var monToFri = "\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[1]+"</td>\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[2]+"</td>\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[3]+"</td>\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[4]+"</td>\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[5]+"</td>\n";
			var sunday = "\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[0]+"</td>\n";
			var saturday = "\n<td class='smalltext' nowrap align='center'>"+NLDate_short_days[6]+"</td>\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 += "</tr>\n<!-- start calendar-->\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 += "<tr>\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 += "<td align='center' " + sMouseOver + ">";
                    tabletext += "<a class='smalltextnolink' " + clickhandle + " style='color: #666666' href='"+lastmonthdayhref+"'>"+lastmonthday+"</a>";
                    tabletext += "</td>";
                    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 += "<td align='center' " + sMouseOver + ">";
                    tabletext += "<a class='smalltextnolink' " + clickhandle + " style='color: #666666' href='"+nextmonthdayhref+"'>"+nextmonthday+"</a>";
                    tabletext += "</td>";
                    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 += "<td class='"+style+"' align=center><a href='javascript:pickdateinweek(\""+curmonth+"/"+day+"/"+curyear+"\");' class='textnolink' "+sMouseOver+">"+markToday(today,day)+"</a></td>\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 += "<td align='center' " + sMouseOver + ">";
                        //tabletext += "<td class='"+style+"' align=center " + clickhandle + ">";
                        tabletext += "<a " + clickhandle + " href='"+dayhref+"' class='textnolink' "+sMouseOver+">"+markToday(today,day)+"</a></td>\n";
                    }
                    day++;
                    if (dofw == 7)
                    {
                        tabletext += "\n</tr>\n";
                        week++;
                        dofw = 1;
                    }
                    else
                        dofw++;
                }
            }
            if ( dofw != 0 )
                tabletext += "</tr>";
                tabletext += "\n<!-- end calendar-->\n";
        }

        tabletext += "              </table>\n";
        <!--  end of calendar core (dates)-->

        tabletext += "                        </td>\n";
        tabletext += "                      </tr>\n";

		if ( !bIsInline && isDetailOrDeferredCalSync() )
		{
			tabletext += "                      <tr> \n";
			tabletext += "                        <td colspan='3' align='center'><img src='/images/nav/dashedline.gif' width='150' height='5'></td>\n";
			tabletext += "                      </tr>\n";
			tabletext += "                      <tr> \n";

			style = view == 'day' ? 'bglttext' : 'text';
			tabletext += "<td class="+style+" align='center'><a href='javascript:SetView(\"day\");'>"+'Day'+"</a></td>\n";

			style = view == 'week' ? 'bglttext' : 'text';
			tabletext += "<td class="+style+" align='center'><a href='javascript:SetView(\"week\");'>"+'Week'+"</a></td>\n";

			style = view == 'month' ? 'bglttext' : 'text';
			tabletext += "<td class="+style+" align='center'><a href='javascript:SetView(\"month\");'>"+'Month'+"</a></td>\n";
			tabletext += "                      </tr>\n";
        }
    	tabletext += "                    </table>\n";
       	tabletext += "                  </td>\n";
        

        
        tabletext += bIsInline ? "" : "</tr></table></td><td width=2 style='background-image:url(/images/icons/dashboard/portletelements/right_gradient.gif)'><img height='100%' width='2' border=0 src='/images/icons/dashboard/portletelements/right_gradient.gif'></td></tr><tr><td height=8 colspan=2><table cellpadding=0 cellspacing=0 border=0 width='100%' height=9><tr><td><div style='height:9; width:7'><img height=9 width=7 border=0 src='/images/icons/dashboard/portletelements/bottom_left.gif'></div></td><td width='99%' vailgn='bottom' height=9><div style='height:9'><img height=9 width='100%' border=0 src='/images/icons/dashboard/portletelements/lower_gradient.gif'></div></td><td><div style='height:9; width:9'><img height=9 width=9 border=0 src='/images/icons/dashboard/portletelements/bottom_right.gif'></div></td></tr></table></td></tr></table>";

     

        tabletext += "      </td>\n";
        tabletext += "    </tr>\n";
        tabletext += "</table>"
        

	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 = "<a href='javascript:void(0);' title='" + label + "' onclick=\"javascript:hidePortlet(" + "null" + "," + window.calendarPortletId.split("_")[1] + ",'" + window.calendarPortletId + "');\">";
            tdContent += "<img border='0' alt='" + label + "' src='/images/forms/hide.gif' />";
            tdContent += "</a>";
            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 =  "<td class='texttable' style='VERTICAL-ALIGN: top; TEXT-ALIGN: left' "+(colspan != null ? "colspan='"+colspan+"'" : "")+" rowspan='"+this.getPeriodSize()+"'>";
        cell +=     "<p><img src='"+this.getResponseIcon()+"' border='0' height='15' width='15' align='absmiddle' alt='"+this.response+"'/>&nbsp;";
		if ( this.isTimed )
			cell += this.startTime+"-"+this.endTime+"&nbsp;";
        cell +=     this.getTitleLink();
        cell +=     this.getRecurringIcon();
        cell +=     "</p>";
        cell += "</td>";
    return cell;
}

function NLCalendar_getWeeklyCalendarCell(  )
{
    var cell =  "<td colspan='2' class='bglttext'>";
        cell +=     "<p><img src='"+this.getResponseIcon()+"' border='0' height='15' width='15' align='absmiddle' alt='"+this.response+"'/>&nbsp;";
		if ( this.isTimed )
			cell += this.startTime+"-"+this.endTime+"&nbsp;";
        cell +=     this.getTitleLink();
        cell +=     this.getRecurringIcon();
        cell +=     "</p>";
        cell += "</td>";
    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 ) ? '' : '<BR>' + sBottomLine;
	var sMessage = emptyIfNull( this.message ).replace(/\n/g,'<BR>');

    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 "<a href='#' onMouseOut=\""+onMouseout+"\" onClick=\""+onClick+"\" onMouseOver=\""+onMouseover+"\">"+this.title+"</a>";
}

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 += "&nbsp;<img src='/images/nav/calendar/recurring.gif' alt='Recurring Event' border='0' width='17' align='absmiddle' height='15'>";
    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 = "<table cellspacing='0' cellpadding='0' width='100%' style='margin-bottom: 0px;' class='noprint'>"+
						"<tr>"+
							"<td class='smalltextb' width='5%'>&nbsp;<a href='javascript:prevweek()'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='middle' border='0'></a></td>"+
							"<td class='smalltextb' style='text-align: center' width='90%'><font color='"+titleFontColor+"'>"+titleBarDateLabel+"</font></td>"+
							"<td class='smalltextb' width='5%' align='right'>&nbsp;<a href='javascript:nextweek()'><img src='/images/nav/arrowright.gif' width='15' height='15' align='middle' border='0'></a>&nbsp;</td>"+
						"</tr>"+
					"</table>";

		mainCalendar += "<table cellspacing='0' cellpadding='1' width='100%' border='0'>";
			mainCalendar += "<tbody>";

		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 +=	"<tr><td class='portlettext portlet' style='padding: 2 5 2 5'><a href='#' onclick=\""+pickDateScript+"\" class='textbold'><font color='"+titleFontColor+"'>"+getLongDate( workingDate, true )+"</font></a></td><td class='portlettext portlet' align='center' style='padding: 2 5 2 5' width='1%'> <a href='#' onclick=\""+newEventScript+"\" class='textboldnolink'><img border='0' src='/images/nav/calendar/newevent.gif' alt='New Event' class='noprint'></a></td></tr>";

            var eventsOnDateList = NLCalendar_getEventsOnDate( eventList, workingDate );
            for ( var j = 0; j < eventsOnDateList.length; j++ )
                mainCalendar += "<tr>" + eventsOnDateList[ j ].getWeeklyCalendarCell() + "</tr>";
			workingDate.setDate( workingDate.getDate() + 1 );
		}
			mainCalendar += "</tbody>";
		mainCalendar += "</table>";
	}
	else if ( view.toLowerCase() == 'month' )
	{
		var titleBarDateLabel = NLDate_months[date.getMonth()] + " " +date.getYear();
		titleBar = "<table cellspacing='0' cellpadding='0' width='100%' style='margin-bottom: 0px;' class='noprint'>"+
						"<tbody>"+
							"<tr class='portletlabel'>"+
								"<td class='smalltextb' width='5%'>&nbsp;<a href='javascript:prevmonth()'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='middle' border='0'></a></td>"+
								"<td class='smalltextb' style='text-align: center' width='90%'>"+titleBarDateLabel+"</td>"+
								"<td class='smalltextb' width='5%' align='right'>&nbsp;<a href='javascript:nextmonth()'><img src='/images/nav/arrowright.gif' width='15' height='15' align='middle' border='0'></a>&nbsp;</td>"+
							"</tr>"+
						"</tbody>"+
					"</table>";

		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 += "<table cellspacing='0' cellpadding='0' width='100%' border='0'><tbody>";
		mainCalendar +=     "<tr>";
		for ( var i = 0; i < 7; i++ )
		{
			mainCalendar += "<td height='100%' class='smalltext' style='background-color:#DDDDDD' width='14%' colspan='2'>"+NLDate_short_days[ workingDate.getDay() ]+"</td>";
			mainCalendar += (i == 6) ? "" : "<td bgcolor='#929DAD' width='1'><img height='1' src='/images/nav/calendar/x.gif' width='1'></td>";
			workingDate.setDate( workingDate.getDate() + 1 );
		}
		mainCalendar +=     "</tr>";

		workingDate = NLDate_cloneDate( dateStartOfMonth );
		var dateStartOfWeek = NLDate_cloneDate( workingDate );
		while ( workingDate < dateEndOfMonth )
		{
			mainCalendar +=	"<tr>";
			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 += "<td class='"+cellClass+"' style='text-align=left; font-size: 12pt;'><font style='margin:0 2 0 2'><a href='#' onclick=\""+pickDateScript+"\" class='"+datePickerClass+"'>"+workingDate.getDate()+"</a></font></td>"+
								"<td class='"+cellClass+"' style='text-align=right;' align='right'><font style='margin:0 2 0 2'><a href='#' onclick=\""+newEventScript+"\"><img style='vertical-align: middle' src='/images/nav/calendar/neweventsmall.gif' alt='New Event' border='0' class='noprint'></a></font></td>"+
								(j < 6 ? "<td bgcolor='#929DAD' width='1'><img height='1' src='/images/nav/calendar/x.gif' width='1'></td>" : "");
				workingDate.setDate( workingDate.getDate() + 1 );
			}
			mainCalendar += "</tr>";

			workingDate = NLDate_cloneDate( dateStartOfWeek );
			mainCalendar +=	"<tr height='50'>";
			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 += "<td class='"+cellClass+"' colspan='2' style='text-align:left; vertical-align:top'>&nbsp;</td>";
                else
                {
				    mainCalendar += "<td class='"+cellClass+"' colspan='2' style='text-align:left; vertical-align:top'><ul style='margin:0 0 0 4;padding:0 2 0 14'>";
                    for ( var k = 0; k < eventsOnDateList.length; k++ )
                        mainCalendar += "<LI style='padding:0;margin:0'>" + eventsOnDateList[ k ].getMonthlyCalendarCell() + "</LI>";
				    mainCalendar += "</ul><BR>&nbsp;</td>";
                }
                mainCalendar +=	(j < 6 ? "<td bgcolor='#929DAD' width='1'><img height='1' src='/images/nav/calendar/x.gif' width='1'></td>" : "");
				workingDate.setDate( workingDate.getDate() + 1 );
			}
			mainCalendar += "</tr>";

			mainCalendar +=	"<tr>";
			for ( var j = 0; j < 20; j++ )
				mainCalendar += "<td bgcolor='#929DAD' width='1'><img height='1' src='/images/nav/calendar/x.gif' width='1'></td>";
			mainCalendar += "</tr>";

			dateStartOfWeek = NLDate_cloneDate( workingDate );
		}
		mainCalendar += "</tbody></table>";
	}
	else
	{
		var workingDate = NLDate_cloneDate( date );
		titleBar = "<table cellspacing='0' cellpadding='0' width='100%' style='margin-bottom: 0px;' class='noprint'>"+
						"<tbody>"+
							"<tr class='portletlabel'>"+
								"<td class='smalltextb' width='5%'>&nbsp;<a href='javascript:prevday()'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='middle' border='0'></a></td>"+
								"<td class='smalltextb' style='text-align: center' width='90%'>"+ NLDate_days[ workingDate.getDay() ] + " " +getLongDate( workingDate )+ "</td>"+
								"<td class='smalltextb' width='5%' align='right'>&nbsp;<a href='javascript:nextday()'><img src='/images/nav/arrowright.gif' width='15' height='15' align='middle' border='0'></a>&nbsp;</td>"+
							"</tr>"+
						"</tbody>"+
					"</table>";

        mainCalendar += "<table cellspacing='0' cellpadding='0' width='100%' border=0><tbody>";
		
        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 +=	"<tr>";
				mainCalendar += "<td class='texttablert' hd wrap='true' colspan='1' width='5%'>&nbsp;</td>";
				mainCalendar += untimedEventsList[ j ].getDailyCalendarCell( maxEventsInPeriod );
			mainCalendar += "</tr>";
		}

		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 +=	"<tr>";
			mainCalendar +=     "<td class='texttablert' hd wrap='true' colspan='1' width='5%'><a href='#' onclick=\""+newEventScript+"\" class='text'>"+varTime+"</a></td>";

			if ( maxEventsInPeriod == 0 )
                mainCalendar += "<td class='texttable'>&nbsp;</td>";
			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 +=     "<td class='texttable' colspan='"+(maxEventsInPeriod-eventsInPeriod)+"'>&nbsp;</td>";
            }
			mainCalendar += "</tr>";
			workingDate.setMinutes( workingDate.getMinutes() + periodSize );
		}
		mainCalendar += "</tbody></table>";
	}

	var legendBar = "<tr><td colspan='3' nowrap='true' class='smalltext' align='center'><table style='PADDING-RIGHT: 5px; PADDING-TOP: 5px' cellspacing='0' border='0' cellpadding='0'><tr>"+
						"<td class='smalltext'><img border='0' src='/images/nav/calendar/accepted.gif?v=2008.2.0' alt='Event Accepted' width='17' height='15'></td><td class='smalltext'>Accepted&nbsp;</td>"+
						"<td class='smalltext'><img border='0' src='/images/nav/calendar/schedule_legend_tentative.gif?v=2008.2.0' alt='Event Tentative' width='15' height='15'></td><td class='smalltext'>Tentative/ No response&nbsp;</td>"+
						"<td class='smalltext'><img border='0' src='/images/nav/calendar/cancelled.gif?v=2008.2.0' alt='Event Canceled' width='15' height='15'></td><td class='smalltext'>Canceled&nbsp;</td>"+
					"</tr></table></td></tr>";
	mainCalendar = "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td colspan='3'>"+mainCalendar+"</td></tr>" + legendBar + "</table>";

	var html = "";
	html += "<table width='100%' border='0' cellspacing='0' cellpadding='0' style='margin-bottom: 10px;'>";
		html += "<tr class='portletlabel'>";
			html += "<td style='border:solid 1px #999999;' colspan='2'>"+titleBar+'</td>';
			html += "<td width='2' style='background-image:url(/images/icons/dashboard/portletelements/right_gradient.gif)'><img height='100%' width='2' border='0' src='/images/icons/dashboard/portletelements/right_gradient.gif'/></td>";
		html += "</tr>";
		html += "<tr>";
			html += "<td colspan='2' style='border-left:solid 1px #B7B7B7; border-right:solid 1px #B7B7B7; background-color:#FFFFFF;'>"+mainCalendar+'</td>';
			html += "<td width='2' style='background-image:url(/images/icons/dashboard/portletelements/right_gradient.gif)'><img height='100%' width='2' border='0' src='/images/icons/dashboard/portletelements/right_gradient.gif'/></td>";
		html += "</tr>";
		html += "<tr><td height='8' colspan='3'><table cellpadding='0' cellspacing='0' border='0' width='100%' height='9'><tr>"+
					"<td><div style='height:9; width:7'><img height='9' width='7' border='0' src='/images/icons/dashboard/portletelements/bottom_left.gif'/></div></td>"+
					"<td width='99%' valign='bottom' height='9'><div style='height:9'><img height='9' width='100%' border='0' src='/images/icons/dashboard/portletelements/lower_gradient.gif'/></div></td>"+
					"<td><div style='height:9; width:9'><img height='9' width='9' border='0' src='/images/icons/dashboard/portletelements/bottom_right.gif'/></div></td>"+
				"</tr></table></td></tr>";
	html += "</table>";

	calendarDom.innerHTML = html;
}
