﻿/************************************************************************  
                                VARS
**************************************************************************/
var _selectedBoardId = 0;
var _selectedExistingBoardId = 0;

/************************************************************************ 
                        Page Element Enums
**************************************************************************/
var ForumBoardElements =
{
    LiBoardOrganizations: 'liForumBoardOrganizations',
    LiBoardDropDownList: 'liBoardDropDownList',
    TxtForumBoardName: 'txtForumBoardName',
    DdlType: 'ddlForumBoardType',
    DdlBoard: 'ddlParentForumBoard',
    DdlBoardPrivacy: 'ddlForumBoardPrivacy',
    DdlBoardOrganizations: 'ddlForumBoardOrganizations',

    JQLiOrganizations: '#liForumBoardOrganizations',
    JQLiBoardDropDownList: '#liBoardDropDownList',
    JQTxtForumBoardName: '#txtForumBoardName',
    JQDdlType: '#ddlForumBoardType',
    JQDdlBoard: '#ddlParentForumBoard',
    JQDdlBoardPrivacy: '#ddlForumBoardPrivacy',
    JQDdlBoardOrganizations: '#ddlForumBoardOrganizations'
}

var ForumBoardFieldNames =
{
    Name: 'Name',
    Description: 'Description',
    Type: 'Forum Type',
    Privacy: 'Private?'
}

/************************************************************************ 
                        Functions  
**************************************************************************/

function forumBoardPageLoad() {
    showWaitDialog(InformationMessages.ForumBoardRetrieval);
    
    if(_isOfficer)
        showContent($get(ForumElements.DivBoards));
    
    getForumBoardTypesUsingService();
    getForumBoardOrganizationsUsingService();
    getForumBoardsUsingService();
}

function saveSecondIINoneForumBoard() {

    var formValidated = validateForumBoardForm();

    if (!formValidated)
        return false;

    showWaitDialog(InformationMessages.ForumBoardSave);

    saveForumBoard();
}

function toggleForumBoardOrganizationsDropDownListDisplay() {
    var organizationsListItem = $get(ForumBoardElements.LiBoardOrganizations);
    if ($(ForumBoardElements.JQDdlBoardPrivacy).val() == 2) {
        showContent(organizationsListItem)
    }
    else {
        hideContent(organizationsListItem)
    }
}

function updateForumBoard(id) {
    _selectedBoardId = id;

    forumBoardPageLoad();

    getForumBoardByIdUsingService();
}

function getForumBoardByIdUsingService() {
    ForumUIService.GetForumBoardById(_selectedBoardId, onGetForumBoardByIdUsingServiceComplete, onSecondIINoneForumError);
}

function onGetForumBoardByIdUsingServiceComplete(board) {
    hideThreadTopics();
    
    populateForumBoardFormByBoardId(board);
}

function populateForumBoardFormByBoardId(board) {
    var boardName = $get(ForumBoardElements.TxtForumBoardName);
    var boardDescription = $get(ForumBoardASPElements.TxtForumBoardDescription);
    var boardType = $get(ForumBoardElements.DdlType);
    var existingBoard = $get(ForumBoardElements.DdlBoard);
    var boardPrivacy = $get(ForumBoardElements.DdlBoardPrivacy);
    var boardOrganization = $get(ForumBoardElements.DdlBoardOrganizations);

    boardName.value = board.Name;
    boardDescription.value = board.Description;

    setSelectedDropDownListIndex(boardType, board.TypeId);

    _selectedExistingBoardId = board.BoardId;

    getForumBoardsByTypeIdForPopulate();
    
    if (board.IsPrivate) {
        setSelectedDropDownListIndex(boardPrivacy, 2);
        
        toggleForumBoardOrganizationsDropDownListDisplay();
        
        setSelectedDropDownListIndex(boardOrganization, board.OrganizationId);
    }
    else{
        setSelectedDropDownListIndex(boardPrivacy, 1);
    }

    boardName.focus();
 }

function getForumBoardOrganizationsUsingService() {
    SecondIINoneUIService.GetOrganizations(onGetForumBoardOrganizationsComplete, onSecondIINoneForumError);
}

function onGetForumBoardOrganizationsComplete(organizations) {

    var element = $get(ForumBoardElements.DdlBoardOrganizations);

    populateSecondIINoneOrganizations(element, organizations);
}

function getForumBoardTypesUsingService() {
    ForumUIService.GetForumBoardTypes(onGetForumBoardTypesComplete, onSecondIINoneForumError);
}

function onGetForumBoardTypesComplete(forumBoardTypes) {

    var element = $get(ForumBoardElements.DdlType);

    if (forumBoardTypes.length > 0 && element.options.length==0) {
        
        for (var rowCount = 0; rowCount < forumBoardTypes.length; rowCount++) {
            if (forumBoardTypes[rowCount] != InformationMessages.None && forumBoardTypes[rowCount] != InformationMessages.Unknown) {
                var optBoardType = new Option(forumBoardTypes[rowCount], rowCount, false, false);
                element.options[element.options.length] = optBoardType;
            }
            else {
                var optBoardType = new Option(InformationMessages.Select, rowCount, false, false);
                element.options[element.options.length] = optBoardType;
            }
        }
    }
}

function getForumBoardsByTypeIdForPopulate() {

    var boardIdList = $get(ForumBoardElements.DdlBoard);
    var boardTypeId = getSelectedValue($get(ForumBoardElements.DdlType));

    boardIdList.options.length = 0

    getForumBoardsByTypeIdForPopulateUsingService(boardTypeId);
}

function getForumBoardsByTypeIdForPopulateUsingService(boardTypeId) {
    ForumUIService.GetForumBoardsByTypeId(boardTypeId, onGetForumBoardsByTypeIdForPopulateComplete, onSecondIINoneForumError);
}

function onGetForumBoardsByTypeIdForPopulateComplete(forumBoards) {

    var boardNamesListItem = $get(ForumBoardElements.LiBoardDropDownList);

    if (forumBoards.length > 0) {
        if (_selectedExistingBoardId > 0) {
            var element = $get(ForumBoardElements.DdlBoard);

            populateForumBoards(element, forumBoards);

            var existingBoard = $get(ForumBoardElements.DdlBoard);
            setSelectedDropDownListIndex(existingBoard, _selectedExistingBoardId);

            showContent(boardNamesListItem);
        }
        else {
            hideContent(boardNamesListItem);
        }
    }
    else {
        hideContent(boardNamesListItem);
    }
}

function getForumBoardsByTypeId() {
    var boardIdList = $get(ForumBoardElements.DdlBoard);
    var boardTypeId = getSelectedValue($get(ForumBoardElements.DdlType));

    boardIdList.options.length = 0
    
    getForumBoardsByTypeIdUsingService(boardTypeId);
}

function getForumBoardsByTypeIdUsingService(boardTypeId) {
    ForumUIService.GetForumBoardsByTypeId(boardTypeId, onGetForumBoardsByTypeIdComplete, onSecondIINoneForumError);
}

function onGetForumBoardsByTypeIdComplete(forumBoards) {
    var boardNamesListItem = $get(ForumBoardElements.LiBoardDropDownList);

    if (forumBoards.length > 0) {
        var element = $get(ForumBoardElements.DdlBoard);

        populateForumBoards(element, forumBoards);
        
        showContent(boardNamesListItem);
    }
    else {
        hideContent(boardNamesListItem);
    }
}

function getForumBoardsUsingService() {
    ForumUIService.GetForumBoards(onGetForumBoardsComplete, onSecondIINoneForumError);
}

function onGetForumBoardsComplete(forumBoards) {
    displayForumBoards(forumBoards);

    performPostLoadOperations();
}

function resetForumBoardForm() {

    var boardName = $get(ForumBoardElements.TxtForumBoardName);
    var boardDescription = $get(ForumBoardASPElements.TxtForumBoardDescription);
    var boardType = $get(ForumBoardElements.DdlType);
    var existingBoard = $get(ForumBoardElements.DdlBoard);
    var boardPrivacy = $get(ForumBoardElements.DdlBoardPrivacy);
    var boardOrganization = $get(ForumBoardElements.DdlBoardOrganizations);

    boardName.value = '';
    boardDescription.value = '';

    boardType.options[0].selected = true;
    
    if (existingBoard.options[0] != null) {
        existingBoard.options[0].selected = true;
    }
    hideContent($get(ForumBoardElements.LiBoardDropDownList));
    
    boardPrivacy.options[0].selected = true;
    
    boardOrganization.options[0].selected = true;
    hideContent($get(ForumBoardElements.DdlBoardOrganizations));
}

function saveForumBoard() {
    var boardName = getElementText($get(ForumBoardElements.TxtForumBoardName));
    var boardDescription = getElementText($get(ForumBoardASPElements.TxtForumBoardDescription));
    var boardTypeId = getSelectedValue($get(ForumBoardElements.DdlType));
    var existingBoardId = getSelectedValue($get(ForumBoardElements.DdlBoard));
    var isBoardPrivate = getSelectedValue($get(ForumBoardElements.DdlBoardPrivacy));
    var boardOrganizationId = getSelectedValue($get(ForumBoardElements.DdlBoardOrganizations));

    isBoardPrivate = isBoardPrivate - 1;

    var forumBoardData = new ForumBoardData();

    forumBoardData.Name = boardName;
    forumBoardData.Description = boardDescription;
    forumBoardData.TypeId = boardTypeId;

    if (existingBoardId > 0)
        forumBoardData.BoardId = existingBoardId;

    forumBoardData.IsPrivate = isBoardPrivate;

    if (boardOrganizationId > 0 && isBoardPrivate == 1)
        forumBoardData.OrganizationId = boardOrganizationId;

    if (_selectedBoardId > 0)
        forumBoardData.Id = _selectedBoardId;

    saveSecondIINoneForumBoardUsingService(forumBoardData);
}

function validateForumBoardForm() {

    var name = $(ForumBoardElements.JQTxtForumBoardName);
    var description = $(ForumBoardASPElements.JQTxtForumBoardDescription);
    var type = $(ForumBoardElements.JQDdlType);
    var privacy = $(ForumBoardElements.JQDdlBoardPrivacy);
  
    _errorManager.ClearErrors();

    var errorCount = 0;

    if (name.val().trim() == "") {
        _errorManager.AddErrorMessage(name, String.format(ErrorMessages.RequiredField, ForumBoardFieldNames.Name));
        errorCount++;
    }

    if (description.val().trim() == "") {
        _errorManager.AddErrorMessage(description, String.format(ErrorMessages.RequiredField, ForumBoardFieldNames.Description));
        errorCount++;
    }

    if (type.val() == 0) {
        _errorManager.AddErrorMessage(type, String.format(ErrorMessages.RequiredField, ForumBoardFieldNames.Type));
        errorCount++;
    }

    if (privacy.val() == 0) {
        _errorManager.AddErrorMessage(privacy, String.format(ErrorMessages.RequiredField, ForumBoardFieldNames.Privacy));
        errorCount++;
    }

    if (errorCount > 0) {
        _errorManager.ShowErrors();
        return false;
    }
    else {
        return true;
    }
}

function saveSecondIINoneForumBoardUsingService(forumBoardData) {
    ForumUIService.SaveForumBoard(forumBoardData, onSaveSecondIINoneForumBoardComplete, onSecondIINoneForumError);
}

function onSaveSecondIINoneForumBoardComplete() {
    if (_isOfficer)
        resetForumBoardForm();

    _selectedBoardId = 0;
        
    getForumBoardsUsingService();
}
