﻿var ohaCalendar = {
    cals: [0,1,2],
    popupTimer: 0,
    currentDay: new Date(),
    activeFilter: ''
};
    
function initialize() {
    
    document.getElementById("loadmessage").style.display = "block";
        
    $A($('filter').getElementsByTagName('LI')).each(function(element){
	    element.onclick = function() {
		    toggleFilter(this,$w(this.className));
		    return false;
	    }
    });
	
    $('clear-filter').onclick = function() {
	    clearFilters();
	    return false;
    }
    
    $A(ohaCalendar.cals).each(function(i){
	    var now = new Date();
	    ohaCalendar.cals[i] = new Calendar(0, new Date(now.getFullYear(), now.getMonth()+parseInt(i), now.getDate()), dateChangedFunc);
	    ohaCalendar.cals[i].id = i;
	    ohaCalendar.cals[i].weekNumbers = false;
	    ohaCalendar.cals[i].getDateStatus = dateStatusFunc;
	    ohaCalendar.cals[i].create($("month_"+i));
	    ohaCalendar.cals[i].show();	
    });
	
    loadWeekEvents(ohaCalendar.currentDay.getThisWeek(), ohaCalendar.currentDay);
    
     //Show Calendar
    document.getElementById("wrapper").style.display = "block";
    document.getElementById("loadmessage").style.display = "none";
}	

function loadWeekEvents(firstDay,selectedDay)
{   
    ohaCalendar.currentDay = firstDay;
    $('week-title').update("Week of " + firstDay.toLocaleDateString());
    $('week-events').update('');
    $('no-events').show();
    if(selectedDay) {
	    var s = selectedDay;
	    s.y = s.getFullYear();
	    s.m = s.getMonth();
	    s.d = s.getDate()
    }
    for(var h=0; h<7; h++) {
	    var d = firstDay;
	    if (h>0)
	        d.setDate(d.getDate()+1);
	    d.y = d.getFullYear();
	    d.m = d.getMonth();
	    d.d = d.getDate()
	    if(dateHasEvent(d.y,d.m,d.d)) {
		    var el = document.createElement("LI");
		    Element.extend(el);
		    var events = this.calendarData[parseInt(d.y)][parseInt(d.m)][parseInt(d.d)];
		    var isCurrentDay = (s) ? ((d.y==s.y&&d.m==s.m&&d.d==s.d) ? true : false) : false;					
		    if(events.length) {
			    var htmlStr = "";
			    var thisId = 'event_' + d.y+'-'+d.m+'-'+d.d;
			    var className = (isCurrentDay) ? 'selected' : ''; 
			    el.className = className;
			    htmlStr += '<h2>' + d.toLocaleDateString() + '</h2>';
			    htmlStr += '<ul class="list">';
			    for(var i in events) {
				    if(events[i].title) {
					    var styleStr = (events[i].type==ohaCalendar.activeFilter||ohaCalendar.activeFilter=='') ? '' : 'display: none;';
					    htmlStr += '<li class="event ' + events[i].type + '" style="' + styleStr + '">';
					    htmlStr += '<h3 onclick="Element.toggle(\'' + thisId + '_' + i + '\');"><img src="/Style Library/Images/' + events[i].type + '.gif" />' + events[i].title + '</h3>';
					    var styleStr = (isCurrentDay) ? '' : 'display: none;';
					    htmlStr += '<div class="details" id="' + thisId + '_' + i + '" style="' + styleStr + '">'
					    if(events[i].metadata) {
						    htmlStr += '<ul class="metadata">';
						    for(var j in events[i].metadata) {
							    htmlStr += '<li><strong>' + j.replace("_"," ") + '</strong> ' + events[i].metadata[j] + '</li>';
						    }
						    htmlStr += '</ul>';
					    }
					    if(events[i].docLink || events[i].registerLink) {
						    htmlStr += '<ul class="links">';
						    if(events[i].docLink) htmlStr += '<li class="doc"><a href="' + events[i].docLink + '">Documentation</a></li>';
						    if(events[i].registerLink) htmlStr += '<li class="register"><a href="' + events[i].registerLink + '">Register Now</a></li>';
						    htmlStr += '</ul>';
					    }
					    if(events[i].infoLink) htmlStr += '<a href="' + events[i].infoLink + '" class="info">View more information &raquo;</a>';
					    htmlStr += '</div>';
					    htmlStr += '</li>';
				    }
			    }
			    htmlStr += '</ul>';
			    el.update(htmlStr);
			    if(htmlStr!='') $('no-events').hide();
			    if(isCurrentDay) $('week-events').insert({top: el});
				    else $('week-events').insert({bottom: el});
		    }
	    }
    }
}

function dateHasEvent(year, month, day) 
{
    var y = this.calendarData[year];
    if (!y) return false;
    var m = y[month];
    if (!m) return false;
    for (var i in m) if (i==day) return true;
    return false;
}

function dateStatusFunc(date, y, m, d) 
{
    if (dateHasEvent(y, m, d))
	    return "event";
    else
	    return false; // other dates are enabled
	    // return true if you want to disable other dates
}

function dateChangedFunc(calendar) 
{
    if (calendar.dateClicked) {
	    var y = calendar.date.getFullYear();
	    var m = calendar.date.getMonth();
	    var d = calendar.date.getDate();
	    if(dateHasEvent(y,m,d)) loadWeekEvents(new Date(y,m,d).getThisWeek(),new Date(y,m,d));
    } else {
	    updateCalendars(calendar.id);
    }
}

function updateCalendars(id) 
{
    var y = ohaCalendar.cals[id].date.getFullYear();
    var m = ohaCalendar.cals[id].date.getMonth();
    var d = ohaCalendar.cals[id].date.getDate();
    for(var i in ohaCalendar.cals) {
	    if(ohaCalendar.cals[i].id != id) ohaCalendar.cals[i].setDate(new Date(y,m-(id-i),d));
    }
}

function showDayPopup(dateObj,el,e) 
{
    var d = dateObj;
    // Re-format day number "08" -> "8"
    if (d.d.substring(0,1) == "0")
        d.d = d.d.substring(1,d.d.length);

    // Re-format month number "03" - > "3"
    if (d.m.substring(0,1) == "0")
        d.m = d.m.substring(1,d.m.length);
		        
    clearTimeout(ohaCalendar.popupTimer);
    Element.hide('day-popup');
    $('day-events').update('');
    var htmlStr = "";
    var events = calendarData[parseInt(d.y)][parseInt(d.m)-1][parseInt(d.d)];
    if(events&&events.length) {
	    for(var i in events) {
		    if(events[i].title) {
			    htmlStr += '<div class="event ' + events[i].type + '">';
			    htmlStr += '<img src="/Style Library/Images/' + events[i].type + '-large.gif" />';
			    htmlStr += '<h3>' + events[i].title + '</h3>';
			    htmlStr += '</div>';
		    }
	    }
	    $('day-events').update(htmlStr);
	    var xOffset = (Prototype.Browser.IE) ? 5 : 21;
	    $('day-popup').style.left = (findPosX(el)+xOffset+19)+"px";
	    $('day-popup').style.top = (findPosY(el)-18)+"px";
	    Element.show('day-popup');
    }
}

function hideDayPopup() 
{
    ohaCalendar.popupTimer = setTimeout("Element.hide('day-popup')",200);			
}

function loadNextWeek(prev, next)
{
    var aPrev = document.getElementById(prev);
    var aNext = document.getElementById(next);
    
	var maxDate = ohaCalendar.currentDay.getThisWeek().add("day", 13);
    if (maxDate > Date.parse(endDate))
        aNext.style.display = 'none';
    else
        aNext.style.display = 'block';
    aPrev.style.display = 'block';
    
    ohaCalendar.currentDay.setDate(ohaCalendar.currentDay.getDate()+6);
    loadWeekEvents(ohaCalendar.currentDay.getThisWeek());
}

function loadPrevWeek(prev, next)
{
    var aPrev = document.getElementById(prev);
    var aNext = document.getElementById(next);

    var minDate = ohaCalendar.currentDay.getThisWeek().subtract("day", 8);
    if (minDate < Date.parse(startDate))
        aPrev.style.display = 'none';
    else
        aPrev.style.display = 'block';
        
    aNext.style.display = 'block';
        
    ohaCalendar.currentDay.setDate(ohaCalendar.currentDay.getDate()-8);
    loadWeekEvents(ohaCalendar.currentDay.getThisWeek());
}


function toggleFilter(filter,classNames)
{
    clearFilters();
    if(classNames.length==1) {
	    addFilter(classNames[0]);
		
	    filter.addClassName('selected');
    } else {
	    filter.removeClassName('selected');
    }
}

function addFilter(type)
{
    ohaCalendar.activeFilter = type;
    $A($$('#week-events li.event')).each(function(element){
	    if(!element.hasClassName(type)) Element.hide(element);
    });
}

function clearFilters()
{
    ohaCalendar.activeFilter = '';	
    $A($$('#week-events li.event')).each(function(element){
	    Element.extend(element);
	    Element.show(element);
    });
    $A($('filter').getElementsByTagName('LI')).each(function(element){
	    Element.extend(element);
	    element.removeClassName('selected');
    });
}