var $j = jQuery.noConflict();

var Profile = function(params) {
    
    var obj;
    
    // form elements
    var form = $j('#profile-data #profile-data-form');
    var firstNameInput = $j('#profile-data #first_name');
    var lastNameInput = $j('#profile-data #last_name');
    var pseudoInput    = $j('#profile-data #pseudo');
    var loadDataFromPublicDirButton = $j('#profile-data #loadDataFromPublicDir');
    var saveButton = $j('#profile-data #saveData');
    var cancelButton = $j('#profile-data #cancelData');
    var displayTypeGgRadio = $j('#profile-data #display-type-gg');    
    var displayTypeNameRadio = $j('#profile-data #display-type-name');    
    var displayTypePublicDirPseudoRadio = $j('#profile-data #display-type-public-dir-pseudo');    
    
    // form messages
    var messages = $j('#profile-data #messages p');
    var saveSuccess = $j('#profile-data #save-success');
    var saveError = $j('#profile-data #save-error');
    var publicDirSuccess = $j('#profile-data #public-dir-success');
    var publicDirError = $j('#profile-data #public-dir-error');
    
    var init = function() {
        bindEvents();
        manageDisplayTypes();
    }; 
        
    var bindEvents = function() {
        loadDataFromPublicDirButton.click(function() {
            loadDataFromPublicDir($j(this));    
            
            return false;
        });
        
        saveButton.click(function() {
            saveData();
            
            return false;
        });
        
        cancelButton.click(function() {
            return false;
        });
        
        firstNameInput.keyup(function() {
            manageDisplayTypes();
        });
        
        lastNameInput.keyup(function() {
            manageDisplayTypes();
        });
        
        pseudoInput.keyup(function() {
            manageDisplayTypes();
        });
    };            
        
    var loadDataFromPublicDir = function(obj) {
        clearMessages();
        
        $j.ajax({
            url:    obj.attr('href'),
            type:   'POST',
            dataType: 'json',
            success: function(response) {
                firstNameInput.val(response.first_name);
                pseudoInput.val(response.pseudo);
                
                publicDirSuccess.show();
                manageDisplayTypes();
            },
            error: function() {
                publicDirError.show();
            }
        });
    };
    
    var saveData = function() {
        clearMessages();
        
        $j.ajax({
            url:    form.attr('action'),
            type:   'POST',
            data:   { 
                first_name: firstNameInput.val(),
                last_name: lastNameInput.val(),
                pseudo: pseudoInput.val(), 
                display_type: $j('#profile-data .display-type:checked').val() 
            },
            success: function() {
                saveSuccess.show();
            },
            error: function() {
                saveError.show();
            }
        });    
    };        
    
    var clearMessages = function() {
        messages.hide();
    };
    
    var manageDisplayTypes = function() {
        if (!firstNameInput.val() && !lastNameInput.val()) {
            displayTypeNameRadio.attr('disabled', 'disabled');
            
            if (displayTypeNameRadio.attr('checked')) {
                displayTypeGgRadio.attr('checked', 'checked');
            }
        } else {
            displayTypeNameRadio.removeAttr('disabled');                        
        }
        
        if (!pseudoInput.val()) {
            displayTypePublicDirPseudoRadio.attr('disabled', 'disabled');
            
            if (displayTypePublicDirPseudoRadio.attr('checked')) {
                displayTypeGgRadio.attr('checked', 'checked');
            }            
        } else {
            displayTypePublicDirPseudoRadio.removeAttr('disabled');
        }
    };
        
    init();
    
    return obj; 
};