var calendar = 'undefined';
var 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(arg)
{
    arg = parseMSJSONStringRepresentationOfDateTime(arg);
    processServerData(arg);
          
    if(calendar == 'undefined')
    {
        calendar = $('.event-calendar').eventCalendar(data, 
                                                      "cal2", 
                                                      "tester2", 
                                                      new Date(), 
                                                      readLanguageFromUrl(window.location.href), 
                                                      refreshBindings);
                                                      
        calendar.juridicalCalendarPath = juridicalCalendarPath;
    }
    else
    {
        calendar.eventDates = data;
        renderCalendar(calendar);
    }
    
    enableTooltips()
}

function goToJuridicalCalendar()
{
    if(juridicalCalendarPath != '')
    {
        window.location.href = juridicalCalendarPath;
    }
}

function parseMSJSONStringRepresentationOfDateTime(data)
{
    var newdata = data.replace(new RegExp('"\\\\\/Date\\\((-?[0-9]+)\\\)\\\\\/"', "g"), "new Date($1)");
    newdata = eval('('+newdata+')');
    return newdata;
}

function onError(arg)
{
    // alert('Error:' + arg.responseText);
}

function processServerData(serverData)
{
    var currentDate;
    var currentText;
    data = new Array();
    var followUpNumber = 1;
    var i = 0;
    var juridicalItems = serverData.JuridicalItems;
    
    juridicalCalendarPath = serverData.JuridicalCalendarPath;

    while(i < juridicalItems.length)
    {
        currentEvent = new Object();
        
        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++;
        
        data.push(currentEvent);
    }
}

function getDataForPeriod(periodStartDate, periodEndDate)
{
    var filter = new Object();
    
    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),
        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);
}
