// BENAGO Calendar
// 
// COOLweby (c) 2010
// 
// Všechna práva vyhrazena.
// Jakékoli šíření, úprava či používání kódu je bez povolení autora ZAKÁZÁNO. 
// Jednáni v rozporu s těmito podmínkami může být a bude postihováno podle 
// platné mezinárodní a národní legislativy a smluv.


// NASTAVENÍ
var bn_calendar_xml = "/index.php/home/xmlcalendar/";      // cesta k xml souboru + mm/yyyy

// Funkční kód - NEMĚNIT!!!
var currentMonth = 0; var currentYear = 0; var bn_cal_elements_data = null; var months = new Array('Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); var days = new Array('Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne'); function bn_calendar_init() { currentMonth = new Date().getMonth(); currentYear = new Date().getFullYear(); var content; content = '<div id="nav">' + '<div id="l_arr" class="arr"></div>' + '<div id="monthTitle"></div>' + '<div id="r_arr" class="arr"></div>' + '</div>' + '<div id="calendar_data">' + '<table>' + '<thead> <tr>'; for (i=0; i<7; i++) { content += '<th>'+days[i]+'</th>'; } content += '</tr></thead>' + '<tbody>'; for (i=0; i<6; i++) { content +='<tr>'; for (j=0; j<7; j++) { content += '<td id="d'+i+'-'+j+'"></td>'; } content +='</tr>'; } content +='</tr></tbody></table></div>'; document.getElementById("bn_calendar").innerHTML = content; bn_cal_loadData(currentMonth, currentYear); document.getElementById("l_arr").onclick = prevMonth; document.getElementById("r_arr").onclick = nextMonth; } function createCalendarData(month, year) { var date = new Date(year, month); var numOfDays = daysInMonth(month,year); firstDay = date.getDay()-1>=0?date.getDay()-1:6; var d = 1; for (i=0; i<6; i++) { for (j=0; j<7; j++) { document.getElementById('d'+i+'-'+j).setAttribute("className",""); document.getElementById('d'+i+'-'+j).setAttribute("class",""); if (((i==0) && (j<firstDay)) || (d>numOfDays)) { document.getElementById('d'+i+'-'+j).innerHTML = ''; } else { document.getElementById('d'+i+'-'+j).innerHTML = d; if (bn_cal_elements_data[d]) { document.getElementById('d'+i+'-'+j).setAttribute("className","action"); document.getElementById('d'+i+'-'+j).setAttribute("class","action"); document.getElementById('d'+i+'-'+j).onmouseover = overAction; document.getElementById('d'+i+'-'+j).onmousemove = moveAction; document.getElementById('d'+i+'-'+j).onmouseout = outAction; } if (month == new Date().getMonth() && year == new Date().getFullYear() && d == new Date().getDate()) { document.getElementById('d'+i+'-'+j).setAttribute("className","current"); document.getElementById('d'+i+'-'+j).setAttribute("class","current"); } d++; } } } document.getElementById('monthTitle').innerHTML = months[month]+' '+year; } function daysInMonth(month,year) { if (month == 3 || month == 5 || month == 8 || month == 10) { return 30; } if (month == 1) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { return 29; } else { return 28; } } return 31; } function nextMonth(e) { if (currentMonth + 1 >= 12) { currentMonth = 0; currentYear++; } else { currentMonth++; } bn_cal_loadData(currentMonth, currentYear); } function prevMonth(e) { if (currentMonth - 1 < 0) { currentMonth = 11; currentYear--; } else { currentMonth--; } bn_cal_loadData(currentMonth, currentYear); } function bn_cal_loadData(month, year) { var xml_data = new XMLHttpRequest(); xml_data.onreadystatechange = bn_cal_dataReady; xml_data.open("GET", bn_calendar_xml+(month+1)+'/'+year); try { xml_data.send(); } catch (e) { document.getElementById("bn_calendar").innerHTML = e.message; } } function bn_cal_dataReady(cal_data_loaded) { if(this.readyState == 4 && this.status == 200) { if(this.responseXML != null) { bn_cal_dataLoaded(this.responseXML.documentElement.childNodes); } else throw ("Error! Recieved data is NULL!"); } else if (this.readyState == 4 && this.status != 200) { throw ("Error! Status: "+this.status); } } function bn_cal_dataLoaded(bn_cal_data) { bn_cal_elements_data = new Array(); for (i=0; i<bn_cal_data.length; i++) { if (!bn_cal_elements_data[bn_cal_data[i].childNodes[1].firstChild.nodeValue.split(".")[0]]) { bn_cal_elements_data[bn_cal_data[i].childNodes[1].firstChild.nodeValue.split(".")[0]] = new Array(new Array(bn_cal_data[i].childNodes[0].firstChild.nodeValue, bn_cal_data[i].childNodes[2].firstChild.nodeValue)); } else { bn_cal_elements_data[bn_cal_data[i].childNodes[1].firstChild.nodeValue.split(".")[0]][bn_cal_elements_data[bn_cal_data[i].childNodes[1].firstChild.nodeValue.split(".")[0]].length] = new Array(bn_cal_data[i].childNodes[0].firstChild.nodeValue, bn_cal_data[i].childNodes[2].firstChild.nodeValue); } } createCalendarData(currentMonth, currentYear); } function overAction(e) { var id = 0; if (e) { id = e.currentTarget.id; } else if (window.event) { id = window.event.srcElement.id || window.event.srcElement.parentElement.id; } else { throw ("Event wasn't recognized!"); } var index = document.getElementById(id).innerHTML; var content; for (i=0; i<bn_cal_elements_data[index].length ; i++) { var subc = '<div class="title">' + bn_cal_elements_data[index][i][0] + '</div>' + '<div class="place">' + bn_cal_elements_data[index][i][1] + '</div>'; content = content? content + subc : subc; } document.getElementById("bn_cal_float").innerHTML = content; document.getElementById("bn_cal_float").style.display = "block"; moveAction(e); } function outAction(e) { document.getElementById("bn_cal_float").style.display = "none"; } function moveAction(e) { var x = 0; var y = 0; if (e) { x = e.layerX; y = e.layerY; } else if (window.event) { x = window.event.x; y = window.event.y; } else { throw ("Event wasn't recognized!"); } document.getElementById("bn_cal_float").style.top = (parseInt(y)+10) + 'px'; document.getElementById("bn_cal_float").style.left = (parseInt(x)+10) + 'px'; }
