var calendar = 'undefined';
var g_data;
var juridicalCalendarPath;

function readLanguageFromUrl(url)
{
    var websiteConstant = 'website';
    var indexOfWebsiteInUrl = url.indexOf(websiteConstant);
    
    indexOfWebsiteInUrl += websiteConstant.length + 1;
    var urlSubString = url.substr(indexOfWebsiteInUrl);   
    indexOfNextSlash = urlSubString.indexOf('/') + 1;
    urlSubString = urlSubString.substr(indexOfNextSlash);
    indexOfNextSlash = urlSubString.indexOf('/');
    
    var language = urlSubString.substr(0, indexOfNextSlash);
    return language;
}

function onComplete(ajax_result) {
    var data = eval('(' + ajax_result + ')');
    processServerData(data);
          
    if (calendar === 'undefined') {
        calendar = $('.event-calendar').eventCalendar(g_data, "cal2", "tester2", new Date(),
                                                      readLanguageFromUrl(window.location.href),
                                                      refreshBindings);
        
        calendar.juridicalCalendarPath = juridicalCalendarPath;
    }
    else {
        calendar.eventDates = g_data;
        renderCalendar(calendar);
    }
    
    enableTooltips();
}

function goToJuridicalCalendar()
{
    if(juridicalCalendarPath != '')
    {
        window.location.href = juridicalCalendarPath;
    }
}

function onError(arg)
{
    // alert('Error:' + arg.responseText);
}

function processServerData(serverData)
{
    var currentDate;
    var currentText;
    g_data = [];
    var followUpNumber = 1;
    var i = 0;
    var juridicalItems = serverData.JuridicalItems;
    
    juridicalCalendarPath = serverData.JuridicalCalendarPath;

    while(i < juridicalItems.length)
    {
        currentEvent = {};
        
        currentDate = convertDateToEventCalendarString(juridicalItems[i].Date);
        currentText = '';
        
        currentText = juridicalItems[i].Title;
        i++;
        
        while(i < juridicalItems.length &&
            convertDateToEventCalendarString(juridicalItems[i].Date) == currentDate)
        {
            currentText = currentText + "<br />" + juridicalItems[i].Title;
            i++;
        }
        
        currentEvent.date = currentDate;
        currentEvent.followUp = followUpNumber;
        currentEvent.hoverText = currentText;
        followUpNumber++;
        
        g_data.push(currentEvent);
    }
}

function getDataForPeriod(periodStartDate, periodEndDate)
{
    var filter = {};
    
    filter.startDate = convertDateToString(periodStartDate);
    filter.endDate = convertDateToString(periodEndDate); 
    filter.url = location.href;
    filter.view = '';

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/website/ws/ContentService.asmx/GetJuridicalItemsForPeriod",
        data: JSON.stringify(filter),
        traditional: true,
        success: onComplete,
        error: onError
      });
}

$(function()
{
    var firstDayOfCurrentMonth = new Date();
    firstDayOfCurrentMonth.setDate(1);
    var firstDayOfNextMonth = new Date();
    firstDayOfNextMonth.setDate(1);
    firstDayOfNextMonth.setMonth(firstDayOfNextMonth.getMonth() + 1);
    
    getDataForPeriod(firstDayOfCurrentMonth, firstDayOfNextMonth);                                                                     
});

function convertDateToEventCalendarString(date)
{
    return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate();
}

function convertDateToString(date)
{
    return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}

function refreshBindings()
{   
    var startDatePeriod = new Date(calendar.calendarDate.getFullYear(),
                                   calendar.calendarDate.getMonth(),
                                   1);
    var endDatePeriod = new Date(calendar.calendarDate.getFullYear(),
                                 calendar.calendarDate.getMonth() + 1,
                                 1);
    
    getDataForPeriod(startDatePeriod, endDatePeriod);
}
