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

    angular
        .module('app.common.directives')
        .directive('confirm', ['$timeout', function($timeout){
            return {
                'restrict': 'E',
                'template': require('./confirm.html'),
                'scope': {
                   'title': '@',
                   'message': '@',
                   'confirm': '=',
                   'callback': '='
                },
                'controller': ['$scope',function($scope){
                    $scope.cancel = function(){
                        $scope.confirm = false;
                        $scope.$parent.confirm = false;
                    };
                    $scope.accept = function(){
                        $scope.callback();
                        $scope.cancel();
                    }
                }],
                link: function(scope, e) {
                    scope.$watch('confirm', function(){
                        if(scope.confirm){
                            $timeout(function(){
                                angular.element(e[0].parentNode).css({'min-height': e[0].querySelector('.inline__confirm').offsetHeight + 'px'});
                            }, 0);
                        }else{
                            angular.element(e[0].parentNode).css({'min-height': 0+ 'px'});
                        }
                    });
                }
            };
        }]);
})(window.angular);
