var rsvListFilterViewCase = 'show'; var windowHeight = 0; var windowWidth = 0; function rlf(elemId, value) { var elem = document.getElementById(elemId); switch (elemId) { case 'date': value = elem.options[value].value; break; case 'time_from': value = "function(val){return RsvListTimeFromFilter (val, '" + value + "');}"; break; case 'time_to': value = "function(val){return RsvListTimeToFilter (val, '" + value + "');}"; break; case 'no_full_rsvs': if (value == '1') { elem.checked = true; } break; } elem.value = value; RsvListFilterize(document.getElementById(elemId)); } function RsvListResizeHandler() { /*If width has changed*/ if (windowWidth != $(window).width()) { //if ($(".navbar-toggle").css('display') != 'none') { if(site.isMobile()){ RsvListFilterVisibility('hide'); $(".table_rsv_list").removeClass('table'); if (!$(".table_rsv_list").hasClass('rsv_list_mobile')) { $(".table_rsv_list").addClass('rsv_list_mobile'); } } else { $(".table_rsv_list").removeClass('rsv_list_mobile'); if (!$(".table_rsv_list").hasClass('table')) { $(".table_rsv_list").addClass('table'); } $(".rsv_list_v2").show(); $(".date-container:visible").sticky({topSpacing: 60}); } RsvSearchCriteriaVisHandler(false); } RsvListSaveWindowResolution(); } /** * Hide or display filter form elements based on the specified viewCase. * * @param viewCase "hide" Hides all filter form elements that are not selected. * "show" displays all elements. */ function RsvListFilterVisibility(viewCase) { var singleSelectElemIds = ['rsv_desc', 'instructor']; var functionSelectElemIds = ['time_from', 'time_to']; var singleCheckboxElemIds = ['no_full_rsvs']; var multiCheckboxElemNames = ['extra_type[]', 'objc']; var elemId = null; var $element = null; rsvListFilterViewCase = viewCase; if (viewCase == 'hide') { for (var i in singleSelectElemIds) { elemId = singleSelectElemIds[i]; $element = $("#" + elemId); if ($element.val() == '') { $element.parent().hide(); } } for (var i in functionSelectElemIds) { elemId = functionSelectElemIds[i]; if ($.trim($("#" + elemId + " option:selected").text()) == '') { $("#" + elemId).parent().hide(); } } for (var i in singleCheckboxElemIds) { elemId = singleCheckboxElemIds[i]; $element = $("#" + elemId); if ($element.prop('checked') == false) { $element.parent().hide(); } } for (var i in multiCheckboxElemNames) { elemName = multiCheckboxElemNames[i]; $("input[name=\"" + elemName + "\"]").each(function (index, element) { var $element = $(element); if (!$element.prop('checked')) { $element.parent().parent().hide(); } }); } //Hide extra header $("#rsvf_extra_header").hide(); //Hide buttons $("#rsvf_fs_links").hide(); $("#rsvlf_show_f_up").hide(); $("#rsvlf_show_f_down").show(); $("#rsvf_objc_header").hide(); $("#rsv_list_loading").hide(); $(".rsv_list_v2").show(); $(".date-container").sticky({topSpacing: 60}); } else { var firstChildElemIds = singleSelectElemIds.concat(functionSelectElemIds).concat(singleCheckboxElemIds); for (var i in firstChildElemIds) { elemId = firstChildElemIds[i]; $("#" + elemId).parent().show(); } for (var i in multiCheckboxElemNames) { var elemName = multiCheckboxElemNames[i]; $("input[name=\"" + elemName + "\"]").each(function () { var $element = $(this); $element.parent().parent().show(); }); } //Show extra header $("#rsvf_extra_header").show(); //Show buttons $("#rsvf_fs_links").show(); $("#rsvlf_show_f_down").hide(); $("#rsvlf_show_f_up").show(); $("#rsvf_objc_header").show(); } } function RsvListFilterize(obj) { var c = 0; var objId = null; // id or name var colIndex = obj.getAttribute('list_col_index'); if (obj.id.match('extra_type') == 'extra_type' || obj.id.match('objc') == 'objc') { objId = obj.name; } else { objId = obj.id; } if (colIndex == 'unknown') { // Get ghost_columns index $('#table_rsv_list tr:first th').each(function (index, th) { if ($(this).hasClass('th_' + objId.replace('[]', ''))) { colIndex = index; } }); } //Is rsv list exists? if ($("#rsv_list_v2").prop('id') == undefined) { return RsvListRedirect(RsvListGetFilterUrl(false)); } switch (objId) { case 'date': if(obj.value.indexOf('_days_ahead') !== -1){ var daysAhead = obj.value.substring(0, obj.value.indexOf('_days_ahead')); } if ((GetCookie('all_rsvs_fetched') == '0' && !obj.value != 'next_two_days') || (GetCookie('all_rsvs_fetched') == '0' && daysAhead != undefined )) { // Need all reservations from db var url = 'index.php?func=la&fetch=1&fetchdate=' + obj.value; url = url + RsvListGetFilterUrl(true); return RsvListRedirect(url); } var tblRsvList = document.getElementById('table_rsv_list'); var txtChildNodeId = ''; for (var i = 0; i < tblRsvList.childNodes.length; i++) { txtChildNodeId = tblRsvList.childNodes[i].id; if (txtChildNodeId != undefined && txtChildNodeId && (txtChildNodeId.substr(0, 4) == 'day_' || txtChildNodeId.substr(0, 4) == 'day-')) { if (!obj.value || obj.value == 'all') { ShowElement(txtChildNodeId); } else { if (obj.value == 'day_next_two_days') { if (c == 0 || c == 1 || c == 2 || c == 3) { ShowElement(txtChildNodeId); } else { HideElement(txtChildNodeId); } } else if(daysAhead != undefined){ if (c <= (2*daysAhead)-1) { ShowElement(txtChildNodeId); } else { HideElement(txtChildNodeId); } } else { if (txtChildNodeId.substr(4, 10) == obj.value) { ShowElement(txtChildNodeId); } else { HideElement(txtChildNodeId); } } c = c + 1; } } } break; case 'no_full_rsvs': var origValue = obj.value; obj.value = "function(val){return RsvListSpaceLeftFilter (val, " + obj.checked + ");}"; Table.filter(obj, obj, null, colIndex); obj.value = origValue; break; case 'rsv_desc': var origValue = obj.value; if (obj.nodeName === "INPUT") { if (origValue.substr(0, 5) == '%OC%_') { // By obj_code obj.value = "function(val){return RsvListObjCodeFilter (val, '" + origValue.substr(5) + "');}"; } else if (origValue.substr(0, 5) == '%EC%_') { // By extratype obj.value = "function(val){return RsvListExtraTypeFilter (val, '" + origValue.substr(5) + "');}"; } else { // By description obj.value = "function(val){return RsvListRsvDescFilter (val, '" + obj.value + "');}"; } } Table.filter(obj, obj, null, colIndex); if (obj.nodeName === "INPUT" || obj.nodeName === 'SELECT') { obj.value = origValue; } break; case 'instructor': var origValue = obj.value; if (obj.nodeName === "INPUT") { if (origValue.substr(0, 5) == '%IC%_') { // By instructor_code obj.value = "function(val){return RsvListInstructorCodeFilter (val, '" + origValue.substr(5) + "');}"; } else { // By description obj.value = "function(val){return RsvListInstructorNameFilter (val, '" + obj.value + "');}"; } } Table.filter(obj, obj, null, colIndex); if (obj.nodeName === "INPUT") { obj.value = origValue; } break; case 'extra_type': case 'extra_type[]': var origValue = obj.value; var chkBoxGroup = document.getElementsByName('extra_type[]'); var values = ''; for (var i = 0; i < chkBoxGroup.length; i++) { if (chkBoxGroup[i].checked) { values = values + chkBoxGroup[i].value + '|'; } } if (values.substr(values.length - 1, 1) == '|') { values = values.substr(0, values.length - 1); } obj.value = "function(val){return RsvListExtraTypeFilter (val, '" + values + "');}"; Table.filter(obj, obj, null, colIndex); obj.value = origValue; break; case 'objc': var origValue = obj.value; var selectedClasses = []; $("input[name=objc]:checked").each(function (index, element) { selectedClasses.push(element.id.replace("objc_", "")); }); obj.value = "function(val){return RsvListObjClassFilter (val, '" + selectedClasses.join("|") + "');}"; //Object class is not dependant on any specific column. The class is stored in the row element. Table.filter(obj, obj, null, 1); obj.value = origValue; break; case 'location': if (obj.value == 'null' || !obj.value) { DeleteCookie(INSTALL_CODE+'_rr_rsv_location'); } else { SetCookie(INSTALL_CODE+'_rr_rsv_location', obj.value, 1); } Table.filter(obj, obj, null, colIndex); break; default: Table.filter(obj, obj, null, colIndex); break; } //save the filter url to browser history so browser's Back-button will keep filters #17572 window.history.pushState('rsv_list', document.title, RsvListGetFilterUrl(false)); // Call BannerOrganizator function RsvListExtraHandler(); //hide detail rows $('.detail-row').each(function(index){ var parentId = $(this).data('parentid'); if (!$('#'+parentId).is(':visible')){ // element is hidden $(this).hide(); } }); } function RsvListTimeFromFilter(cellObj, selVal) { var val = cellObj.innerHTML; var timeTo = document.getElementById('time_to'); var valInt = TimeToInt(val); var selValInt = TimeToInt(selVal); var timeToIntVal = TimeToInt(timeTo.options[timeTo.selectedIndex].text); if (!timeToIntVal) timeToIntVal = 9999; return (selValInt <= valInt && timeToIntVal >= valInt); } function RsvListTimeToFilter(cellObj, selVal) { var val = cellObj.innerHTML; var timeFrom = document.getElementById('time_from'); var valInt = TimeToInt(val); var selValInt = TimeToInt(selVal); var timeFromIntVal = TimeToInt(timeFrom.options[timeFrom.selectedIndex].text); if (!timeFromIntVal) timeFromIntVal = 0; return (selValInt >= valInt && timeFromIntVal <= valInt); } function TimeToInt(timeValue) { if (timeValue) { timeValue = timeValue.trim(); if (timeValue.substr(0, 1) == '0') { timeValue = timeValue.substr(1, timeValue.length); } timeValue = parseInt(timeValue.replace(':', '')); } return timeValue; } function RsvListRsvDescFilter(cellObj, searchTxt) { var objDesc = cellObj.innerHTML; objDesc = objDesc.replace(/(<([^>]+)>)/ig,""); //strip tags var extraTypeDesc = cellObj.parentNode.getAttribute('extra_type_desc'); var objDescMatch = false; var extraTypeMatch = false; objDescMatch = objDesc.match(new RegExp(searchTxt, 'i')); // match case // insensitive if (extraTypeDesc) { extraTypeMatch = extraTypeDesc.match(new RegExp(searchTxt, 'i')); // match // case // insensitive } // (objDesc or extraTypeDesc) return (objDescMatch || extraTypeMatch); } function RsvListObjCodeFilter(cellObj, selObjCode) { var rowObjCode = cellObj.parentNode.getAttribute('obj_code'); return (rowObjCode == selObjCode); } function RsvListObjClassFilter(cellObj, selectedObjectClasses) { var rowObjClass = cellObj.parentNode.getAttribute('objc'); //If nothing is selected show all. if (selectedObjectClasses.length === 0) { return true; } return _.indexOf(selectedObjectClasses.split("|"), rowObjClass) > -1; } function RsvListInstructorNameFilter(cellObj, searchTxt) { var insName = cellObj.innerHTML; // match case insensitive return (insName.match(new RegExp(searchTxt, 'i'))); } function RsvListInstructorCodeFilter(cellObj, selInsCode) { return (cellObj.parentNode.getAttribute('ins_code') == selInsCode); } function RsvListExtraTypeFilter(cellObj, selExtraTypeCode) { if (!selExtraTypeCode) { return true; } var extraTypeStr = cellObj.parentNode.getAttribute('extra_type'); if (extraTypeStr) { var extraTypeArray = extraTypeStr.split('|'); var selExtraTypeArray = selExtraTypeCode.split('|'); for (var i in extraTypeArray) { for (var j = 0; j < selExtraTypeArray.length; j++) { if (extraTypeArray[i] == selExtraTypeArray[j]) { return true; } } } } return false; } function RsvListSpaceLeftFilter(cellObj, selValue) { if (selValue) { return cellObj.parentNode.getAttribute('space_left') == '1'; } return true; } function RsvListExtraHandler() { var $tblRsvList = $('#table_rsv_list'), extraTypeArray = []; $tblRsvList.find("tr").each(function (index, element) { var $element = $(element), rowExtraTypes = []; if (undefined !== $element.attr("extra_type")) { rowExtraTypes = $element.attr("extra_type").split("|"); $.each(rowExtraTypes, function (index) { if (rowExtraTypes[index].length > 0) { extraTypeArray.push(rowExtraTypes[index]); } }); } }); if (extraTypeArray.length > 0) { extraTypeArray = sort_unique(extraTypeArray); } //RsvListShowExtraTypeFilter(extraTypeArray); //Näytetään kaikki //if ($(".navbar-toggle").css('display') != 'none' && rsvListFilterViewCase == 'hide') { if (site.isMobile() && rsvListFilterViewCase == 'hide') { RsvListFilterVisibility('hide'); } } function RsvListShowExtraTypeFilter(extraTypeCodes) { var lblExtraType = document.getElementById('rsvf_lbl_extra_type'); if (lblExtraType) { var cChkBoxVal = null; var somethingSelected = false; for (var i = 0; i < lblExtraType.childNodes.length; i++) { for (var j = 0; j < lblExtraType.childNodes[i].childNodes.length; j++) { if (lblExtraType.childNodes[i].childNodes[j].nodeName == 'INPUT') { if (lblExtraType.childNodes[i].childNodes[j].checked) { somethingSelected = true; break; } } } } if (extraTypeCodes.length > 0) { for (var i = 0; i < lblExtraType.childNodes.length; i++) { if (lblExtraType.childNodes[i].nodeName == 'DIV') { cChkBoxVal = $(lblExtraType.childNodes[i]).find("input").val() /* if extra_type value found in rsv_list */ if (InArray(cChkBoxVal, extraTypeCodes)) { ShowElement(lblExtraType.childNodes[i]); } else { if (!somethingSelected) { HideElement(lblExtraType.childNodes[i]); } } } } ShowElement('rsvf_fs_extra_type'); } else { if (!somethingSelected) { HideElement('rsvf_fs_extra_type'); } } } } function RsvListFilterCookieHandler(showCase, actionCase) { var divFilter = document.getElementById('rsv_filter'); var selectElements = coerce(divFilter.getElementsByTagName("select"), Array); var inputElements = coerce(divFilter.getElementsByTagName("input"), Array); var allInputs = selectElements.concat(inputElements); var obj = null; var inputsNotIn = ["id_show_only_my_res"]; var inputsNotInAll = ["id_show_only_my_res"]; for (var i = 0; i < allInputs.length; i++) { obj = allInputs[i]; if (showCase == 'all') { if (InArray(obj.id, inputsNotInAll)) { continue; } } else { if (InArray(obj.id, inputsNotIn)) { continue; } } if (actionCase == 'save') { if (obj.type == 'checkbox') { SetCookie('rsvf_' + obj.id, obj.checked); } else { var saveValue = obj.value; if (obj.id == 'date') { var d = new Date(obj.value * 1000); if (isNaN(d.getDay())) { saveValue = obj.value; } else { saveValue = d.getDay(); } } SetCookie('rsvf_' + obj.id, saveValue); } } if (actionCase == 'empty') { DeleteCookie('rsvf_' + obj.id); } if (actionCase == 'is_empty') { if (GetCookie('rsvf_' + obj.id)) { return false; } } if (showCase == 'last') { if (obj.type == 'checkbox') { if (obj.checked = GetCookie('rsvf_' + obj.id) == 'true') { obj.setAttribute('checked', 'checked'); } } else { var cookieValue = GetCookie('rsvf_' + obj.id); var setValue = cookieValue; if (obj.id == 'date' && cookieValue > -1) { for (i in obj.options) { var option = obj.options[i]; if (option.value > 0) { var d = new Date(option.value * 1000); if (d.getDay() == cookieValue) { setValue = option.value; } } } } obj.value = setValue; } } if (showCase == 'all') { if (obj.type == 'checkbox') { obj.checked = false; } else { obj.value = ''; // Input text if (obj.nodeName == 'SELECT') { obj.value = obj.options[0].value; if (obj.id == 'date' && GetCookie('all_rsvs_fetched') == '0') { RsvListRedirect('index.php?func=la');// Reload page exit(); } } } } if (showCase && $("#rsv_list_v2").prop('id') == 'rsv_list_v2') { //Tehdään filtteröinti jos vuorolista on näkyvissä. RsvListFilterize(obj); } } //Jos vuorolista on piilossa, tehdään filtteröinti vasta nyt if (showCase && $("#rsv_list_v2").prop('id') == undefined) { RsvListFilterize(obj); //Last obj. } return true; } function RsvListFilterFavourite(showCase, actionCase) { if (showCase || actionCase) { RsvListFilterCookieHandler(showCase, actionCase); } if (RsvListFilterCookieHandler(null, 'is_empty')) { $("#rsvlf_save").parent("div").show(); $("#rsvlf_last").parent("div").hide(); $("#rsvlf_empty").parent("div").hide(); } else { $("#rsvlf_save").parent("div").hide(); $("#rsvlf_last").parent("div").show(); $("#rsvlf_empty").parent("div").show(); } if (showCase == 'last' || showCase == 'all') { //if ($(".navbar-toggle").css('display') != 'none') { if(site.isMobile()){ RsvListFilterVisibility('hide'); } } } function RsvListFilterEmptyHandler(obj) { if (obj.value == '') { RsvListFilterize(obj); } } function RsvListGoToDetailPage(url) { SetCookie('rsv_list_back_url', RsvListGetFilterUrl(false)); window.location = url; } function RsvListGetFilterUrl(onlyFilterParams) { if (!onlyFilterParams) { var url = 'index.php?func=la&view=list'; url = url + '&fetch=1&fetchdate=' + $('#date').val(); } else { var url = ''; } var time_from = $.trim($('#time_from option:selected').text()); var time_to = $.trim($('#time_to option:selected').text()); if ($('#location').val()) { url = url + "&location=" + $('#location').val(); } if (time_from) { url = url + "&time_from=" + time_from; } if (time_to) { url = url + "&time_to=" + time_to; } if ($('#rsv_desc').val()) { url = url + "&rsv_desc=" + $('#rsv_desc').val(); } if ($('#instructor').val()) { url = url + "&instructor=" + $('#instructor').val(); } if ($('#no_full_rsvs').prop('checked')) { url = url + "&no_full_rsvs=1"; } if ($('#id_web_position').val()) { url = url + "&web_position="+ $('#id_web_position').val(); } return url; } function RsvListRedirect(url) { $("#rsv_list_v2").hide(); $("#rsv_list_loading").show(); window.location = url; } function RsvListSaveWindowResolution () { windowHeight = $(window).height(); windowWidth = $(window).width(); } function sort_unique(arr) { arr = arr.sort(function (a, b) { return a * 1 - b * 1; }); var ret = [arr[0]]; for (var i = 1; i < arr.length; i++) { // start loop at 1 as element 0 can // never be a duplicate if (arr[i - 1] !== arr[i]) { ret.push(arr[i]); } } return ret; } function coerce(obj, type) { var response = new type(); for (var i = 0; i < obj.length; i++) { response[i] = obj[i]; } return response; } function GetACInputReturnVal(ui) { if (ui.item.value.substr(0, 1) == '%') { return ui.item.label; } else { return ui.item.value; } } function RsvSearchCriteriaVisHandler (toggle) { var elemMinCont = $("#rsv_search_data_min_cont"); var elemMin = $("#rsv_search_data_min"); var elemMinContent = $("#rsv_search_data_min_content"); var elemAll = $("#rsv_search_data_all"); var isSavedSearch = $("#rsv_search_criteria").hasClass('fres_saved'); if (isSavedSearch) { return; }else{ if (toggle) { elemMinCont.toggle(); elemAll.toggle(); } else { if (elemMinContent.height() == 0) { RsvSearchCriteriaVisHandler(true); } if (elemMinContent.height() > elemMin.height()) { elemMinCont.click(function () { RsvSearchCriteriaVisHandler(true); }); elemMinCont.addClass('cursor_pointer'); elemAll.click(function () { RsvSearchCriteriaVisHandler(true); }); elemAll.addClass('cursor_pointer'); $('#dot_dot_dot').show(); } else { elemMinCont.unbind("click"); elemMinCont.removeClass('cursor_pointer'); elemAll.unbind("click"); elemAll.removeClass('cursor_pointer'); $('#dot_dot_dot').hide(); } } } } function CreateCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function ReadCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function EraseCookie(name) { createCookie(name, "", -1); } $(document).ready(function () { if (GetCookie('prev_url_hash')) { location.hash = GetCookie('prev_url_hash'); } if (document.getElementById('rsv_filter')) { $(':input[placeholder]').placeholder(); } $("#rsv_desc").filter(":text").autocomplete({ source: 'index.php?func=rsvbjqs&case=rsv_desc', minLength: 0, autoFocus: true, delay: 0, select: function (event, ui) { var obj = document.getElementById('rsv_desc'); obj.value = ui.item.value; // Set code to value RsvListFilterize(obj); event.preventDefault(); $("#rsv_desc").val(GetACInputReturnVal(ui)); }, focus: function (event, ui) { event.preventDefault(); $("#rsv_desc").val(GetACInputReturnVal(ui)); } }); $('#ac_all_rsv_desc').click(function () { $("#rsv_desc").autocomplete('search', ''); $("#rsv_desc").focus(); }); $("#instructor").filter(":text").autocomplete({ source: 'index.php?func=rsvbjqs&case=instructor', minLength: 0, autoFocus: true, delay: 0, select: function (event, ui) { var obj = document.getElementById('instructor'); obj.value = ui.item.value; // Set code to value RsvListFilterize(obj); event.preventDefault(); $("#instructor").val(GetACInputReturnVal(ui)); }, focus: function (event, ui) { event.preventDefault(); $("#instructor").val(GetACInputReturnVal(ui)); } }); $('#ac_all_instructors').click(function () { $("#instructor").autocomplete('search', ''); $("#instructor").focus(); }); //Filter displaying. $(".js-show-filter").on("click", function (e) { e.preventDefault(); RsvListFilterVisibility("show"); }); //Filter hiding. $(".js-minimize-filter").on("click", function (e) { e.preventDefault(); RsvListFilterVisibility("hide"); }); $(window).resize(function () { RsvListResizeHandler(); }); RsvListResizeHandler(); $("#rsv_filter").show(); //add alternating class (even if table is not striped -> add background color in custom css file) var even_row = true; $("#rsv_list_v2 tr.tr-row").each(function(i,e){ if(even_row){ $(this).addClass('even'); //extra description row should inherit parent row's background color if(!$(this).next('tr').hasClass('extra_row')) { even_row = false; } } else { //extra description row should inherit parent row's background color if(!$(this).next('tr').hasClass('extra_row')) { even_row = true; } } }); $('#instructor_classes .search_field').on('keydown', function(e){ if (e.keyCode == 13) { $(this).next('button').click(); } }); });