var displayPopup  = false;
var selectedDates = new Object();
var selectedTimeUnix;

$(document).ready(function()
{
    var dateParam = null;
    try{
        dateParam = updateEventDate;
    }catch(err){
        dateParam = getURLParameter('d');
    }
	//var dateParam = (!updateEventDate)?getURLParameter('d'):updateEventDate;
	var date = new Date();
	if(dateParam) date.setTime(dateParam  * 1000 );
	var month = date.getMonth() + 1;
	var year  = date.getFullYear();
	
	$('#calendarHolder')
	.datePicker({
		inline:true,
		month: month,
		year:  year,
		showYearNavigation: false,
		selectMultiple:true,
		hoverClass: false,
		renderCallback:function($td, thisDate, month, year)
		{		
			if (thisDate.getMonth() != month) {
				$td.html("");
				$td.addClass('disabled');
				$td.removeClass('selected');
			}
		}
	})
	.bind(
		'dateSelected',
		function(e, selectedDate, $td)
		{	
			var strSelectedDate = selectedDate.asString();
			var key = 'k' +(selectedDate.getTime());
			var dataDate = selectedDates[key];		
			var selectableDate = ( dataDate )?true:false;
			
			if(displayPopup && selectableDate) {
				selectedTimeUnix = selectedDate.getTime()/1000;
				showPopup($td, dataDate);
	
				$td.addClass('selected');
				$('#calendarHolder').dpSetSelected(strSelectedDate, true);

			} else if(displayPopup) {
				hidePopup();
				$td.removeClass('selected');
				$('#calendarHolder').dpSetSelected(strSelectedDate, false);
			}
			
		}
	).bind(
		'dpMonthChanged',
		function(e, displayedMonth, displayedYear){
			if(displayPopup){
				getCalendar(displayedMonth + 1, displayedYear);
			}
		}
	);

	getCalendar(month, year);
});

function showPopup($td, data)
{
	var popup 		= $("div#popupCalendar");
	var position 	= $td.offset();
	var hWidth		= (popup.width() * .5) - 15;
	var hHeight		= popup.height();// * .5;

	//Populate
	populatePopup(popup, data);
	 
	popup.css('display','block');
	popup.css('top',  position.top  - hHeight);
	popup.css('left', position.left - hWidth);
}

function populatePopup(popup, data)
{
	var startDateArr = data.startDate.split(' ');
	var locationAndTime = '';
	if(data.location){
		locationAndTime  = data.location + ', ';
	}
	
	if (data.allDay == '0'){
		locationAndTime += startDateArr[1] + ' ' + startDateArr[2];
	} else {
		locationAndTime += 'All day';
	}
		
	popup.find('#popupContent h2').html(data.heading);
	popup.find('#popupContent h3').html(locationAndTime);

	//Update links
	//var timeEvent = (new Date(startDateArr[0]).getTime()) / 1000; 
	var baseURL = '/events/&d=' + selectedTimeUnix;
	
	popup.find('#moreInfo').attr('href', baseURL);
	popup.find('#moreEvents').attr('href', baseURL);
	
	//Hide more events
	if(data.moreEvents){
		popup.find('#moreEvents').show();
	} else {
		popup.find('#moreEvents').hide();
	}
}

function hidePopup()
{
	var popup 		= $("div#popupCalendar");
	popup.css('display','none');
}

function getCalendar(month, year)
{
	if (month == null || year == null) date = new Date();
	month 	= (month == null)?date.getMonth()+1:month;
	year 	= (year == null)?date.getFullYear():year;

	displayPopup  = false;
	selectedDates = new Object();
	 
	call('getCalendarByMonth', onCalendar, month, year); 
}

function onCalendar(data)
{
	//console.log(data);
	var numEvents = data.length;
	var oneDay	  = 1000*60*60*24; //One day on milliseconds

	for (var i=0; i < numEvents; i++) {
		var strStartDate	= data[i].startDate.split(' ')[0];
		var strEndDate	 	= data[i].endDate.split(' ')[0];
		var startDate		= Date.fromString(strStartDate);
        
        var todayMill       = new Date();
        todayMill           = todayMill.getTime();
		var startDateMill 	= startDate.getTime();
		var endDateMill 	= Date.fromString(strEndDate).getTime();
		var diffDays = (Math.ceil((endDateMill - startDateMill)) / oneDay) + 1;
		
        if(endDateMill >= todayMill){
            /*if(startDateMill < todayMill){
               startDate        = new Date(); 
               startDateMill 	= startDate.getTime();
            }*/        
            
            var diffDays = (Math.ceil((endDateMill - startDateMill)) / oneDay) + 1;
            for(var j=0; j < diffDays; j++ ){

            $('#calendarHolder').dpSetSelected(startDate.asString());
            var key = 'k' +(startDate.getTime());		
            var event = selectedDates[key];
                if (event){
                    event.moreEvents = true;
                } else {
                    data[i].moreEvents = false;
                    selectedDates[key] = $.extend({}, data[i]);
                }
                       	
                startDate.addDays(1);
            }
        }
        
	}
	
	displayPopup = true;
}