var day;
var month;
var year;
var hour;
var minute;
var second;
var clock_set = 0;
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 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 initCalendar() {
	events = JSON.parse(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("oldCalendar");
    } else if (document.all) {
        cnt = document.all["oldCalendar"];
    }

    cnt.innerHTML = "";

    str = ""

    //heading table
    str += '<table class="calendar"><tr><th style="width:50%">';
    str += '<form method="NONE" onsubmit="return 0">';
    str += '<a href="javascript:month--; initCalendar();">&laquo;</a> ';
    str += '<select id="select_month" name="monthsel" onchange="month = parseInt(document.getElementById(\'select_month\').value); initCalendar();">';
    for (i =0; i < 12; i++) {
        if (i == month) selected = ' selected="selected"';
        else selected = '';
        str += '<option value="' + i + '" ' + selected + '>' + month_names[i] + '</option>';
    }
    str += '</select>';
    str += ' <a href="javascript:month++; initCalendar();">&raquo;</a>';
    str += '</form>';
    str += '</th><th style="width:50%">';
    str += '<form method="NONE" onsubmit="return 0">';
    str += '<a href="javascript:year--; initCalendar();">&laquo;</a> ';
    str += '<select id="select_year" name="yearsel" onchange="year = parseInt(document.getElementById(\'select_year\').value); initCalendar();">';
    for (i = year - 25; i < year + 25; i++) {
        if (i == year) selected = ' selected="selected"';
        else selected = '';
        str += '<option value="' + i + '" ' + selected + '>' + i + '</option>';
    }
    str += '</select>';
    str += ' <a href="javascript:year++; initCalendar();">&raquo;</a>';
    str += '</form>';
    str += '</th></tr></table>';

    str += '<table id="calendar"><tr>';
    for (i = 0; i < 7; i++) {
        str += "<th>" + day_names[i] + "</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;</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 = "";
        if (i == day && year == dt.getFullYear() && month == dt.getMonth())
		{
        	css_class += "today";
            style = ' class="selected"';
        }
        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 = "?event="+TheDaysEvents[0].id;
        		break;
        	default:
				css_class += " event multi";
        		link = "?date=" + actVal;
        	break;
        }
        
        str += "<td class=\"" + css_class + "\">";
        if(link != "")
        {
        	str += "<a href=\"" + link + "\">" + i + "</a></td>";
        } else {
        	str += i;
		}        
        dayInWeek++;
    }
    for (i = dayInWeek; i < 7; i++) {
        str += "<td class='mt'>&nbsp;</td>";
    }

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

    cnt.innerHTML = str;

    // Should we handle time also?
}

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;
}