var calcms = (function($) { // define this var my = {}; // calcms base functions // event handlers are customized at herbstradio.org my.updateContainer = function updateContainer(id, url, onLoading, callback) { if (id == null) return; if ($("#" + id).length == 0) return; // if (onLoading)document.getElementById(id).innerHTML="lade ..."; $("#" + id).load(url, null, callback); } my.load = function load(url) { window.location.href = url; // $(window).load(url); // $('html').load(url); } my.postContainer = function postContainer(url, parameters, callback) { if (url != '') $.post(url, parameters, callback); } // get calcms setting my.get = function get(name) { if (calcms_settings[name] == null) return ''; return calcms_settings[name]; } // set calcms setting my.set = function set(name, value) { calcms_settings[name] = value; } // get select box value my.selectValue = function selectValue(element) { value = element.options[element.selectedIndex].value; return value; } my.selectFirstOption = function selectFirstOption(id) { if ($(id) && $(id).length > 0) $(id)[0].selectedIndex = 0; } my.contains = function contains(s, t) { if (s == false) return false; if (t == false) return false; return s.indexOf(t) != -1; } my.getJsName = function getJsName(s) { s = s.replace(/[^a-zA-Z\_0-9]/g, '_'); s = s.replace(/_+/g, '_'); return s; } my.isArchive = function isArchive() { if ($('#calcms_archive:checked').length == 0) return 0; return 1; } my.getSearchElement = function getSearchElement() { return $("#calcms_search input[name='search']"); } my.resetSearch = function resetSearch() { $("#calcms_search_field").val(''); } // set calcms_settings to parameters from URL my.evaluateParametersFromUrl = function evaluateParametersFromUrl() { var location = new String(window.location); if (!location.match(my.get("base_url"))) return; if (window.location.search != "") { var parameters = window.location.search.split("?")[1].split("&"); for (var i = 0; i < parameters.length; i++) { var pair = parameters[i]; var name_values = pair.split("="); if (name_values != null) { // alert(name_values[0]+"="+name_values[1]); // set(name_values[0],name_values[1]); var element = document.getElementById(name_values[0]); if (element != null) element.value = name_values[1]; } } } var sendung = /\/sendung\/(\d+)\//; sendung.exec(location); if (RegExp.$1 != null && RegExp.$1 != '') { // alert(RegExp.$1); set('event_id', RegExp.$1); set('last_event_id', my.get('event_id')); } else { var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\/(\d)\//; sendungen.exec(location); if (RegExp.$1 != '' && RegExp.$2 != '' && RegExp.$3 != '') { set('from_date', RegExp.$1); set('till_date', RegExp.$2); set('weekday', RegExp.$3); } else { var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//; sendungen.exec(location); if (RegExp.$1 != '' && RegExp.$2 != '') { set('from_date', RegExp.$1); set('till_date', RegExp.$2); } else { var sendungen = /\/sendungen\/(\d{4}\-\d{2}\-\d{2})\//; sendungen.exec(location); if (RegExp.$1 != '') { set('date', RegExp.$1); } } } var kalender = /\/kalender\/(\d{4}\-\d{2}\-\d{2})\/(\d{4}\-\d{2}\-\d{2})\//; kalender.exec(location); if (RegExp.$1 != '' && RegExp.$2 != '') { set('from_date', RegExp.$1); set('till_date', RegExp.$2); } else { var kalender = /\/kalender\/(\d{4}\-\d{2}\-\d{2})\//; kalender.exec(location); if (RegExp.$1 != '') { set('date', RegExp.$1); } } } } // return URL from calcms_settings // parameters can be overwritten by field and value // This handles main controller interaction logics my.setAndGetUrlParameters = function setAndGetUrlParameters(field, value) { // overwrite fields by field and value if (field != null && value != null && field != '') { // alert(target+" "+field+" "+value); set(field, value); } // read fields var debug = my.get('debug'); var from_date = my.get('from_date'); var till_date = my.get('till_date'); var date = my.get('date'); var month = my.get('month'); var weekday = my.get('weekday'); var time_of_day = ''; var time = ''; var program = my.get('program'); var series_name = my.get('series_name'); var category = my.get('category'); var tag = my.get('tag'); var search_field = my.get('search'); // delete filters by current action if ((field == 'search' && search_field != '') || (field == 'category' && category != '') || (field == 'series_name' && series_name != '') || (field == 'program' && program != '') || (field == 'tag') && tag != '') { weekday = ''; date = ''; from_date = ''; till_date = ''; } if (field == 'search') { category = ''; series_name = ''; program = ''; } if (field == 'category') { search_field = ''; series_name = ''; program = ''; } if (field == 'program') { search_field = ''; series_name = ''; category = ''; } if (field == 'series_name') { search_field = ''; program = ''; category = ''; } if (field == 'month') { if (month != '') { from_date = month; till_date = month.substring(0, month.length - 2) + "31"; } weekday = ''; date = ''; category = ''; program = ''; series_name = ''; tags = ''; search_field = ''; } if (field == 'week') { weekday = ''; date = ''; category = ''; program = ''; series_name = ''; tags = ''; search_field = ''; } if (field == 'weekday') { /* * if (month != ''){ from_date=month; * till_date=month.substring(0,month.length-2)+"31" ; } */ category = ''; program = ''; series_name = ''; tags = ''; search_field = ''; } if (field == 'date') { weekday = ''; from_date = ''; till_date = ''; category = ''; program = ''; series_name = ''; tags = ''; search_field = ''; } if (field == 'time') { if (time == 'null') { return } else { weekday = ''; time_of_day = ''; } } if (field == 'month' || field == 'week' || field == 'weekday' || field == 'time_of_day') { time = ''; } // build target URL var url = ''; if (field == 'month' || field == 'week') { if (from_date != '') url += '/' + from_date; if (till_date != '') url += '/' + till_date; } else if (weekday != '') { if (from_date != '') url += '/' + from_date; if (till_date != '') url += '/' + till_date; url += '/' + weekday; } else if (date != '') { if (date == 'today') { url += '/heute/'; } else { url += '/' + date; } } if (search_field != '') { url += "/suche/" + search_field; } if (category != null && category != '') { url += "/kategorie/" + category; } if (series_name != null && series_name != '') { url += "/sendereihe/" + series_name; } if (url.substr(url.length - 1, url.length) != '/') { url += '/'; } if (time_of_day != '') { url += "&time_of_day=" + time_of_day; } else if (time != '' && time != 'null') { url += "&" + time; } if (tag != null && tag != '') { url += "&tag=" + tag; } if (program != null && program != '') { url += "&program=" + program; } if (field == 'print') { url += "&print=1"; } if (debug != '') { url += '&debug=' + debug; } return url; } // show current project categories my.showProjectCategories = function showProjectCategories(project) { var projectJsName = calcms.getJsName(project); $('#calcmsCategoryForm select').each(function() { var id = $(this).attr('id'); if (id == "calcms_category_" + projectJsName) { if ($(this).css('display') == 'none') $(this).show(); } else { if ($(this).css('display') != 'none') $(this).hide(); } }); } // show current series categories my.showProjectSeriesNames = function showProjectSeriesNames(project) { var projectJsName = calcms.getJsName(project); $('#calcmsSeriesNamesForm select').each(function() { var id = $(this).attr('id'); if (id == "calcms_series_name_" + projectJsName) { if ($(this).css('display') == 'none') $(this).show(); } else { if ($(this).css('display') != 'none') $(this).hide(); } }); } // get current project my.getProject = function getProject() { var project = $('#calcms_project'); if (project.length == 0) return 'all'; return project.val(); } // remove projects from form without categories and series_names my.removeEmptyProjects = function removeEmptyProjects() { $('#calcms_project option').each( function() { var project = $(this).val(); var hasCategories = $('#calcms_category_' + calcms.getJsName(project)).length; var hasSeries = $('#calcms_series_name_' + calcms.getJsName(project)).length; if ((hasCategories == 0) && (hasSeries == 0)) { $(this).remove(); } }); } my.clearOnChangeArchive = function clearOnChangeArchive() { $('#calcms_archive').off(); } // register action on changing archive my.registerOnChangeArchive = function registerOnChangeArchive(action) { my.clearOnChangeArchive(); $('#calcms_archive').on('click', action); } // show all events for a given project my.showSearchResultsByProject = function showSearchResultsByProject( project, value, archive) { if (value != null && value != '') { var url = my.get('search_url'); if (project != '' && project != null) url += escape(project) + '/'; else url += 'all/'; if (value != '' && value != null) url += escape(value) + '/'; if (archive != null && archive == 0) url += 'kommende/'; if (archive != null && archive == 1) url += 'vergangene/'; my.updateContainer('calcms_list', url, 1); } } // show all events for a given category my.showEventsByCategory = function showEventsByCategory(value) { if (value != '' && value != null) { my.updateContainer('calcms_list', my.get('search_category_url') + escape(value) + '/', 1); } } // show all events for a given project and category my.showEventsByProjectAndCategory = function showEventsByProjectAndCategory( project, category, archive) { if (category != '' && category != null) { var url = my.get('search_category_url'); if (project != '' && project != null) url += escape(project) + '/'; if (category != '' && category != null) url += escape(category) + '/'; if (archive != null && archive == 0) url += 'kommende/'; if (archive != null && archive == 1) url += 'vergangene/'; my.updateContainer('calcms_list', url, 1); } } // show all events for a given project and series my.showEventsByProjectAndSeriesName = function showEventsByProjectAndSeriesName( project, seriesName, archive) { if (seriesName != '' && seriesName != null) { var url = my.get('search_series_name_url'); if (project != '' && project != null) url += escape(project) + '/'; if (seriesName != '' && seriesName != null) url += escape(seriesName) + '/'; if (archive != null && archive == 0) url += 'kommende/'; if (archive != null && archive == 1) url += 'vergangene/'; my.updateContainer('calcms_list', url, 1); } } // show all events for a given series my.showEventsBySeriesName = function showEventsBySeriesName(value) { if (value != '' && value != null) { my.updateContainer('calcms_list', my.get('search_series_name_url') + escape(value) + '/', 1); } } // show all events for a given program my.showEventsByProgram = function showEventsByProgram(value) { var events_url = my.get('events_url'); var url = my.setAndGetUrlParameters('program', value); if (value != '' && value != null) { // my.updateContainer('calcms_list', events_url+url, 1); my.updateContainer('calcms_list', url, 1); } } // show next event of a given series my.showNextSeriesEvent = function showNextSeriesEvent(value) { var events_url = my.get('next_series_url'); my.load(events_url + '/' + value + '.html'); } // show previous event of a given series my.showPrevSeriesEvent = function showPrevSeriesEvent(value) { var events_url = my.get('prev_series_url'); my.load(events_url + '/' + value + '.html'); } my.showMenuAndList = function showMenuAndList(target, field, value) { var events_url = my.get('events_url'); var menu_url = my.get('menu_url'); var event_id = my.get('event_id'); var url = my.setAndGetUrlParameters(field, value); if (target == 'window') { window.location.href = events_url + url; } else { my.updateContainer('calcms_menu', menu_url + url, 1); if (event_id != '' && event_id != null && Number(event_id) != 'NaN') { // load list selected by url my.showEvents(event_id, ''); my.set('event_id', ''); } else { // load event list my.updateContainer('calcms_list', events_url + url, 1); my.set('last_list_url', events_url + url); } } return false; } // load given event details into list my.showEvents = function showEvents(event_id, view) { if (view == null || view == '') view = 'list_url'; if (event_id != '') { var url = my.get(view) + '/' + event_id + '/'; my.updateContainer('calcms_list', url, 1); } else { document.getElementById('calcms_list').innerHTML = 'keine Sendung gefunden...'; } } // load given event details into list my.showEvent = function showEvent(event_id) { var old_url = my.get('last_list_url'); var url = my.get('list_url') + '/' + event_id + '/'; if (url != old_url) { my.set('last_event_id', event_id); my .updateContainer( 'calcms_list', url, 1, function(responseText, textStatus, XMLHttpRequest) { var back_link = 'zurück'; document.getElementById('calcms_list').innerHTML = back_link + document .getElementById('calcms_list').innerHTML + '