// Calendar display

var browse        = new Browser();
var courseEvents  = new Array();
var courseDetails = new Array();
var dispMonth;
var dispYear;
var earliestTm    = null;
var latestTm      = null;
var dayEvents     = new Array();

function fullDay(tm)
{
    return(new Date(tm.getFullYear(),tm.getMonth(),tm.getDate(),0,0,0,0));
}

function addDayEvent(eventId,courseTm)
{
    eventDate = fullDay(courseTm);
    if(dayEvents[eventDate] == undefined)
    {
       dayEvents[eventDate] = new Array();
    }
   
    dayEvents[eventDate].push(eventId);
}

function CourseEvent(eventId,rawEvent)
{
    var eventArray = rawEvent.split('\\');
    this.courseId  = eventArray[0];
    this.courseTm  = new Date(eventArray[1]);
    
    if(earliestTm == null || this.courseTm < earliestTm)
    {
        earliestTm = this.courseTm;
    }
    
    if(latestTm == null || this.courseTm > latestTm)
    {
        latestTm = this.courseTm;
    }
    
    addDayEvent(eventId, this.courseTm);
}

function CourseDetail(rawDetail)
{
    var detailArray = rawDetail.split('\\');
    this.duration   = detailArray[0];
    this.title      = detailArray[1];
    this.desc       = detailArray[2];
}

function convYr(yr)
{
    return(yr < 1000 ? yr + 1900 : yr);
}

function refreshCalendar()
{
    browse.setLayerBody('calDiv',calendar());
    var dispTm = new Date(dispYear, dispMonth, 1);
    
    if(earliestTm < dispTm)
    {
        browse.showLayer('prevBtn');
    }
    else
    {
        browse.hideLayer('prevBtn');
    }
    
    var nextMonth = dispMonth + 1;
    var nextYear  = dispYear;
    
    if(nextMonth > 11)
    {
        nextYear++;
        nextMonth = 0;
    }
    
    var nextTm = new Date(nextYear, nextMonth, 1);
    if(latestTm >= nextTm)
    {
        browse.showLayer('nextBtn');
    }
    else
    {
        browse.hideLayer('nextBtn');
    }
}

function prevMonth()
{
    dispMonth--;
    if(dispMonth < 0)
    {
        dispYear--;
        dispMonth = 11;
    }
    
    refreshCalendar();
}

function nextMonth()
{
    dispMonth++;
    if(dispMonth > 11)
    {
        dispYear++;
        dispMonth = 0;
    }
    
    refreshCalendar();
}

function addEvents(eventTm)
{
    var result = '';
    
    var eventDate = fullDay(eventTm);
    var eventList = dayEvents[eventDate];
    if(eventList != undefined)
    {
        for (var eventLoop = 0 ; eventLoop < eventList.length ; ++eventLoop)
        {
            var eventId  = eventList[eventLoop];
            var courseId = courseEvents[eventId].courseId;
            result += '<br><a href="javascript:emailRegister(';
            result += "'" + eventId + "'";
            result += ')" onmouseover="javascript:hover(';
            result += "'" + eventId + "'" + ')" onmouseout="return nd();">' + courseId + '</a>';
        }

    }
    
    return(result);
}

function calendar()
{
    var dayNames   = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    var monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    var result     = '<table border="2">'
    var firstDay   = new Date(dispYear, dispMonth, 1);
    var oneDay     = 86400000;
    var today      = fullDay(new Date());
           
    var nextMonth  = dispMonth + 1;
    var nextYear   = dispYear;
    if(nextMonth > 11)
    {
        nextMonth = 0;
        nextYear += 1;
    }

    var endDay   = new Date(nextYear, nextMonth, 1)
    var currDay  = new Date(firstDay.getTime() - (firstDay.getDay() * oneDay)); // backup to Sunday
    var week     = -1;
    var bgColor;

    result += '<tr><td colspan="7" align="center" bgcolor="navy"><font color="white"><b>Precision Solutions - <i>Connect!</i></b></font></td></tr>'
    result += '<tr><td colspan="7" bgcolor="white">';
    result += '<table border="0" width="100%">';
    result += '<tr><td width="30%" align="right"><span id="prevBtn"><a href="javascript:prevMonth()"><img src="images/arrow_lf.gif" border="0" alt="Previous Month"></a></span>&nbsp;</td>';
    result += '<td width="40%" align="center"><font color="navy" size="+1"><b>' + monthNames[firstDay.getMonth()] + ' ' + dispYear + '</b></font></td>';
    result += '<td width="30%" align="left"><span id="nextBtn"><a href="javascript:nextMonth()"><img src="images/arrow_rt.gif" border="0" alt="Next Month"></a></span></td></tr>';
    result += '</table>';
    result += '</td></tr>';

    result += '<tr>';
    for(weekDay = 0 ; weekDay < 7 ; ++weekDay)
    {
      result += '<td width="71" bgcolor="navy" align="center"><font color="white"></b>' + dayNames[weekDay] + '</b></font></td>';
    }
    result += '</tr>'
    while(currDay < endDay)
    {
       result += '<tr>';

        ++week;
       for(var weekDay = 0 ; weekDay < 7 ; ++weekDay)
       {
           var b4Month  = currDay < firstDay;
           var aftMonth = currDay >= endDay;
           var currDow  = currDay.getDay();

           if(b4Month || aftMonth)
           {
               bgColor="silver";
           }
           else if(currDow == 0 || currDow == 6)
           {
               bgColor="#dbf5df";
           }
           else if(currDay < today)
           {
               bgColor="#bbd5bf";
           }
           else
           {
               bgColor="white";
           }

           result += '<td class="coursetag" align="center" bgcolor="' + bgColor + '" height="71">';

           if(b4Month || aftMonth)
           {
              result += '&nbsp;';
           }
           else
           {
              result += currDay.getDate();
              result += addEvents(currDay);
           }

           result += '</td>';

           var origDay = currDay.getDay();
           do
           {
              currDay.setTime(currDay.getTime() + oneDay);
           }
           while(currDay.getDay() == origDay);
        }

        result += '</tr>';
    }

    result += '<tr><td colspan="7" bgcolor="navy" align="center">';
    result += '<a href="http://www.precisonline.com/forum/index.php?board=5.0"><font color="white"><b>Sign up to receive email notification of upcoming courses!</b></font></a>'
    result += '</td></tr>';
    result += '</table>';

    return(result);
}

function formatTm(tm)
{
    var hours       = tm.getHours();
    var mins        = tm.getMinutes();
    var ampm;
    var tzName;
    
    if(hours > 11)
    {
        ampm = 'pm';
        if(hours > 12)
           hours -= 12;
    }
    else
    {
        ampm = 'am';
    }
    
    hours = '0' + hours;
    hours = hours.substr(hours.length - 2);
    mins  = '0' + mins;
    mins  = mins.substr(mins.length - 2);
    
    if(browse.getName() == 'DOM2')
    {
        var timeArray  = tm.toString().split('(')[1].split(')');
        tzName = timeArray[0];
    }
    else if(browse.getName() == "Opera")
    {
        var timeArray = tm.toString().split(' ');
        tzName = timeArray[timeArray.length - 1];
    }
    else
    {
        var timeArray = tm.toString().split(' ');
        tzName = timeArray[timeArray.length - 2];
    }
    
    var result = hours + ':' + mins + ampm + ' ' + tzName;
    return(result);
}

function hover(eventId)
{
    var courseId       = courseEvents[eventId].courseId;
    var courseTm       = courseEvents[eventId].courseTm;
    var courseDuration = courseDetails[courseId].duration;
    var courseTitle    = courseDetails[courseId].title;
    var courseDesc     = courseDetails[courseId].desc;
    
    var timeColor      = 'yellow';
    var strikeOut      = false;
    
    var now            = new Date();
    if(courseTm < now)
    {
        timeColor = 'red';
        strikeOut = true;
    }

    var timeLine;
    timeLine  = '<font color="' + timeColor + '" size="+1">';
    timeLine += (strikeOut ? '<strike>' : '');
    timeLine += formatTm(courseTm) + ' (' + courseDuration + ' minutes)';
    timeLine += (strikeOut ? '</strike>' : '');
    timeLine += '</font>';
    
    var topLine         = (strikeOut ? '' : '<font color="yellow">Click to register for </font>') + courseId + ': ' + courseTitle + '<br>' + timeLine;
    return overlib(courseDesc, CAPTION, topLine, WIDTH, 430, VAUTO);
}

function setupCalendar()
{
    var currDate = new Date();
    dispMonth    = currDate.getMonth();
    dispYear     = convYr(currDate.getYear());

    for(var eventLoop = 0 ; eventLoop < event_info.length ; ++eventLoop)
    {
        courseEvents[eventLoop] = new CourseEvent(eventLoop,event_info[eventLoop]);
    }

    for(var courseId in course_info)
    {
        courseDetails[courseId] = new CourseDetail(course_info[courseId]);
    }

    refreshCalendar();
}

function emailRegister(eventId)
{
    var courseId    = courseEvents[eventId].courseId;
    var courseTm    = courseEvents[eventId].courseTm;
    var courseTitle = courseDetails[courseId].title;
    
    if(courseTm > new Date())
    {
        var url = 'mailto:Connect@PrecisOnline.com?subject=Register: ' + courseId + ': ' + courseTitle + ' : ' + courseTm;
        window.open(url);
    }
    else
    {
        alert("Registration for this course at this time is not available. Course time has passed.");
    }
}