(function(){ "use strict"; angular.module("raz") .service("lazAccordionService", [function(){ var service = this; var maxButtonGroups = 2; var activeButtons = { 1: null, 2: null }; var cookiesAllowed = { 1: true, 2: true } return { initializeAccordion: initializeAccordion, getActiveButtonId: getActiveButtonId, setActiveButtonId: setActiveButtonId, isCookieAllowed: isCookieAllowed, clearCookies: clearCookies }; function initializeAccordion(group) { var selectedButtons = []; var accordionButtonId = 'accordion-group-' + group + '-button'; var accordionButtonClass = 'js-accordion-group-' + group + '-button'; var accordionDivId = 'accordion-group-' + group + '-div'; var accordionItemClass = 'js-accordion-group-' + group + '-item'; var buttons = angular.element('.'+accordionButtonClass); _.each(buttons, function (button) { var events = jQuery._data(button, 'events'); if (events && events.click && events.click.length < 2) { angular.element(button).on("click", function() { var buttonIdParts = angular.element(button).attr('id').split(accordionButtonId+'-'); var buttonId = parseInt(buttonIdParts[1]); var div = angular.element('#'+accordionDivId+'-'+buttonId); var containerDiv = angular.element(this).parent('.'+accordionItemClass); selectedButtons = []; if (div.is(":hidden")) { // only 1 div should be expanded at a time closeAccordions(group); div.slideDown(); containerDiv.addClass("is-active"); containerDiv.addClass("active"); selectedButtons.push(buttonId); } else { div.slideUp(); containerDiv.removeClass("is-active"); containerDiv.removeClass("active"); } if (selectedButtons.length > 0) { var cookieName = 'laz_accordion_' + group; clg.commonUtils.setCookie(cookieName, buttonId, 1); } else { // clg.commonUtils.deleteCookie("laz_accordion_1"); // clg.commonUtils.deleteCookie("laz_accordion_2"); } }); } }); _.each(selectedButtons, function (savedButton) { var button = angular.element('#'+accordionButtonId+'-'+savedButton); button.click(); }); } function closeAccordions(group) { for (var i = maxButtonGroups; i >= group; --i) { var accordionDivClass = 'js-accordion-group-' + i + '-div'; var accordionItemClass = 'js-accordion-group-' + i + '-item'; var otherDivs = angular.element('.'+accordionDivClass); for (var counter = 0; counter < otherDivs.length; ++counter) { var otherDiv = otherDivs.eq(counter); if (!otherDiv.is(":hidden")) { otherDiv.slideUp(); var otherDivContainer = otherDiv.parent('.'+accordionItemClass); otherDivContainer.removeClass("is-active"); otherDivContainer.removeClass("active"); } } } } function getActiveButtonId(group) { return activeButtons[group]; } function setActiveButtonId(group, id) { var numericId = parseInt(id); activeButtons[group] = numericId ? numericId : null; for (var i = maxButtonGroups; i > group; --i) { activeButtons[i] = null; } } function isCookieAllowed(group) { if (cookiesAllowed[group]) { cookiesAllowed[group] = false; return true; } return false; } function clearCookies() { var cookieBaseName = 'laz_accordion_'; for (var i = 0; i < maxButtonGroups; ++i) { var group = i + 1; var cookieName = cookieBaseName + group; clg.commonUtils.deleteCookie(cookieName); } } }]); })();