// ==UserScript==
// @name Campusnet Agenda Creator
// @namespace http://k-moeller.dk/
// @version 0.8
// @description Creating agenda from calender
// @match https://www.campusnet.iha.dk/cnnet/calendar/Default*
// @match https://www.campusnet.iha.dk/cnnet/calendar/default*
// @copyright 2012+, Kalle R. Moeller
// ==/UserScript==
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* <[email protected]> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return Kalle R. Møller
* ----------------------------------------------------------------------------
*/
function addMiscItems() {
$("#LeftMenuHeader").html('<img id="CollapseLeftMenuLinks" class="collapse" src="' + blue_down + '" width="10">'+$("#LeftMenuHeader").html());
}
function removedText() {
var number = 0;
for (id in agenda_data) {
if (agenda_data[id]['state'] == 'removed') {
number++;
}
}
return "("+number+" hidden)";
}
function createAgendaMenu() {
document.getElementById("LeftMenu").style.marginBottom="10px";
var agendahtml = '<div id="LeftAgendaHeader"><img id="CollapseLeftAgendaLinks" class="collapse" src="' + blue_down + '" width="10"> Agenda</div>';
agendahtml += '<div id="LeftAgendaLinks">';
agendahtml += '<div id="agenda_Removed" style="float: right;"><div class="agenda_removed"><a href="javascript:" id="toogle_removed">'+removedText()+'</a></div></div>';
agendahtml += '<div id="agenda_Mandag"><div class="agenda_day">Mandag</div></div>';
agendahtml += '<div id="agenda_Tirsdag"><div class="agenda_day">Tirsdag</div></div>';
agendahtml += '<div id="agenda_Onsdag"><div class="agenda_day">Onsdag</div></div>';
agendahtml += '<div id="agenda_Torsdag"><div class="agenda_day">Torsdag</div></div>';
agendahtml += '<div id="agenda_Fredag"><div class="agenda_day">Fredag</div></div>';
agendahtml += '<div id="agenda_Lørdag"><div class="agenda_day">Lørdag</div></div>';
agendahtml += '<div id="agenda_Søndag"><div class="agenda_day">Søndag</div></div>';
agendahtml += '</div>';
var agendanode = document.createElement("DIV");
agendanode.setAttribute("id","LeftAgenda");
agendanode.innerHTML = agendahtml;
var list = document.getElementById("maincontainer");
list.insertBefore(agendanode,list.childNodes[5]);
$('#LeftAgenda').css('float','left');
$('#LeftAgenda').css('width','235px');
$('#LeftAgendaHeader').css('background','url(/cnnet/Resources/IHA/Images/bg_nav_over.gif) left bottom repeat-x');
$('#LeftAgendaHeader').css('font-size','13px');
$('#LeftAgendaHeader').css('color','#fff');
$('#LeftAgendaHeader').css('font-weight','bold');
$('#LeftAgendaHeader').css('border','1px solid #bfbfbf');
$('#LeftAgendaHeader').css('border-bottom','0');
$('#LeftAgendaHeader').css('padding','9px 15px 9px 15px');
$('#LeftAgendaLinks').css('border','1px solid #bfbfbf');
$('#LeftAgendaLinks').css('padding','9px 15px 9px 15px');
$('#LeftAgendaLinks').css('font-size','10px');
$('.agenda_day').css('padding-bottom','2px');
$('.agenda_day').css('border-bottom','thin solid #000');
}
function fetchTimeslotHtml(id) {
var raw_html = getDataFromId(id)[13];
if (raw_html == "") {
return raw_html;
}
var cleaned_html = raw_html.replace(/background-color:rgb\([\d]+,[\d]+,[\d]+\)/g,'');
cleaned_html = cleaned_html.replace(/color:rgb\([\d]+,[\d]+,[\d]+\)/g,'');
cleaned_html = cleaned_html.replace(/___(_)+/g,'');
return cleaned_html;
}
function saveAgendaData() {
var serialized_agenda_data = JSON.stringify( agenda_data );
localStorage.setItem('agenda_' + week, serialized_agenda_data);
}
function fetchAgendaData() {
var agenda_live = {};
var agenda_saved = {};
//Fetch new data
$( '[id^=AnchorID]' ).each(function( index ) {
var id = $( this ).attr('id').replace('AnchorID','');
agenda_live[id] = {};
agenda_live[id]['state'] = 'visible';
agenda_live[id]['data'] = fetchTimeslotHtml(id);
agenda_live[id]['day'] = getDataFromId(id)[1];
agenda_live[id]['time'] = getDataFromId(id)[5] + "" + getDataFromId(id)[6];
});
//Load saved data
var agenda_saved_serialized = localStorage.getItem('agenda_' + week);
//Nothing saved using live data
if (agenda_saved_serialized == null) {
agenda_data = agenda_live;
} else {
agenda_saved = JSON.parse(agenda_saved_serialized);
for ( var id in agenda_live ) {
//New events are just added
if (agenda_saved[id] == null) {
agenda_data[id] = agenda_live[id];
} else {
//If the data is different, use the new and thereby make it visible
if (agenda_live[id]['data'] != agenda_saved[id]['data']) {
agenda_data[id] = agenda_live[id];
} else {
agenda_data[id] = agenda_saved[id];
}
}
//Reset all times, incase the class has been moved
agenda_data[id]['time'] = agenda_live[id]['time'];
agenda_data[id]['day'] = agenda_live[id]['day'];
}
}
for (var id in agenda_data) {
if (agenda_data[id]['data'] == '' && agenda_data[id]['state'] != 'removed') {
agenda_data[id]['state'] = 'empty';
}
}
saveAgendaData();
}
function createTimeSlotIcons(id, state) {
var innerhtml = $('#Appointment' + id).html();
var icon = green_check;
if (state != 'empty') {
if (state == 'visible') {
icon = red_check;
}
innerhtml = '<img id="timeslot_check_' + id + '" class="timeslot_check" src="' + icon + '" width="14" style="float: right;">' + innerhtml;
}
innerhtml = '<img id="timeslot_remove_' + id + '" class="timeslot_remove" src="' + cross + '" width="14" style="float: right;">' + innerhtml;
$('#Appointment' + id).html(innerhtml);
}
function createAgendaNode(id, state) {
var agendanode = document.createElement("DIV");
agendanode.setAttribute("id","agenda_"+id);
agendanode.setAttribute("class","agenda_item time_" + agenda_data[id]['time']);
if (state == 'hidden' || state == 'removed') {
agendanode.setAttribute("style","display: none");
}
agendanode.innerHTML = '<input id="agenda_chkbox_' + id + '" class="agenda_check" type="checkbox" checked="checked">' + agenda_data[id]['data'];
var agenda_day = agenda_data[id]['day'];
var agenda_time = agenda_data[id]['time'];
var agenda_day_node = document.getElementById('agenda_'+agenda_day);
var node_infront = $("#agenda_" + agenda_day).children().filter(".agenda_item").filter(function(index) { return (this.getAttribute("class").replace('agenda_item time_','') > agenda_time); } )[0];
if (node_infront == undefined) {
agenda_day_node.appendChild(agendanode);
} else {
agenda_day_node.insertBefore(agendanode, node_infront);
}
}
function createAgendaNodes () {
for (var id in agenda_data) {
var state = agenda_data[id]['state'];
var previous_state = agenda_data[id]['previous_state']
if (state != 'empty') {
createAgendaNode(id, state);
}
createTimeSlotIcons(id, state);
changeTimeslot(id, state, previous_state);
createDummyTimeslot(id, state);
}
$('.agenda_item').css('border','none');
$('.agenda_item').css('padding','5px');
$('.agenda_item').css('background-color','#ffffff');
$('.agenda_check').css("float", "right");
}
function createDummyTimeslot(id, state) {
var timeslot = $("#Appointment"+id).parent();
var rowspan = timeslot.attr("rowspan");
var context_class = timeslot.parent().children().first().attr("class")
if (rowspan == undefined) {rowspan = 1} else {rowspan = parseInt(rowspan)};
var colspan = timeslot.attr("colspan");
if (colspan == undefined) {colspan = 1} else {colspan = parseInt(colspan)};
var display_style = '';
if (state != 'removed') {display_style = 'style="display: none;"';}
var table = '<td id="dummy_timeslot_'+id+'" rowspan="'+rowspan+'" colspan="'+colspan+'" '+display_style+'><table width="100%" border="0" cellspacing="0" cellpadding="0">';
for (var i=1; i <= rowspan; i++) {
table += '<tr>';
for (var j=1; j<= colspan; j++){
table += '<td class="' + context_class + '" style="text-align: right; vertical-align: top"> </td>'
}
table += '</tr>';
if (context_class == 'context_alternating') {context_class = 'context_direct';} else {context_class = 'context_alternating';}
}
table += '</table></td>';
timeslot.after(table);
if (state == 'removed') {
timeslot.hide();
}
}
function toogleRemoved() {
display_removed = !display_removed;
for (id in agenda_data) {
if (agenda_data[id]['state'] == 'removed') {
setAgendaState(id, agenda_data[id]['state']);
}
}
}
function setAgendaState(id, state) {
if (state == agenda_data[id]['state']) {
var previous_state = agenda_data[id]['previous_state'];
} else {
var previous_state = agenda_data[id]['state']
agenda_data[id]['previous_state'] = previous_state;
agenda_data[id]['state'] = state;
}
$("#toogle_removed").html(removedText());
saveAgendaData();
changeTimeslotCheck(id, state, previous_state);
changeTimeslot(id, state, previous_state);
changeCheckboxAgenda(id, state);
changeAgenda(id, state);
}
function changeAgenda(id, state) {
if (state == 'visible') {
$("#agenda_" + id).slideDown();
}
if (state == 'hidden' || state == 'removed') {
$("#agenda_" + id).slideUp();
}
}
function changeTimeslotCheck(id, state, previous_state) {
if(state == 'visible') {
$('#timeslot_check_' + id).attr("src",red_check);
}
if(state == 'hidden') {
$('#timeslot_check_' + id).attr("src",green_check);
}
if(state == 'removed') {
if(previous_state == 'visible') {
$('#timeslot_check_' + id).attr("src",red_check);
}
if(previous_state == 'hidden') {
$('#timeslot_check_' + id).attr("src",green_check);
}
}
}
function changeCheckboxAgenda(id, state) {
if (state == 'visible') {
$('#agenda_chkbox_' + id).attr("checked","checked");
}
if (state == 'hidden' || state == 'hidden') {
$('#agenda_chkbox_' + id).removeAttr("checked");
}
}
function fetchColorState(state) {
var color;
switch (state) {
case 'empty':
case 'hidden':
case 'removed':
color = 'rgba(169,245,169,0.5)';
break;
case 'highlight':
color = '#f7d358';
break;
case 'visible':
default:
color = '#dedede';
break;
}
return color;
}
function changeTimeslot(id, state, previous_state) {
var color = fetchColorState(state);
var previous_color = fetchColorState(previous_state);
var opacity = '1';
if (state == 'removed') {
if (display_removed) {
$("#dummy_timeslot_"+id).hide();
$('#Appointment' + id).parent().show();
color = previous_color;
opacity = '0.5';
} else {
$("#dummy_timeslot_"+id).show();
$('#Appointment' + id).parent().hide();
}
} else {
if (previous_state == 'removed') {
$("#dummy_timeslot_"+id).hide();
$('#Appointment' + id).parent().show();
}
}
$('#Appointment' + id).parent().css('background-color', color);
$('#Appointment' + id).parent().css('opacity', opacity);
}
function removeTimeslot(id) {
var timeslot = $("#Appointment"+id).parent();
var rowspan = timeslot.attr("rowspan");
var context_class = timeslot.parent().children().first().attr("class")
if (rowspan == undefined) {rowspan = 1} else {rowspan = parseInt(rowspan)};
var colspan = timeslot.attr("colspan");
if (colspan == undefined) {colspan = 1} else {colspan = parseInt(colspan)};
var table = '<td id="removed_td_'+id+'" rowspan="'+rowspan+'" colspan="'+colspan+'"><table width="100%" border="0" cellspacing="0" cellpadding="0">';
for (var i=1; i <= rowspan; i++) {
table += '<tr>';
for (var j=1; j<= colspan; j++){
table += '<td class="' + context_class + '" style="text-align: right; vertical-align: top"> </td>'
}
table += '</tr>';
if (context_class == 'context_alternating') {context_class = 'context_direct';} else {context_class = 'context_alternating';}
}
table += '</table></td>';
timeslot.after(table);
timeslot.hide();
}
function addFunctions() {
$(".collapse").click(function() {
var menu = $(this).attr('id');
menu = menu.replace("Collapse","");
menu_state = $('#'+menu).attr("class");
if (menu_state == undefined || menu_state == 'down') {
$(this).attr('src', blue_right);
$('#'+menu).slideUp();
$('#'+menu).attr("class","up");
} else {
$(this).attr('src', blue_down);
$('#'+menu).slideDown();
$('#'+menu).attr("class","down");
}
});
$(".agenda_item").hover(function(){
$(this).css("background-color","#dedede");
$(this).css('border','thin solid #000000');
$(this).css('padding','4px');
var id = $(this).attr('id').replace('agenda_','');
changeTimeslot(id,'highlight',agenda_data[id]['previous_state']);
},function(){
$(this).css("background-color","#ffffff");
$(this).css('border','none');
$(this).css('padding','5px');
var id = $(this).attr('id').replace('agenda_','');
changeTimeslot(id,agenda_data[id]['state'],agenda_data[id]['previous_state']);
});
$( ".agenda_check" ).click(function() {
var attr_id = $( this ).attr('id');
var id = attr_id.replace('agenda_chkbox_','');
setAgendaState(id,'hidden');
});
$( ".timeslot_check" ).click(function() {
var attr_id = $( this ).attr('id');
var id = attr_id.replace('timeslot_check_','');
if (agenda_data[id]['state'] == 'hidden') {
setAgendaState(id,'visible');
} else {
if (agenda_data[id]['state'] == 'visible') {
setAgendaState(id,'hidden');
} else {
if (agenda_data[id]['state'] == 'removed') {
if (agenda_data[id]['previous_state'] == 'visible') {
setAgendaState(id,'hidden');
} else {
setAgendaState(id,'visible');
}
} else {
setAgendaState(id,'visible');
}
}
}
});
$( ".timeslot_remove" ).click(function() {
var id = $( this ).attr('id');
id = id.replace('timeslot_remove_','');
if (agenda_data[id]['state'] == 'removed') {
setAgendaState(id,agenda_data[id]['previous_state']);
} else {
setAgendaState(id,'removed');
}
});
$("#toogle_removed").click(function() {
toogleRemoved();
});
}
//Getting mondays date from the calendar
var week = $("small")[0].innerHTML.replace(/[(\/)]/g,'');
//Agenda_data global settings etc
var agenda_data = {};
//Removed as default;
var display_removed = false;
var number_removed = 0;
//Different icons used
var red_check = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB0VBMVEUAAAD95+L+7+v6xrj3pJD1jHHzfF76zML0kXryd1v6ysD0hG3yc1j97er1koDyblX70Mnycl3xaVL6xb3xZFD6w7zxYE36zMfwW0r96unxYVPwV0f0fXPwUkT5vbjvTUHxX1bvSD/5ubbvRDzxY17uPznvS0X95+fuOzbvR0P829r////0hYL4qKbuNjPvQ0D82tr0goDzcnHtMTHuPj782dn0f3/vRkjtLC7uOTv82Nn7y8vtKCvwUFP+8vP4r7DuNTj82Nj+8vLsIyjwTFD4ra/tMTX819j71tfsHybwSU/4rK7tLTTwSE771dfrHCT6x8n4qq3sKjLvR03qHCTycXb3qq3rKjLuR03oHSXxcnf3q67pKzPsSE7qOUDnHSXwcnf4ubvtZGnlHSXvcnf98vLqSE7znaDkHiXuc3fpSE785OXjHibuc3joSE/nSE/hHibsc3jzrK7gHybmSU/jO0LfHyfrc3jlSVDyrK/dHyfqc3jjSVDlWF3cICfjSlDgPEL75OXcLjXaICfzurzZICjwrK/YISjWISjyur3YLzbVISn65OXfWV/UIinvra/YPkTSIinura/aTFHRIin55OXrn6LfaG3VP0XPIyr21tjks+dGAAAAAXRSTlMAQObYZgAAAAFiS0dEKyS55AgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHcSURBVBgZjcGJQwxxGAbgt0sppSQpSbIpPoVCYXPMFruOWcc4FhVlFMV2KIpKyVK6lA79tXZ+c+zcM88D2ElLgx/pGZlZu5iszIx0uMnO2W2Qkw0nuXl7LPJyYSe/YK+tgnxYFBbtc1BUCJPi/S6KYVBywFUJdEoPeiiFpqz8kIfyMqgqDnuqgKLyiA+VkFUd9aEKTPUxX6ohCdQ4Ox6oUQWQVFvn7MRJOlWnqgVQ3+Do9BkiOtugqAfQ2OTk3HmSXGiSNQJobnFw8RIxl1tkzQCCmtYrV4Mp164Tw7UGFQBCqjaOqD2kunGTGK4tpALCEcUtjpJuR2R3wsRwdyOaMPio4h4x96OSBzwx3MNoCg8IikckeywIwhOeGO6poAMgpnpGsuexFzwxXEdMD0Bnl+olyV7xxHAdXXqdALp7NK9JT3zTY9ANoLcv5S2liO/6jHoB9A/ovCeV+GHApB9J8UGdIZKJ8UGTOCTDI3pDJBE/jpgNgxkd0/tEROLnMbNRyMYnDL6Q+HXCYhyKySmD6W9TFpNQzcx+9zA7A83cDw9z0En8dJWAQeKXiwRM5hd+O1iYh8Xi0rKtpUXYWVn9Y7G6Aidr638N1tfgZmNza/sfs721uQE/dnZg5z+C05sfrM1B8gAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNC0wMy0wNFQyMzozOTowMyswMTowMOG4nrEAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMDMtMDRUMjM6Mzk6MDMrMDE6MDCQ5SYNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==";
var green_check = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABy1BMVEUAAADr89ff7MDW56/Q46Tt9dzX6LPO46Ls9NvS5qvN4qDX6bbL4Z7u9eDM4qHJ4Jzq89nH4Jnp89jF35fs9d7E3pXG35rC3ZPQ5q3A3ZHn8tW+3I/E4Jq9243m8dO72ovG4Z652om93JDG4Z+32Ye824/y+On////S57Tf7sm12IS62ozR57LL5Km014K52orx+OjQ5rG825Cy1oC32Yjs9eCw1n6/3pb6/ffi8M+12Ybx9+ev1Xy+3ZXh78602ITw9+e93ZXw9+at1Hq83JPg782y14L6/Per03jq9N6w1oC625Go0nXI46jf7syt1X7v9+a42o6m0HLH4qbe7sqs03vv9+W22Y2v1YGjz2/F4aXj8NPu9uW02Iq+3Zugzm3E4KP5/Pay14jV6b6ezGrC36Gw1oaby2fB36Cu1YSs1IGZymS/3p6r1IHY68WWyGK93Zyq0n+hznOUx1+83Jun0nzW6sKRxly625n4/PWm0Xur04OPxFmjz3icy26Tx2GMw1bb7MqJwlTS6L6HwFHR572Ev07Y68iKwlaCvkvw9+mfzXd/vEnP5rqNxF19u0bN5bmTx2Z6ukPv9ujE4ayiz32IwVh3uEDm8twCL2QEAAAAAXRSTlMAQObYZgAAAAFiS0dEJy0PqCMAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHOSURBVDjLpdVFd4QwGEDR1N3dvam7TL2l7u3U3d3d3d3l5zZAgCCBOad3xUfeggVJAFCwsrax5dhYWwFddvYOMvZ21NTRyVnFyVG7dXHV5KKRurl7ULi7KVtPLx2e8tbbR5c32fr6GfAlYv8AA/5SGxhkKFBog0MsEIzj0DALhPJteIRFwrk4MoouOkZ8jOTiWLq4eJggDmybmESVHA8hTBGmRBSnptGkZ0BWJh5TUZyVTZHDtzAXz1kozhPlmwqkIa+wiG9N+cIbFBcLSkwQlopTWTluK8RXADCVWJWJXavGUw1ua6sqRQxg6rB6frWaGxoY3DbWSRgAmrBmfhm2oOfWNty2NxHQN5sFHbjuNHd147bHTEJxb5+gH9cDg7gd6iP1onh4RDQKSWPjIzLDKJ6YlEyR7fSk3AT7c8wQZqV2bkaB++vmFwiLQru0oDDPxcsrpFW+XVtRWua3yvoGaZNttzaU1vEe3N6R2YV7+zsq28L2PjiUOTo+VDmQDo6TUwMnxIl0dm7gjDzsLi51XciP0atrHVfKA/rm9o7i9kZ99N8/PGp6uNe8VJ6eX1Sen6j31evbu8zbq+5N+PH59f3D+f76/ACW+P0F//YHXyCCmpC+9c4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTQtMDMtMDRUMjM6NDA6MTArMDE6MDDJ1Lr7AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTAzLTA0VDIzOjQwOjEwKzAxOjAwuIkCRwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=";
var cross = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABhlBMVEUAAADY9P3l+P6i5fps1vdEy/Uqw/Ov6PtQzfUowvOu6PpAyfQmwfLk9/1a0PUkwPK66/svw/Miv/Ks5/ogvvKr5voevfG46vscvPHj9/0nv/Iau/FRy/UXuvGo5fkVufAxwfITuPAivPE/xfOm5PkRt/AgvPHT8vz///9r0vY8xPMPtvAeu/Fp0fbi9v0Nte8cuvDT8fxo0fWV3vgLs+85wfJn0PVWyvQJsu9mz/Umu/EHse9kzvUFsO9jzvUDr+5izfTQ8PwBru5hzPQAre1gzPQArOxgy/MAq+sgte0AqupgyvJQw/AAqOlgyfGQ2fUAp+kwuO1gyPHg9PwApugQrOnQ7/swtuwApecQq+nQ7vtgx/Cg3fYApOYQqujQ7vpgxu8grugAouUQqOcwtOqg3PUAoeRAuOoAoOPg8/sQpeQAn+Kw4fYAnuGg2vMAnOAAm9+w4PUQoOAAmt5As+YAmd2g2fIgpeAAmNyg2PIwquIAltvg8vuQ0e9Qt+Ygot8AldrQ6/hrgUnlAAAAAXRSTlMAQObYZgAAAAFiS0dEKL2wtbIAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHWSURBVBgZjcEJIxtBGAbg11VKKVVVqiqIfARxxBF3XHFGRBBH3KpRTUuVUuc/b3ZnzexsNrt5HsBMVhYykZ2Tm/dKlZebkw0r+QWvJQX5SKew6E2KokKYKS55a6qkGClKy96lUVYKg/L3FsohqfhgqQI6lR9tVIKrqv5ko7oKL2o+26qBpvZLBmrB1DmE+gYH11DvEOqganQKTS5qdmqaydXkFBqhaHFzrS4ianOr2ojI1ermWpDU7uE6OknR5UnqIkVnh4drB9Dt5XqI6fV6e4np8XLdAPr6BR8xPh8xvn6hD8DAoM4QSYYGdQYADEtGSGdkWAJgVDZG3NioDPCPG0yQZmLcwA//pMEUaaYmDfzAtCxAXGBaBmBGEiCdwIwEwOyczjxJ5ud0ZgEsLApBYoJBYoKLwgKApRC3TEw4FAoTsxzilgCsRLjVNVKEI0lhUqytRrgVJK1HuY1NItqKqraIaHMjyq1DsR0TdnZpL6bZo92dmLAN1f6BcHh0wB0dHgj7YI6/ZuAYmpNvtk7wIn763cZpHNzZDxtn0En8tJSAJPHLQgIG5xe/07g4R4r45R9Tl3GYubr+m+L6Cunc3P6T3N7Ayt39w+OT6vHh/g6ZeH6Gmf/lMmbuKkHSOgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNC0wMy0wNFQyMzozNToyNiswMTowMOuZVuUAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMDMtMDRUMjM6MzU6MjYrMDE6MDCaxO5ZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==";
var blue_down = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAArCAMAAADWg4HyAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABa1BMVEUAAADY9P3l+P6v6fts1vdRzvUqw/PK8Pxr1fcowvPJ8Pxc0fUmwfLy+/6E3PgjwPJLy/Qhv/LW8/0twvMfvvIrwfIdvfFFyPQbu/Fj0PXH7vx92PcZuvFh0PX////F7vwXufHG7vxPyvQUuPDx+/7E7fsSt/BbzfUQtvDi9v0OtfCk4/kMtO9Wy/QKs+9m0PU2wPIHsu+j4vmT3fgmvPEFsO80v/JjzvXw+v4Dr+6h4flizfTQ8PwBru6Q3PhhzPQAre0gt+9gzPQArOxgy/MAq+swue4AqepgyfJgyfEAqOmg3vYAp+hgyPHg9PwApudgyPBQwe4ApOZgxu/A6PkAo+VAuesAouRgxe7A6PgAoeNgxO5wye8An+Jgw+3w+f0wsOcAnuEgquWAz/AQo+IAneDQ7fkQouEAnN8wreQAmt5wxuwAmd3A5vdAsuUAmNzA5fZQuOYAl9vg8vug2PJgvukwqeEAldrQ6/gYW+dEAAAAAXRSTlMAQObYZgAAAAFiS0dEHnIKICsAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHgSURBVBgZpcEJNxtRGAbg11ZKR5Wq/bPVrprQkJBhyFhiJ/ZtbKWqlFrq5/fON5PMvZPlOKfPA2SQl4dXyC8oLHrDigoL8pFDcclbRUkxsigte5emrBQZaOXvMyrX4KdVfMiiQoOqsupjVlWVkGnVn3Ko1uDRampldfX1dbWyGg0pDY2yJhKaGmUNSGpuUbSS0NqiaIarrV1Bts/tijY4OjpVxDpVHWBd3Spi3aou2Hp6fYj1+vRA6Ov3Idbv0wfhy4APsQGfrxACQRYYHAoEGbEg+zY0GAiyAIQQGyZhJGQjFrKNhInCwyEGIcJGyTYWEYhFhDGyjUYYgKjOxolN6LpOTNf1CWLjOosCUYNNholNGQYxw5giFp40WBRAzGGSw4wRi5nkMGMOCNMukxwmMZMc5rQLwsysa44cYZLMzbpmIMTnk+KUJj6fFIewsJiyRD5LiykLEJZXPKukWF3xLMO2tu5JkCSx7lkD29iUJCglsSnZgGNrW7JDrp1tyRZcu3uyfWL7e7JdJB0cyo6IyDo6lB0gxTo+kZ2enZ2eyI4teKzz7zmcW5BdXP7I6vICKuvqZxZXFvys618ZXVvI4Ob2d5rbG2Rxd/9HcX+HHB4en57/suenxwe8wssL/tc/LhMbjZvNFW8AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTQtMDMtMDRUMjM6MzI6MjcrMDE6MDCvMkYoAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTAzLTA0VDIzOjMyOjI3KzAxOjAw3m/+lAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=";
var blue_right = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABqlBMVEUAAADY9P3l+P6v6fts1vdRzvUqw/PK8Pxr1fcowvPJ8Pxc0fUmwfLy+/6E3PgjwPJLy/Qhv/LW8/0twvMfvvIrwfIdvfFIyfSr5vqd4vlFyPQbu/FGyPT///9x1fZ92PcZuvGp5fpw1PbF7vwXufGa4flu0/ZPyvQUuPAxwfLx+/5s0/bE7fsSt/Br0vZbzfUQtvBq0fbi9v0OtfBo0fZp0fak4/kMtO9n0PVWy/QKs+9m0PU2wPIHsu9kz/Vlz/UFsO9TyfTB7PtjzvUDr+5SyPPw+v4jufDQ8PwBru7A6/uA1/cAre2A1vYArOxQxvIgtu4Aq+tQxfHA6vpgy/Mwue4AqepgyfJgyfEAqOmg3vYAp+hgyPHg9PwApudgyPBQwe4ApOZgxu/A6PkAo+VAuesAouQwtOlgxe7A6PgAoeOQ1vNgxO5wye8An+Kg2/Rgw+3w+f0wsOcAnuFgw+wQo+IAneAwr+ag2vOQ1PIgqeTQ7fkQouEAnN8wreQAmt5wxuwAmd3A5vdAsuUAmNzA5fZQuOYAl9vg8vug2PJgvukwqeEAldrQ6/h48d93AAAAAXRSTlMAQObYZgAAAAFiS0dEHesDcZEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAHOSURBVBgZpcGLOxRRGAfgn1tEIxGKviiKyl0hS6nQKCkV1p11KYqaFV0IEbnkf7Znvtk9Z3bOeDyP9wXOLCEBp5GYlJxyzpaSnJSIk6SmnXdJS4Wf9IwLHhnp0DEyL2plGvAwsi75yDIQJzvnsq+cbLgYuXlS/pWr+XmqXAMKo6BQukYR1wtVBQakomLFDRJuFquKEFNSqrpFttulqhJElZWr7twl271yRRkcFZVuVcSqKhUVYNU1cWqJ1dZI1bDV1XvcJ/agXqqD0NDo1USsqTGmAcLDZo0AsUBzVABCS6vOI2KPWx0tENocT566kONZmwNCO+sgvc7n7QwRZhd7QT5edjETgNnNTPLxqpuZiOhhr0mv800Pg9DrePuOdN73OiD09esMEBvod/RBCA5qBIkFB6OCEIaGvUaIjQzHDEEYHfMYJzY+Jo3CNjEZJ0QsNClNgE1Nu4WIhaYVU3DMzKo+EPs4q5hB1Ny86hPZPs+r5hCzsKj4QsLXRdUCJCu8JIWJyPq2pApbUFjLK9L3Hz9/raiWLbisrv32tbaKONb6ho91Cx7W5h+tTQs6W9t/Pba34Gdn95/L7g5Osrd/cPjfdniwv4fTODrCmR0D8TZO0xu0Ls4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTQtMDMtMDVUMDA6MjQ6MzArMDE6MDCYY+5NAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTAzLTA1VDAwOjI0OjMwKzAxOjAw6T5W8QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=";
window.onload = function () {
fetchAgendaData();
createAgendaMenu();
createAgendaNodes();
addMiscItems();
addFunctions();
}