﻿// Ensure User namespace
UserAdmin.User = UserAdmin.User || {};

(function (UA) {
    UA.User.Password = function (options) {
        var _self = {},
            _manager,
            _options = $.extend({
                id: 'ua-password',
                target: 'body',
                url: UA.handlerPath + 'userpassword.ashx',
                onchange: null
            }, options),
            _user;

        var $container, $messages;
		
		function _showMessage(message, duration, isError) {
		    if(isError) {
		        $messages.addClass('ui-state-error');
		    } else if($messages.hasClass('ui-state-error')) {
		        $messages.removeClass('ui-state-error');
		    }
		    $messages.html(message).slideDown();
		    if(duration) {
		        window.setTimeout(function () { 
		            $messages.slideUp();
		        }, duration);
		    }
		}
        
        function _buildForm() {
            $(['<h1>Set New Password</h1>',
                '<p>User: <span id="',_options.id,'-identity"></span></p>',
                '<ul>',
                    '<li>',
                        '<strong>New Password</strong>',
                        '<input type="password" id="ua-password-input" class="ui-state-active" />',
                    '</li>',
                    '<li>',
                        '<strong>Confirm New Password</strong>',
                        '<input type="password" id="ua-password-input-2" class="ui-state-active" />',
                    '</li>',
                '</ul>'].join('')).appendTo($container);
        }
        
        function _loadForm() {
            var identity = _user.FirstName + ' ' + _user.LastName + ' (' + _user.UserName + ')';
            $('#' + _options.id + '-identity').text(identity);
            
            $('input.ui-state-error', $container).removeClass('ui-state-error');
            $('input', $container).val('');
        }
        
        function _validateForm() {
            var pwd1 = $('#ua-password-input', $container).val(),
                pwd2 = $('#ua-password-input-2', $container).val();

            if(!pwd1) {
                $('#ua-password-input').addClass('ui-state-error');
                _showMessage('A value is required to change the password.', 2200, true);
                return false;
            } else if(pwd1 !== pwd2) {
                $('input', $container).addClass('ui-state-error');
                _showMessage('The entered passwords do not match.', 2200, true);
                return false;
            }
            $('input', $container).removeClass('ui-state-error');
            return true;
        }
        
        _self.init = function (manager) {
            _manager = manager;
            
            $(_manager).bind('ua-manager-passwordopen', function (evt, data) {
                _self.show(data);
            });
            
            var existing = $('#' + _options.id).length;
            if(existing) {
                _options.id += '-' + (++existing).toString();
            }
            
            $container = $('<div id="' + _options.id + '" class="ui-state-default ua-password-container"></div>')
                .appendTo(_options.target)
                .dialog({
                    autoOpen: false,
                    title: 'Set Password',
                    buttons: {
                        'Ok': function () {
                            if(_validateForm()) {
                                var password = $('#ua-password-input', $container).val();
                                $.ajax({
                                    url: _options.url,
                                    type: 'POST',
                                    data: { UserId:_user.UserId, Password:password },
                                    dataType: 'text',
                                    success: function () {
                                        $(_manager).trigger('ua-password-changed');
                                        if(_options.onchange) {
                                            _options.onchange.call(_self);
                                        }
                                        $container.dialog('close');
                                    },
                                    error: function () {
                                        _showMessage('Error occurred attempting to set new password.', 2500, true);
                                    }
                                });
                            }
                        },
                        'Cancel': function () {
                            $(this).dialog('close');
                        }
                    }
                });
			$messages = $('<div class="ui-state-default ua-password-messages"></div>').appendTo($container);

            _buildForm();
        };
        
        _self.show = function(user) {
            _user = user;
            _loadForm();
            $container.dialog('open');
        };
        
        return _self;
    };
})(UserAdmin);