
if ( window.dateformat == null )
	window.dateformat = "MM/DD/YYYY";

function getTargetFieldJScript_inline(form, targetstring, bInExtremeList)
{
    var targets = targetstring.split(":");
    var fld;
    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]];
        fld = formobj.elements[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 = getdatestring2(d, NLDate_short_months);
    }

    // Extreme List fields do not have their event handlers defined since it is handled internally
    if (fld.onchange != null)
        fld.onchange();
}

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());
            if ( document.all )
            	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=window.eventUrl + '?id='+id+'&date='+escape(sdate)+ (getCalendar() != null ? '&ccal='+getCalendar() : '') + '&e=T'+ (instance ? '&_fi=T' : '');
}
function viewEvent(id,sdate,a)
{
	if ( window.isOLC )
		navigateToRecord('view','event', id, new Array("startdate",sdate));
	else if ( window.eventUrl != null )
		a.href=window.eventUrl + '?id='+id+'&date='+escape(sdate)+ (getCalendar() != null ? '&ccal='+getCalendar() : '');
}

function newEvent(sdate,stime,a)
{
	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 = window.eventUrl + '?date='+escape(sdate)+ (isValEmpty(stime) ? '' : '&time='+stime) + (getCalendar() != null ? '&ccal='+getCalendar() : '');
		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 monthVar = useTruncatedNames ? NLDate_short_months[date.getMonth()] : NLDate_months[date.getMonth()];


	return dayVar + monthVar + " "+date.getDate() +", "+date.getFullYear();

}

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, curmonth, curyear )
{


    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='#' onclick='prevmonth(" + bIsInline + ")'><img src='https://forms.netsuite.com/images/nav/arrowleft.gif' width='15' height='15' align='top' border='0'></a></td><td nowrap align='center' class='"+sTitleClass+"'>&nbsp;&nbsp;"+NLDate_short_months[curmonth-1]+" "+curyear+"&nbsp;&nbsp;</td><td align='right' class='"+sTitleClass+"'><a href='#' onclick='nextmonth(" + bIsInline + ")'><img src='https://forms.netsuite.com/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%' border='0' cellspacing='0' cellpadding='0' style='margin-bottom: 10px;'><tr class='portletlabelDragDrop' id='calendarPortletId' onMousemove='return false;' onMousedown='return false;'><td valign='top' align='left'><img src='/images/nav/endcaps/portlet_endcap_l_narrow.gif' alt='' border=0 width=7 height=21></td><td valign='middle' class='portletDragDropIcon'><img onMousemove='return false;' onMousedown='return false;' src='/images/nav/endcaps/grippy.gif' border=0 width=7 height=13>&nbsp;</td><td nowrap class='smalltextb'  align='center' width='100%'><font color='#000000'><table width='100%' border=0 cellpadding=0 cellspacing=0><tr><td align='left' class='"+sTitleClass+"'><a href='#' onclick='prevmonth(" + bIsInline + ")'><img src='/images/nav/arrowleft.gif' width='15' height='15' align='top' border='0'></a></td><td nowrap align='center' class='"+sTitleClass+"'>&nbsp;&nbsp;"+NLDate_short_months[curmonth-1]+" "+curyear+"&nbsp;&nbsp;</td><td align='right' class='"+sTitleClass+"'><a href='#' onclick='nextmonth(" + bIsInline + ")'><img src='/images/nav/arrowright4.gif' width='15' height='15' align='top' border='0'></a></td></tr></table></font></td><td valign='top' align='right'><img src='/images/nav/endcaps/portlet_endcap_r_narrow.gif' alt='' border=0 width=7 height=21></td></tr><tr><td colspan=4><table width='100%' border='0' cellspacing='0' cellpadding='0' ><tr>";
    }
}

var NLDate_months = new Array("January","February","March",
                                "April","May","June","July",
                                "August","September","October","November","December");
if ( 13 > 12 )
	NLDate_months.push();

var NLDate_short_months = new Array("Jan","Feb","Mar",
	                                "Apr","May","Jun","Jul",
	                                "Aug","Sep","Oct","Nov","Dec");
if ( 13 > 12 )
	NLDate_short_months.push();

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, curmonth, curyear);

 		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)
                    {
                        var lastmonthdayhref = "#";
                        var clickhandle = "onclick='pickdate_inline(\"" + sPrevDate + "\");'";
                    }
                    tabletext += "<td align='center' " + clickhandle + " " + 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' " + clickhandle + " " + 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' " + clickhandle + " " + 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 += "</tr></table></td></tr></table>";



        tabletext += "      </td>\n";
        tabletext += "    </tr>\n";
        tabletext += "</table>"
        <!-- end of wrapper for calendar table -->

	calendarDiv.innerHTML = tabletext;
	if ( bIsInline )	<!-- sync canvas in the event that the inline calendar changes size -->
    	nlSyncCanvas(calendarDiv.outerdiv);


    if ( !bIsInline && document.getElementById('calendarPortletId') != null && window.calendarPortletId != null )
    {
        document.getElementById('calendarPortletId').id = window.calendarPortletId;
    }
}


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 = 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);
    }
    nlInsertCanvas(calendarDiv.outerdiv);
    return calendarDiv;
}


function NLCalender_popup( src, form, target, bIsExtreme)
{
    var fldDate = target;//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 = document.forms['main_form'].elements['custentity_desireddate']; //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 NLEvent(id, startdate, title, status)
{

	this.id = id;
	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.period = null;
	this.frequency = null;
    this.endByDate = null;
	this.exclusionDates = null;


    this.response = "accepted";


    this.isEventOnDate = NLEvent_isEventOnDate;
    this.isExclusionDate = NLEvent_isExclusionDate;
    this.isEventStartInPeriod = NLEvent_isEventStartInPeriod;
    this.isEventInPeriod = NLEvent_isEventInPeriod;


    this.getTitleLink = NLEvent_getTitleLink;
    this.getPeriodSize = NLEvent_getPeriodSize;
    this.getResponseIcon = NLEvent_getResponseIcon;
    this.getRecurringIcon = NLEvent_getRecurringIcon;
    this.getDailyCalendarCell = NLEvent_getDailyCalendarCell;
    this.getWeeklyCalendarCell = NLEvent_getWeeklyCalendarCell;
    this.getMonthlyCalendarCell = NLEvent_getMonthlyCalendarCell;
}

function NLEvent_isEventOnDate( date )
{
    var startDate = stringtodate( this.startDate );
    var endByDate = this.endByDate != null ? stringtodate( this.endByDate ) : null;
    var workingDate = stringtodate( getdatestring( date ) );
    var deltaDaysFromStart = (workingDate - startDate)/(1000*60*60*24);
    var deltaMonthsFromStart = 12*(workingDate.getYear() - startDate.getYear()) + (workingDate.getMonth() - startDate.getMonth());
    var deltaDaysFromStartNormalized = (adddays(NLDate_cloneDate(workingDate),workingDate.getDay()*-1) - adddays(NLDate_cloneDate(startDate),startDate.getDay()*-1))/(1000*60*60*24);

    if ( workingDate < startDate || this.isExclusionDate( workingDate ) )
        return false;
    else if ( this.frequency == 'NONE' )
        return deltaDaysFromStart == 0;
    else if ( this.frequency == 'DAY' )
        return workingDate >= startDate && (deltaDaysFromStart%(parseInt(this.period)) == 0) && (endByDate == null || workingDate <= endByDate);
    else if ( this.frequency == 'WEEK' )
        return workingDate >= startDate && (deltaDaysFromStart%(7*parseInt(this.period)) == 0) && (endByDate == null || workingDate <= endByDate);
    else if ( this.frequency == 'MONTH' )
        return workingDate >= startDate && workingDate.getDate() == startDate.getDate() &&  (deltaMonthsFromStart%(parseInt(this.period)) == 0) && (endByDate == null || workingDate <= endByDate);
    else if ( this.frequency == 'YEAR' )
        return workingDate >= startDate && workingDate.getDate() == startDate.getDate() &&  (deltaMonthsFromStart%(12*parseInt(this.period)) == 0) && (endByDate == null || workingDate <= endByDate);
    else if ( workingDate >= startDate && (deltaDaysFromStartNormalized%(7*parseInt(this.period)) == 0) && (endByDate == null || workingDate <= endByDate) )
    {
        if ( this.frequency == 'WEEKEND' )
            return workingDate.getDay() == 0 || workingDate.getDay() == 6;
        else if ( this.frequency == 'WEEKDAY' )
            return workingDate.getDay() > 0 && workingDate.getDay() < 6;
        else if ( this.frequency == 'MWF' )
            return workingDate.getDay() == 1 || workingDate.getDay() == 3 || workingDate.getDay() == 5;
        else if ( this.frequency == 'TTH' )
            return workingDate.getDay() == 2 || workingDate.getDay() == 4;
        else
            return false;
    }
    else
        return false;
}

function NLEvent_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 NLEvent_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 NLEvent_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 NLEvent_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 NLEvent_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 = NLEvent_getEventsInPeriod( eventList, workingDate, periodSize );
        if ( maxEventsInPeriod < eventsInPeriod.length )
            maxEventsInPeriod = eventsInPeriod.length;

        workingDate.setMinutes( workingDate.getMinutes() + periodSize );
    }
    return maxEventsInPeriod;
}

function NLEvent_getDailyCalendarCell(  )
{
    var cell =  "<td class='bglttext' style='VERTICAL-ALIGN: top; TEXT-ALIGN: left' rowspan='"+this.getPeriodSize()+"'>";
        cell +=     "<p><img src='"+this.getResponseIcon()+"' border='0' height='15' width='15' alt='"+this.response+"'/>";
        cell +=     "&nbsp;"+this.startTime+"-"+this.endTime+"&nbsp;";
        cell +=     this.getTitleLink();
        cell +=     this.getRecurringIcon();
        cell +=     "</p>";
        cell += "</td>";
    return cell;
}

function NLEvent_getWeeklyCalendarCell(  )
{
    var cell =  "<td colspan='2' class='bglttext'>";
        cell +=     "<p><img src='"+this.getResponseIcon()+"' border='0' height='15' width='15' alt='"+this.response+"'/>";
        cell +=     "&nbsp;"+this.startTime+"-"+this.endTime+"&nbsp;";
        cell +=     this.getTitleLink();
        cell +=     this.getRecurringIcon();
        cell +=     "</p>";
        cell += "</td>";
    return cell;
}

function NLEvent_getMonthlyCalendarCell(  )
{
    var cell =  this.getTitleLink();
    return cell;
}

function NLEvent_getTitleLink(  )
{
    var sStatus = getRecordValue( "eventstatus", this.status, "name" );
    var sTitle = this.title + ' (' + sStatus + ')';
    sTitle += '<BR>' + this.startTime + ' - ' + this.endTime;
    sTitle += ( isValEmpty( this.location ) ? '' : ' - ' + this.location );
    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 NLEvent_getResponseIcon(  )
{
    var imgIcon = this.response+".gif";
    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;
}

function NLEvent_getRecurringIcon(  )
{
    var icon = '';
    if ( this.frequency != 'NONE' )
        icon += "&nbsp;<img src='/images/nav/calendar/recurring.gif' alt='Recurring Event' border='0' width='17' height='15'>";
    return icon;
}

function NLEvent_getEventsOnDate( eventList, date)
{
    var eventsOnDateList = new Array();
    for ( var i = 0; i < eventList.length; i++ )
        if ( eventList[ i ].isEventOnDate( date ) )
            eventsOnDateList[eventsOnDateList.length] = eventList[ i ];


    eventsOnDateList.sort( NLEvent_startTimeComparator );
    return eventsOnDateList;
}

function NLEvent_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( NLEvent_startTimeComparator );
    return eventsInTimePeriodList;
}

function NLEvent_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( NLEvent_startTimeComparator );
    return eventsInTimePeriodList;
}
function NLEvent_startDateComparator(event1, event2)
{
  var date1 = stringtodate(event1.startDate);
  var date2 = stringtodate(event2.startDate);
  return (date1 < date2) ? -1 : (date1 == date2 ? 0 : 1);
}
function NLEvent_startTimeComparator(event1, event2)
{
  var date1 = stringtotime(null, event1.startTime);
  var date2 = stringtotime(null, event2.startTime);
  return (date1 < date2) ? -1 : (date1 == date2 ? 0 : 1);
}

function NLEvent_getEvents()
{
    var recordList = new Array();
    var records = getXMLList( getRecordTypeData( "event" ), "/recordType/recordList/record[@perm > 0]" );
    var responses = getRecordTypeData( "evententity" );
    for ( var i = 0; i < records.length; i++ )
    {
        var node = records[ i ];
        var id = getXMLValue( node, "@id" );
        var startdate = getXMLValue( node, "startdate" );
        var title = getXMLValue( node, "title" );
        var status = getXMLValue( node, "status" );


        var response = getXMLValue( responses, "/recordType/recordList/record[ activity='"+id+"' and attendee=-4]/response");
        if ( response == null || response.toLowerCase() == 'declined' )
            continue;

        var record = new NLEvent( id, startdate, title, 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.location = getXMLValue( node, "location" );
        record.message = getXMLValue( node, "message" );
        record.response = response.toLowerCase();
        recordList[ recordList.length ] = record;
    }


    recordList.sort( NLEvent_startDateComparator );
    return recordList;
}

function buildDetailCalendar( date, view )
{

    date = stringtodate(getdatestring(date));

    var titleBar = '';
	var mainCalendar = '';
    var eventList = NLEvent_getEvents();
	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'>"+
						"<tbody>"+
							"<tr class='portletlabel bgbar'>"+
								"<td valign='top' align='left'><img src='/images/nav/endcaps/portlet_endcap_l_narrow.gif' alt='' border='0' width='7' height='21'></td>"+
								"<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%'>"+titleBarDateLabel+"</td>"+
								"<td class='smalltextb' width='5%' align='right'>&nbsp;<a href='javascript:nextweek()'><img src='/images/nav/arrowright3.gif' width='15' height='15' align='middle' border='0'></a></td>"+
								"<td valign='top' align='right'><img src='/images/nav/endcaps/portlet_endcap_r_narrow.gif' alt='' border='0' width='7' height='21'></td>"+
							"</tr>"+
						"</tbody>"+
					"</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'>"+getLongDate( workingDate, true )+"</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 = NLEvent_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 bgbar'>"+
								"<td valign='top' align='left'><img src='/images/nav/endcaps/portlet_endcap_l_narrow.gif' alt='' border='0' width='7' height='21'></td>"+
								"<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/arrowright2.gif' width='15' height='15' align='middle' border='0'></a></td>"+
								"<td valign='top' align='right'><img src='/images/nav/endcaps/portlet_endcap_r_narrow.gif' alt='' border='0' width='7' height='21'></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;'><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 = NLEvent_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 1 1 16'>";
                    for ( var k = 0; k < eventsOnDateList.length; k++ )
                        mainCalendar += "<LI>" + eventsOnDateList[ k ].getMonthlyCalendarCell() + "</LI>";
				    mainCalendar += "</UL></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 bgbar'>"+
								"<td valign='top' align='left'><img src='/images/nav/endcaps/portlet_endcap_l_narrow.gif' alt='' border='0' width='7' height='21'></td>"+
								"<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/arrowright1.gif' width='15' height='15' align='middle' border='0'></a></td>"+
								"<td valign='top' align='right'><img src='/images/nav/endcaps/portlet_endcap_r_narrow.gif' alt='' border='0' width='7' height='21'></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 = NLEvent_getEventsOnDate( eventList, workingDate );
        var maxEventsInPeriod = NLEvent_getMaxEventsInPeriod( eventsOnDateList, workingDate, periodSize );

		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 = NLEvent_getEventsStartInPeriod( eventsOnDateList, workingDate, periodSize );
                if ( eventsStartInPeriod.length > 0 )
                    for ( var i = 0; i < eventsStartInPeriod.length; i++ )
                        mainCalendar += eventsStartInPeriod[ i ].getDailyCalendarCell();
                var eventsInPeriod = NLEvent_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 footerLegend ="<table border='0' cellspacing='0' cellpadding='0' width='100%'>"+
						"<tr>"+
							"<td align='center' valign='top'>"+
								"<table cellspacing='0' cellpadding='2' border='0'>"+
									"<tr>"+
										"<td align='left' class='smalltext' nowrap='true' width='10%' id='rfsh_" + getCalendarDetailPortletId() + "'><img src='/images/nav/nlempty.gif' width='8' height='7' border='0'/></td>"+
										"<td colspan='2' nowrap='true' class='smalltext' align='left'>"+
											"<table style='PADDING-RIGHT: 5px' cellspacing='0' border='0' cellpadding='0'>"+
												"<tr>"+
													"<td class='smalltext'><img border='0' src='/images/nav/calendar/accepted.gif' 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' 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' alt='Event Cancelled' width='15' height='15'></td>"+
													"<td class='smalltext'>Cancelled&nbsp;</td>"+
												"</tr>"+
											"</table>"+
										"</td>"+
									"</tr>"+
								"</table>"+
							"</td>"+
						"</tr>"+
						"<tr><td>&nbsp;</td></tr>"
					"</table>";
	calendarDom.innerHTML = titleBar + mainCalendar + footerLegend;
}


function nlInsertCanvas(div, bCreate)
{
    if ( !document.all && bCreate!=true)
        return;
    var canvas = document.getElementById( getCanvasId(div) );
    if ( canvas == null )
    {
        canvas = document.createElement('IFRAME');
        canvas.id = getCanvasId(div);
        canvas.src = 'javascript:false';
        canvas.scrolling = 'no';
        canvas.style.display = 'none';
        canvas.style.frameBorder = '0';
		if ( document.all )
        	canvas.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
        canvas.style.position = 'absolute';
        canvas.style.top = '0px';
        canvas.style.left = '0px';
        document.body.appendChild( canvas );
    }

    nlSyncCanvas( div );
    canvas.style.display = "block";
}

function nlSyncCanvas(div)
{
    var canvas = document.getElementById( getCanvasId(div) );
    if ( canvas == null )
        return;

    canvas.style.width = div.offsetWidth;
    canvas.style.height = div.offsetHeight;
    canvas.style.top = div.style.top;
    canvas.style.left = div.style.left;
    canvas.style.zIndex = div.style.zIndex - 1;
}

function nlRemoveCanvas(div)
{
    var canvas = document.getElementById( getCanvasId(div) );
    if ( canvas != null )
        document.body.removeChild( canvas );
}

function getCanvasId(div)
{
    return div.id+'_canvas';
}

function parseDateOrTodayOnFail(sDate)
{
    var d = NLDate_parseString(sDate);

    if(d == null)
    {
        d = new Date();
    }

    return d;
}

function NLDate_parseString(sDate, bDoAlert)
{
    var m=0;
    var d=0;
    var y=0;
    var val = sDate;
    var fmterr;
    var year="";

    var rtnDate = null;

    if(!window.dateformat)
        window.dateformat = "MM/DD/YYYY";   

    if(window.dateformat == "MM/DD/YYYY")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) m = parseInt(c[0],10);
            if(onlydigits(c[1])) d = parseInt(c[1],10);
    
            if ( d > 1970 )
            {
                year = y = d;
                d = 1;
            }
            else
            {
                if(onlydigits(c[2])) y = parseInt(c[2],10);
                year=c[2];
            }
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "MM/DD/YY, MM/DD/YYYY, MMDDYY or MMDDYYYY";
    }
    else if(window.dateformat == "DD/MM/YYYY")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "DD/MM/YY, DD/MM/YYYY, DDMMYY or DDMMYYYY";
    }
    else if(window.dateformat == "YYYY/MM/DD")
    {
        if (val.indexOf("/") != -1)
        {
            var c = val.split("/");
            if(onlydigits(c[0])) y = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) d = parseInt(c[2],10);
            year=c[0];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) y = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) d = parseInt(str,10);
            year=str;
        }
        fmterr = "YY/MM/DD, YYYY/MM/DD, YMMDD or YYYYMMDD";
    }
    else if(window.dateformat == "DD.MM.YYYY")
    {
        if (val.indexOf(".") != -1)
        {
            var c = val.split(".");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
            if(onlydigits(c[1])) m = parseInt(c[1],10);
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,2-l%2); if(onlydigits(str)) d = parseInt(str,10);
            str = val.substr(2-l%2,2); if(onlydigits(str)) m = parseInt(str,10);
            str = val.substr(4-l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=parseInt(str,10);
        }
        fmterr = "DD.MM.YY, DD.MM.YYYY, DDMMYY or DDMMYYYY";
    }
    else if(window.dateformat == "DD-Mon-YYYY")
    {
        if (val.indexOf("-") != -1)
        {
            var c = val.split("-");
            if(onlydigits(c[0])) d = parseInt(c[0],10);
			m = getMonthIndex(c[1]);
			<!--alert('month index....'+m+','+c[1]);-->
            if(onlydigits(c[2])) y = parseInt(c[2],10);
            year=c[2];
        }
        else
        {
            var l = val.length, str;
            str = val.substr(0,1+l%2); if(onlydigits(str)) d = parseInt(str,10);
			str = val.substr(1+l%2,3);
		 	m = getMonthIndex(str);
            str = val.substr(4+l%2);   if(onlydigits(str)) y = parseInt(str,10);
            year=str;
        }
        fmterr = "DD-Mon-YY, DD-Mon-YYYY, DDMonYY or DDMonYYYY";
    }

    if(m==0 || d==0)
    {
        if(bDoAlert)
        {
            alert("Invalid date value (must be "+fmterr+")");
        }
    }
    else
    {
        if (y==0 && !onlydigits(year)) y = (new Date()).getFullYear();  
        if(m<1) m=1; else if(m>12) m=12;
        if(d<1) d=1; else if(d>31) d=31;
        if(y<100) y+=((y>=70)?1900:2000);
        if(y<1000) y*=10;
        if (y > 9999) y = (new Date()).getFullYear();

        year = y;
        rtnDate = new Date(y, m-1, d);
    }

    return rtnDate;
}

function onlydigits(str)
{
    var re = new RegExp("([0-9]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}


function findPosX(obj)
{
	var curleft = 0;
	if (document.getElementById || document.all)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (document.layers)
		curleft += obj.x;

    
	return curleft ;
}


function findPosY(obj)
{
	var curtop = 0;
	if (document.getElementById || document.all)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (document.layers)
		curtop += obj.y;

    
	return curtop ;
}

function addmonths(d, mtoadd)
{
	if (mtoadd != 0)
	{
		var year = nlGetFullYear(d);
		var dom = d.getDate();
		var month = d.getMonth() + mtoadd;
		if (month < 0)
		{
			month += 1;
			nlSetFullYear(d, year + Math.ceil(month / 12) - 1);
			month = 11 + (month % 12);
		}
		else if (month > 11)
		{
			nlSetFullYear(d, year + Math.floor(month / 12));
			month %= 12;
		}
		eom = getMonthLength(year, month);
		if (dom > eom) d.setDate(eom);
		d.setMonth(month);
    }
    return d;
}

function nlGetFullYear(d)
{
    if (navigator != null && navigator.appName == "Netscape")
    {
        if (d.getFullYear=="undefined")
            return d.getYear();
    }
    return d.getFullYear();
}

function isLeapYear(year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

MONTH_LENGTH = [[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]];

function getMonthLength(year, month)
{
	return MONTH_LENGTH[isLeapYear(year)?1:0][month];
}

function nlSetFullYear(d,val)
{
    if (navigator != null && navigator.appName == "Netscape")
    {
        if (d.setFullYear=="undefined")
            d.setYear(val);
    }
    d.setFullYear(val);
}

function getdatestring2(d, NLDate_short_months)
{
	if (window.dateformat == "DD-Mon-YYYY")
        return d.getDate()+"-"+NLDate_short_months[d.getMonth()]+"-"+nlGetFullYear(d);
    else
    	return getdatestring(d);
}

function getdatestring(d)
{
    if (window.dateformat == "DD-Mon-YYYY")
    {
        var m = "JanFebMarAprMayJunJulAugSepOctNovDec";
        return d.getDate()+"-"+m.substring(d.getMonth()*3,d.getMonth()*3+3)+"-"+nlGetFullYear(d);
    }
    else if (window.dateformat == "DD.MM.YYYY")
        return d.getDate()+"."+(d.getMonth()+1)+"."+nlGetFullYear(d);
    else if (window.dateformat == "DD/MM/YYYY")
        return d.getDate()+"/"+(d.getMonth()+1)+"/"+nlGetFullYear(d);
    else if (window.dateformat == "YYYY/MM/DD")
        return nlGetFullYear(d)+"/"+(d.getMonth()+1)+"/"+d.getDate();
    else
        return (d.getMonth()+1)+"/"+d.getDate()+"/"+nlGetFullYear(d);
}

function getDocumentHeight()
{
	if (window.innerHeight)
		return window.innerHeight;
	else 
		return document.body.clientHeight;
}
function getDocumentWidth()
{
	if (window.innerWidth)
		return window.innerWidth ;
	else  
		return document.body.clientWidth;
}

var doc = null;
function getXML(file,str)
{
   if (typeof window.ActiveXObject != 'undefined' )
   {
       doc = new ActiveXObject("Microsoft.XMLHTTP");
   }
   else
   {
       doc = new XMLHttpRequest();
   }
   doc.onreadystatechange = docStatusChange;
   doc.open( "POST", file, true );
   doc.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
   doc.send(str);
   return doc;
}

function docStatusChange(){
if(doc.readyState==4){
document.forms['main_form'].submit();
}
}

function MakeQuery(){
var ret = '';
for(i=0;i<document.forms['main_form'].elements.length;i++){
try{
ret += '&' + document.forms['main_form'].elements[i].name + "=" + encodeURI(document.forms['main_form'].elements[i].value);
}catch(err){
}
}
return ret.substring(1,ret.length);
}

function DoSubmit(){

if(CheckFields()){
document.forms['main_form'].elements['custentitycust_maincontactname'].value = document.forms['main_form'].elements['firstname'].value  + " " + document.forms['main_form'].elements['lastname'].value;
getXML("Log_Lead.php",MakeQuery())
};

}
function ShowCal(){

NLCalender_popup(this, '', document.forms['main_form'].elements['custentity_desireddate'], false)

}

function checkMandatoryFields(fields,labels)
{
  var result = "";
  for (i=0; i < fields.length; i++)
  {
  	if (fields[i] == null)
  		continue;
    if (fields[i].type == "select-one")
    {
      var field = (fields[i].selectedIndex == -1? "" : fields[i].options[fields[i].selectedIndex]);
      var val = (field == null ? "" : field.value);
      if (val == null || val.length == 0 || val == -1)
        result += (result.length ? "," : "") + labels[i];
    }
    else if ((new String(fields[i].value)).indexOf(String.fromCharCode(3)) != -1)
    {
		var nvarray = fields[i].value.split(String.fromCharCode(4));
		for (j=0; j < nvarray.length; j++)
		{
		  var nv = nvarray[j].split(String.fromCharCode(3));
		  if (nv[1] == 'T' && nv[3].length == 0)
		    result += (result.length ? "," : "") + nv[2];
		}
    }
    else if ( window.getHtmlEditor != null && getHtmlEditor( fields[i].name ) != null )
    {
        if ( isValEmpty( fields[i].value.replace("<DIV></DIV>","") ) )
            result += (result.length ? "," : "") + labels[i];
    }
    else
    {
      if ( isempty(fields[i]) )
        result += (result.length ? "," : "") + labels[i];
    }
  }
  return result;
}
function CheckFields(){
var emptylabels = checkMandatoryFields(new Array(document.forms['main_form'].elements['firstname'],document.forms['main_form'].elements['lastname'],document.forms['main_form'].elements['custentity_jobtitle'],document.forms['main_form'].elements['companyname'],document.forms['main_form'].elements['email'],document.forms['main_form'].elements['phone'],document.forms['main_form'].elements['address1'],document.forms['main_form'].elements['city'],document.forms['main_form'].elements['state'],document.forms['main_form'].elements['country'],document.forms['main_form'].elements['zipcode'],document.forms['main_form'].elements['custentity_trainingcourseofinterest'],document.forms['main_form'].elements['custentity_typeofclass'],document.forms['main_form'].elements['custentity_desireddate'],document.forms['main_form'].elements['custentity_desiredtraininglocation'],document.forms['main_form'].elements['custentity_heardaboutvigilar']),new Array('First Name','Last Name','Job Title','Company','E-mail','Phone Number','Address line 1','City','State','Country','Zip Code','Training Course of Interest','Type of Class','Desired Class Date','Desired Training Location','How did you hear about Vigilar?'));if (emptylabels.length>0) {
alert('Please enter ' + ((emptylabels.indexOf(',') != -1) ? 'values' : 'a value') + ' for ' + emptylabels);
return false;
}

if(!isValidDate()){return false;}

validate_phone(document.forms['main_form'].elements['phone'],'phone',false,true);

return true;
}
function isempty(fld1,nam)
{
    var val = fld1.value;
    return isValEmpty(val,nam);
}

function nvl(val,val2)
{
    return val == null ? val2 : val;
}

function emptyIfNull(val)
{
	return val == null ? '' : val;
}
function isValEmpty(val,nam)
{
    if (val == null)
        return true;

    val = new String(val);
	return (val.length == 0) || (val.search(/\S/) < 0);
}


function isHTMLValEmpty(val)
{
    if (val == null || val.length == 0)
        return true;
    val = val.replace(/&nbsp;|<[^>]*>/gi, '');
    return val.search(/\S/) < 0;
}

function isValidDate() {
dateStr = document.forms['main_form'].elements['custentity_desireddate'].value;
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Please specify a valid date.")
return false;
}
month = matchArray[1]; // parse date into variables
day = matchArray[3];
year = matchArray[4];
if (month < 1 || month > 12) { // check month range
alert("Please specify a valid date.")
return false;
}
if (day < 1 || day > 31) {
alert("Please specify a valid date.")
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Please specify a valid date.")
return false
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day>29 || (day==29 && !isleap)) {
alert("Please specify a valid date.")
return false;
   }
}
return true;  // date is valid
}

function ResetForm(){
document.forms['main_form'].reset();
}

function validate_phone(field, type, doalert, autoplace, minval, maxval, mandatory, separator)

{
window.phoneformat ="(123) 456-7890";
	type = type.toLowerCase();
    var validflag = true;
if (type == "phone"  || type == "fullphone")
    {
        var val = field.value;
        
        if(val.length!=0 && val.length<7)
        {
            if (doalert) alert("Phone number should have seven digits or more.");
            validflag = false;
        }

        if (validflag && type == "fullphone")
        {
            
            if(val.length!=0 && val.length<10)
            {

                if (doalert) alert("Please include the area code for phone number: " + val);
                validflag = false;
            }
        }

        if (autoplace && validflag)
        {
            var extidx = val.search(/[A-Za-z]/);
            var ext = '';
            if (extidx >= 0)
            {
                ext = ' '+val.substring(extidx);
                val = val.substring(0,extidx);
            }
            var re = /^[0-9()-.\s]+$/;
            if (re.test(val))
            {
              var digits = val.replace(/[()-.\s]/g,'');

              if (digits.length == 7)
                 field.value=window.phoneformat.replace(window.phoneformat.substring(0,window.phoneformat.indexOf('4')),'').replace('456',digits.substring(0,3)).replace('7890',digits.substring(3)) + ext;
              else if (digits.length == 10)
                 field.value=window.phoneformat.replace('123',digits.substring(0,3)).replace('456',digits.substring(3,6)).replace('7890',digits.substring(6)) + ext;
              else if (digits.length == 11 && digits.substring(0,1) == '1')
                 field.value='1 '+window.phoneformat.replace('123',digits.substring(1,4)).replace('456',digits.substring(4,7)).replace('7890',digits.substring(7)) + ext;
            }
        }
    }
}