(function(){ "use strict"; angular.module("raz") .service("lcmStateSelectorService", ["$window", "stateStandardsStates", function($window, stateStandardsStates){ var curState = null; var storageKey = 'lcm-state-selector'; var subscribers = []; var hasSelected = false; function fromStorage() { return $window.sessionStorage.getItem(storageKey); } function toStorage() { $window.sessionStorage.setItem(storageKey, toString()); } function toString() { return curState.state_id; } function indexOfStateById(state) { if (angular.isArray(stateStandardsStates)) { for (var idx = 0; idx < stateStandardsStates.length; ++idx) { if (stateStandardsStates[idx].state_id == state.state_id) { return idx; } } } return -1; } function getStateFromId(stateId) { var idx = indexOfStateById({state_id: stateId}); return idx >= 0 ? stateStandardsStates[idx] : undefined; } function initFromSession() { var storageValue = fromStorage(); if (storageValue !== null) { selectState(getStateFromId(storageValue)); } } function getTitle() { if (hasSelected) { return curState.state_name; } return "Select State"; } function isStateSelected(state) { if (hasSelected) { return state.state_id == curState.state_id; } return false; } function isFiltering() { return hasSelected; } function selectState(state) { curState = state; hasSelected = true; toStorage(); notifySubscribers(); } function getSelectedState() { return curState; } function onUpdate(callback) { subscribers.push(callback); } function notifySubscribers() { for (var i = 0; i < subscribers.length; i++) { subscribers[i](curState); } } initFromSession(); return { isFiltering: isFiltering, isStateSelected: isStateSelected, getTitle: getTitle, selectState: selectState, getSelectedState: getSelectedState, onUpdate: onUpdate }; }]); })();