var speed = 200;

var day;
var month;
var year;
var hour;
var minute;
var second;
var clock_set = 0;
var month_names = new Array("January", "February", "March", 
"April", "May", "June", "July", "August", "September", 
"October", "November", "December");
//var month_names = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var day_names = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");

function GetMonthName(month)
{
        if (month > 11) {
            month = 0;
        }
        if (month < 0) {
            month = 11;
        }
	return month_names[month];
}

function formatNum2(i, valtype) {
    f = (i < 10 ? '0' : '') + i;
    if (valtype && valtype != '') {
        switch(valtype) {
            case 'month':
                f = (f > 12 ? 12 : f);
                break;

            case 'day':
                f = (f > 31 ? 31 : f);
                break;

            case 'hour':
                f = (f > 24 ? 24 : f);
                break;

            default:
            case 'second':
            case 'minute':
                f = (f > 59 ? 59 : f);
                break;
        }
    }

    return f;
}

/**
 * Formats number to four digits.
 *
 * @param   int number to format.
 */
function formatNum4(i) {
    return (i < 1000 ? i < 100 ? i < 10 ? '000' : '00' : '0' : '') + i;
}

function formatNum2(i) {
    return ( i < 10 ? '0' : '') + i;
}
function initCalendar() {
	events = json;
	if (!year && !month && !day) {
        /* Called for first time */
		dt      = new Date();
		year    = dt.getFullYear();
		month   = dt.getMonth();
		day     = dt.getDate();
    } else {
        /* Moving in calendar */
        if (month > 11) {
            month = 0;
            year++;
        }
        if (month < 0) {
            month = 11;
            year--;
        }
    }


    if (document.getElementById) {
        cnt = document.getElementById("eventsCalendar");
    } else if (document.all) {
        cnt = document.all["eventsCalendar"];
    }

    cnt.innerHTML = "";

    str = "";

    //heading table
    str += '<h2><a href="#">' + GetMonthName(month) + ' ' + year.toString() + ' Events</a></h2>';
	str += '<div class="h2extras"><a href="javascript:month--; initCalendar();">&laquo; ' + GetMonthName(month-1) + '</a>&nbsp;&nbsp;&nbsp;<a href="javascript:month++; initCalendar();">' + GetMonthName(month+1) + ' &raquo;</a></div>';
    str += '<table id="calendar" cellpadding="0" cellspacing="0" border="0">';
	str += '<tr>';
	str += '<th class="daySun">Sunday</th>';
	str += '<th class="dayMon">Monday</th>';
	str += '<th class="dayTue">Tuesday</th>';
	str += '<th class="dayWed">Wednesday</th>';
	str += '<th class="dayThu">Thursday</th>';
	str += '<th class="dayFri">Friday</th>';
	str += '<th class="daySat">Saturday</th>';
	str += '</tr>';

    var firstDay = new Date(year, month, 1).getDay();
    var lastDay = new Date(year, month + 1, 0).getDate();

    str += "<tr>";

    dayInWeek = 0;
    for (i = 0; i < firstDay; i++) {
        str += '<td class="mt">&nbsp;&nbsp;</td>';
        dayInWeek++;
    }
    for (i = 1; i <= lastDay; i++) {
        if (dayInWeek == 7) {
            str += "</tr><tr>";
            dayInWeek = 0;
        }

        dispmonth = 1 + month;

        
		actVal = formatNum4(year) + "-" + formatNum2(dispmonth, 'month') + "-" + formatNum2(i, 'day');
        var css_class = "";
        css_class = 'day';
        if(i<10)
        {
        	css_class += '0';
        }
        css_class += i;

        if (i == day && year == dt.getFullYear() && month == dt.getMonth())
		{
        	css_class += " today";
        }
        specialDay = 0;
        
        //if(i == 1)
        var TheDaysEvents = GetTheDaysEvents(year, month+1, i);
         
        var specialDay = TheDaysEvents; 
        //if (specialDay == 0){
        var link = "";
        switch(TheDaysEvents.length){
        	case 0: 
        		break;
			case 1:        	
				if(TheDaysEvents[0].type == 0){
					css_class += " event nmbc";
				} else {
					css_class += " event partner";
				}
        		link = "events.php?event="+TheDaysEvents[0].id;
        		title = TheDaysEvents[0].title;
        		summary = TheDaysEvents[0].summary;
        		break;
        	default:
        		count = TheDaysEvents.length;
				css_class += " event multi";
        		link = "events.php?date=" + actVal;
        		title = "x" + count + " Events";
        		summary = "multi";
        	break;
        }
        
        str += "<td class=\"" + css_class + "\">";
        if(TheDaysEvents.length > 0)
        {
			str += '<div class="details">';
			if(TheDaysEvents.length == 1){
				if(TheDaysEvents[0].type == 0){
					type = "nmbc";
				} else {
					type = "partner";
				}
				str += '<span class="overlay"><a href="' + link + '" class="' + type + '">' + summary + '</a></span>';
				str += '<a href="' + link + '">' + title + '</a>';
			} else {
					str += '<span class="overlay">';
				for(index=0; index<TheDaysEvents.length; index++)
				{
					TheEvent = TheDaysEvents[index];
					if(TheEvent.type == 0){
						type = "nmbc";
					} else {
						type = "partner";
					}
	        		link = "events.php?event="+TheEvent.id;
	        		title = TheEvent.title;
					str += '<a href="' + link + '" class="' + type + '">' + title + '</a>';
				}
					str += '</span>';
	        		count = TheDaysEvents.length;
        			title = "x" + count + " Events";
					str += '<a href="#">' + title + '</a>';
			}
			str += '</div>';
		}        
        dayInWeek++;
    }
    for (i = dayInWeek; i < 7; i++) {
        str += '<td class="mt">&nbsp;&nbsp;</td>';
    }

    str += "</tr></table>";

    cnt.innerHTML = str;

    // Should we handle time also?
    
    SetHandlers();
}

function GetTheDaysEvents(year, month, day)
{
	var theDate = Date.UTC(year, month-1, day);
	var TheDaysEvents = new Array();
	for(var id in events)
	{
		var event = events[id];
		var start = parse_date_string(event.date);
		var end = parse_date_string(event.date_end);
		if(theDate >= start && theDate <= end)
		{
			TheDaysEvents[TheDaysEvents.length] = event;
		}
	}
	return TheDaysEvents;
}

function parse_date_string(date_string)
{
	var year = date_string.substring(0,4);
	var month = date_string.substring(5,7);
	var day = date_string.substring(8,10);
	var date = Date.UTC(year, month-1, day);
	return date;
}

function SetHandlers()
{
	// *******************************************************
	$('#eventsCalendar table#calendar td.event').hover(
	function (e) {
		faderIn($(this).children().children('.overlay'));
		$(this).children().children('.overlay').css({left:(e.pageX - 20), top:e.pageY});
	}, 
	function () {
		faderOut($(this).children().children('.overlay'));	
	});
	
}

	// FADING FUNCTION
	// *****************************************************
	function faderIn(obj){
		// prevents FF 2 rendering issues
		if($.browser.mozilla && $.browser.version.substr(0,3) == "1.8") {
			obj.show();
		} else {
			obj.fadeIn(speed);
		}
	}
	function faderOut(obj){
		// prevents FF 2 rendering issues
		if($.browser.mozilla && $.browser.version.substr(0,3) == "1.8") {
			obj.hide();
		} else {
			obj.fadeOut(speed);
		}
	}
