﻿function showModifyUserProfile()
{
    hideDivByName( "dvChangeUserPassword" );
    hideDivByName( "dvResetUserPassword" );
    showDivByName( "dvModifyUserProfile" );
    modifyUserProfileRefresh();
    return true;
}

function modifyUserProfileCancel()
{
    var txtConfirmEmailAddress = dijit.byId( "txtConfirmEmailAddress" );
    txtConfirmEmailAddress.attr( 'value', "" );
    modifyUserProfileRefresh();
    return true;
}

function doUserAccountErrorReport()
{
    var dvStatusDetails = dojo.byId( "dvUserAccountStatusDetails" );
    showDiv(dvStatusDetails);
    return true;
}

function doUserAccountErrorIgnore()
{
    dojo.byId( "dvUserAccountStatusMessage" ).innerHTML = "";
    var dvStatusDetails = dojo.byId( "dvUserAccountStatusDetails" );
    hideDiv(dvStatusDetails);
    var dvStatusReporting = dojo.byId( "dvUserAccountStatusReporting" );
    hideDiv(dvStatusReporting);
    return true;
}

function modifyUserProfileUpdate()
{
    // Check that things are filled in
    var txtUserName = dijit.byId( "txtUserName" );
    var txtEmailAddress = dijit.byId( "txtEmailAddress" );
    var txtConfirmEmailAddress = dijit.byId( "txtConfirmEmailAddress" );
    var btnModifyUserProfileUpdate = dijit.byId( "btnModifyUserProfileUpdate" );
    
    // Do validation
    if( !txtUserName.isValid() )
    {
        txtUserName.focus();
        return false;
    }
    
    if( !txtEmailAddress.isValid() )
    {
        txtEmailAddress.focus();
        return false;
    }
    
    if( !txtConfirmEmailAddress.isValid() )
    {
        txtConfirmEmailAddress.focus();
        return false;
    }
    
    // Compare email address and confirm email addresses
    if( txtEmailAddress.attr( 'value' ) != txtConfirmEmailAddress.attr( 'value' ) )
    {
        txtConfirmEmailAddress.attr( 'value', "" )
        txtConfirmEmailAddress.validate(true);
        return false;
    }
    
    // Disable buttons temporarily
    dijit.byId( "btnModifyUserProfileUpdate" ).attr( "disabled", true );
    dijit.byId( "btnModifyUserProfileRefresh" ).attr( "disabled", true );
    dijit.byId( "btnModifyUserProfileCancel" ).attr( "disabled", true );
    
    // do xhr put since we're updating something rather than creating something new
    
    //"userIDVal" : btnModifyUserProfileUpdate.attr( 'title' ),
    
    // Just send user's email address and ID to server
    var userUpdateData = {
        "updateTypeVal" : "updateEmailAddress",
        "userIDVal" : btnModifyUserProfileUpdate.value,
        "userEmailVal" : txtEmailAddress.attr( 'value' ),
        "userConfirmEmailVal" : txtConfirmEmailAddress.attr( 'value' )
    };
    
    dojo.xhrPut({
            url : "UserAPI.aspx",
            content : userUpdateData,
            handleAs : "text",
            timeout : 90000,
            load : function( response, ioArgs )
                   {
                        showDivByName( "dvUserAccountStatus" ); 
                        var dvStatusMessage = dojo.byId( "dvUserAccountStatusMessage" );
                        dvStatusMessage.innerHTML = response;
                        showDiv(dvStatusMessage);
                                    
                        return response;
                   },
            error : function( response, ioArgs )
                    {
                        showDivByName( "dvUserAccountStatus" ); 
                        var dvStatusMessage = dojo.byId( "dvUserAccountStatusMessage" );
                        dvStatusMessage.innerHTML = response.message;
                        showDiv(dvStatusMessage);
                    
                        var dvStatusDetails = dojo.byId( "dvUserAccountStatusDetails" );
                        hideDiv( dvStatusDetails );
                        dvStatusDetails.innerHTML = response.responseText;
                                                                    
                        var dvStatusReporting = dojo.byId( "dvUserAccountStatusReporting" );
                        showDiv(dvStatusReporting);
                        
                        return response;
                    },
            handle : function( response, ioArgs )
                     {
                        dijit.byId( "btnModifyUserProfileUpdate" ).attr( "disabled", false );
                        dijit.byId( "btnModifyUserProfileRefresh" ).attr( "disabled", false );
                        dijit.byId( "btnModifyUserProfileCancel" ).attr( "disabled", false );
                        
                        return response;
                     }
            });
    
    return true;
}

function modifyUserProfileRefresh()
{
    // Get the user name and email of the logged in user if it is not already set
    // Find the username and email address widgets
    var txtUserName = dijit.byId( "txtUserName" );
    var txtEmailAddress = dijit.byId( "txtEmailAddress" );
    var txtConfirmEmailAddress = dijit.byId( "txtConfirmEmailAddress" );
    // Find the update button(s) on this page
    var btnModifyUserProfileUpdate = dijit.byId( "btnModifyUserProfileUpdate" );
    var btnModifyUserPasswordUpdate = dijit.byId( "btnModifyUserPasswordUpdate" );
        
    txtConfirmEmailAddress.attr( 'value', "" );
    
    // Disable buttons temporarily
    dijit.byId( "btnModifyUserProfileUpdate" ).attr( "disabled", true );
    dijit.byId( "btnModifyUserProfileRefresh" ).attr( "disabled", true );
    dijit.byId( "btnModifyUserProfileCancel" ).attr( "disabled", true );
    
    var userQueryData = {
        "userQueryTypeVal" : "getloggedInUserDetails"
    }

    // Go get the user name
    dojo.xhrGet({
        url : "UserAPI.aspx",
        content : userQueryData,
        handleAs : "json",
        timeout : 90000,
        load : function( response, ioArgs )
               {
                    console.log( "successful xhrPost", response, ioArgs );
                    txtUserName.attr( 'value', response.Name );
                    txtUserName.attr( 'disabled', true );
                    txtUserName.attr( 'readOnly', true );
                    txtEmailAddress.attr( 'value', response.Email );
                    // Save the ID in the update buttons
                    //dijit.byId( "btnModifyUserProfileUpdate" ).attr( "disabled", false );
                    // For some unknown reason you can't set the value on a dojo button
                    // via attr('value',...).  You can either set the value directly (buttonVar.value) or 
                    // use the attr( 'title', ...) attribute instead to stash things. 
                    btnModifyUserProfileUpdate.attr( 'title', response.ID );
                    btnModifyUserProfileUpdate.value = response.ID;
                    // Update other update buttons on the page
                    btnModifyUserPasswordUpdate.value = response.ID;
                    
                    return response;
               },
        error : function( response, ioArgs )
                {
                    // Show error message re: credential loading failed
                    console.log( "failed xhrPost", response, ioArgs );
                                            
                    showDivByName( "dvUserAccountStatus" ); 
                    var dvStatusMessage = dojo.byId( "dvUserAccountStatusMessage" );
                    dvStatusMessage.innerHTML = response.message;
                    showDiv(dvStatusMessage);
                    
                    var dvStatusDetails = dojo.byId( "dvUserAccountStatusDetails" );
                    hideDiv( dvStatusDetails );
                    dvStatusDetails.innerHTML = response.responseText;
                                                                    
                    var dvStatusReporting = dojo.byId( "dvUserAccountStatusReporting" );
                    showDiv(dvStatusReporting);
                                            
                    return response;
                },
        handle : function( response, ioArgs )
                {
                    dijit.byId( "btnModifyUserProfileUpdate" ).attr( "disabled", false );
                    dijit.byId( "btnModifyUserProfileRefresh" ).attr( "disabled", false );
                    dijit.byId( "btnModifyUserProfileCancel" ).attr( "disabled", false );
                    return response;
                }
        });
        
    return true;
}


function showChangeUserPassword()
{
    hideDivByName( "dvModifyUserProfile" );
    hideDivByName( "dvResetUserPassword" );
    showDivByName( "dvChangeUserPassword" );
    return true;
}

function showResetUserPassword()
{
    hideDivByName( "dvChangeUserPassword" );
    hideDivByName( "dvModifyUserProfile" );
    showDivByName( "dvResetUserPassword" );
    return true;
}

function modifyUserPasswordUpdate()
{
    var txtOldPassword = dijit.byId( "txtCurrentPassword" );
    var txtNewPassword = dijit.byId( "txtNewPassword" );
    var txtConfirmNewPassword = dijit.byId( "txtConfirmNewPassword" );
    var btnModifyUserPasswordUpdate = dijit.byId( "btnModifyUserPasswordUpdate" );
    
    // Do some validation
    if( !txtOldPassword.isValid() )
    {
        txtOldPassword.focus();
        return false;
    }
    
    if( !txtNewPassword.isValid() )
    {
        txtNewPassword.focus();
        return false;
    }
    
    if( !txtConfirmNewPassword.isValid() )
    {
        txtConfirmNewPassword.focus();
        return false;
    }
    
    // Compare new password and confirmation
    if( txtNewPassword.attr( 'value' ) != txtConfirmNewPassword.attr( 'value' ) )
    {
        txtConfirmNewPassword.attr( 'value', "" )
        txtConfirmNewPassword.validate(true);
        return false;
    }
    
    // Disable buttons temporarily
    dijit.byId( "btnModifyUserPasswordUpdate" ).attr( "disabled", true );
    dijit.byId( "btnModifyUserPasswordCancel" ).attr( "disabled", true );
    
    // do xhr put since we're updating something rather than creating something new
    
    // Just send user's email address and ID to server
    var userUpdateData = {
        "updateTypeVal" : "updatePassword",
        "userIDVal" : btnModifyUserPasswordUpdate.value,
        "userOldPasswordVal" : txtOldPassword.attr( 'value' ),
        "userNewPasswordVal" : txtNewPassword.attr( 'value' ),
        "userConfirmNewPasswordVal" : txtConfirmNewPassword.attr( 'value' )
    };
    
    dojo.xhrPut({
            url : "UserAPI.aspx",
            content : userUpdateData,
            handleAs : "text",
            timeout : 90000,
            load : function( response, ioArgs )
                   {
                        showDivByName( "dvUserAccountStatus" ); 
                        var dvStatusMessage = dojo.byId( "dvUserAccountStatusMessage" );
                        dvStatusMessage.innerHTML = response;
                        showDiv(dvStatusMessage);
                                    
                        return response;
                   },
            error : function( response, ioArgs )
                    {
                        showDivByName( "dvUserAccountStatus" ); 
                        var dvStatusMessage = dojo.byId( "dvUserAccountStatusMessage" );
                        dvStatusMessage.innerHTML = response.message;
                        showDiv(dvStatusMessage);
                    
                        var dvStatusDetails = dojo.byId( "dvUserAccountStatusDetails" );
                        hideDiv( dvStatusDetails );
                        dvStatusDetails.innerHTML = response.responseText;
                                                                    
                        var dvStatusReporting = dojo.byId( "dvUserAccountStatusReporting" );
                        showDiv(dvStatusReporting);
                        
                        return response;
                    },
            handle : function( response, ioArgs )
                     {
                        dijit.byId( "btnModifyUserPasswordUpdate" ).attr( "disabled", false );
                        dijit.byId( "btnModifyUserPasswordCancel" ).attr( "disabled", false );                    
                        return response;
                     }
            });
    
    return true;
}

function modifyUserPasswordCancel()
{
    // Clear the form inputs
    var txtOldPassword = dijit.byId( "txtCurrentPassword" );
    var txtNewPassword = dijit.byId( "txtNewPassword" );
    var txtConfirmNewPassword = dijit.byId( "txtConfirmNewPassword" );
    
    txtOldPassword.attr( 'value', "" );   
    txtNewPassword.attr( 'value', "" );   
    txtConfirmNewPassword.attr( 'value', "" );
    return true;
}