window.angular && (function (angular) {
    'use strict';

    angular
        .module('app.common.directives')
        .directive('toggleFlag', function ($document) {
            return {
                restrict: 'A',
                link: function (scope, element, attrs) {
        
                    function elementClick(e) {
                        e.stopPropagation();
                    }
        
                    function documentClick(e) {
                        scope[attrs.toggleFlag] = false;
                        scope.$apply();
                    }
        
                    element.on('click', elementClick);
                    $document.on('click', documentClick);
        
                    // remove event handlers when directive is destroyed
                    scope.$on('$destroy', function () {
                        element.off('click', elementClick);
                        $document.off('click', documentClick);
                    });
                }
            };
        });
})(window.angular);