var calLastResForList = null;

function updateCalendar(calendarId) {
    Calendar.GetCalendarEntries(calendarId, lcid, updateCalendar_callback);
}

function dateSorter(x, y) {
    if (x > y) return 1;
    if (x < y) return -1;

    return 0; 
}

function updateCalendar_callback(res) {
    if (res.error != null)
        alert("There was an error in doing the update, error: "+ res.error.Message);
    else {
        if (res.value.length == 0) return;
        
        var dates = [];
        for (var i = 0; i < res.value.length; i++) {
            dates[i] = makeTripletFromDate(res.value[i].Date);
        }
        
        var cal = eval(radCalendarID);
        cal.UnselectDates(cal.GetSelectedDates());
        cal.SelectDates(dates, false);
        
        dates.sort(dateSorter);
        var today = new Date();
        for (var i = 0; i < dates.length; i++) {
            if (makeDateFromTriplet(dates[i]) >= today) {
                cal.MoveToDate(dates[i]);
                break;
            }
        }
        
        var calendarId = getCheckedValue(document.getElementsByName('calendarTypes'));
        Calendar.GetUniqueCalendarEntries(calendarId, lcid, updateEventList_callback);
    }
}

function updateEventList_callback(res) {
    if (res.error != null)
        alert("There was an error in populating the list, error: "+ res.error.Message);
    else {
        calLastResForList = res.value;
        populateList(0, 3);
    }
}

function calPager(base, count) {
    if ((base < 0) || ((calLastResForList.length - base) <= 0)) return;
    populateList(base, count);
}

function populateList(base, count) {
    var ul = document.getElementById('ulEventsList');
    removeChildrenFromNode(ul);
    
    var indexer = count;
    if (calLastResForList.length < (count + base)) indexer = (calLastResForList.length - base);
    for (var i = base; i < (indexer + base); i++) {                    
        var entry = calLastResForList[i];
        var li = document.createElement('li');
        var html = '';

        html += '<a href=/content'+ entry.FriendlyUrl +'>';
        html += '<span class="date">'+ entry.DateString +'</span>';
        html += '<h3>'+ entry.Title +'</h3>';
        html += entry.Description;
        html += '</a>';
        
        li.innerHTML = html;
        ul.appendChild(li);
    }
    
    document.getElementById('pageCounter').innerHTML = 'Side '+ Math.ceil(((base + 1) / count)) +' / '+ Math.ceil((calLastResForList.length / count));
    document.getElementById('calPagerFwd').onclick = function() { eval('calPager('+ (base + count) +', '+ count +')'); };
    document.getElementById('calPagerRwd').onclick = function() { eval('calPager('+ (base - count) +', '+ count +')'); };
}

function Calendar_OnDateClick(sender, e) {
    if (!e.RenderDay.IsSelected) return false;
            
    var calendarId = getCheckedValue(document.getElementsByName('calendarTypes'));
    var date = makeDateFromTriplet(e.RenderDay.Date);

	Calendar.GetCalendarEntriesByDate(date, calendarId, lcid, updateEventList_callback);
	return false;
}

function Calendar_OnColumnHeaderClick(sender, e) {
    return false;
}

function Calendar_OnRowHeaderClick(sender, e) {
    return false;
}

function removeChildrenFromNode(node) {
    if (node && node.hasChildNodes && node.removeChild) {
        while (node.hasChildNodes()) {
            node.removeChild(node.firstChild);
        }
    }
}

function getCheckedValue(buttonList) {
    for (var i = 0; i < buttonList.length; i++)
        if (buttonList[i].checked) return buttonList[i].value;
}

function makeTripletFromDate(d) {
    var s = d.getFullYear() +"/"+ (d.getMonth() + 1) +"/"+ d.getDate();

    return s.split('/');
}

function makeDateFromTriplet(t) {
    var date = new Date();
    date.setFullYear(t[0], (t[1]-1), t[2]); 
    
    return date;
}
