﻿// Responsible for the ProcedureTypeWUC (and associated ProcedureWUC) control's functionality
var procedureTypeMgr =
{
    // The collection of managed controls' relevant properties, with the ProcedureTypeWUC control's ClientId as the key.
    controls: {},

    GetNewProcLink: function(controlId) {
        return document.getElementById(controlId + '_newProcLink');
    },

    GetOldProcLink: function(controlId) {
        return document.getElementById(controlId + '_oldProcLink');
    },

    // Gets the active javascript "link" that toggles procedures.
    GetHref: function(controlId) {
        return 'javascript:procedureTypeMgr.ToggleProcType("' + controlId + '");';
    },

    SetLinks: function(controlId, setToOld) {
        var oldProcLink = procedureTypeMgr.GetOldProcLink(controlId);
        var newProcLink = procedureTypeMgr.GetNewProcLink(controlId);

        // Change link javascript actions
        oldProcLink.href = !setToOld ? procedureTypeMgr.GetHref(controlId) : 'javascript:void(0);'
        newProcLink.href = setToOld ? procedureTypeMgr.GetHref(controlId) : 'javascript:void(0);'
    },

    // Sets the procType to old or new for the specified control (changes hidden value, styles, and hides/shows relevant dom elements)
    SetProcType: function(controlId, setToOld) {
        var hidden = document.getElementById(procedureTypeMgr.controls[controlId].hiddenId);
        var separator = document.getElementById(procedureTypeMgr.controls[controlId].separatorId);
        var oldProcLink = procedureTypeMgr.GetOldProcLink(controlId);
        var newProcLink = procedureTypeMgr.GetNewProcLink(controlId);

        hidden.value = String(setToOld);
        utility.ToggleElementById(procedureTypeMgr.controls[controlId].labelDivId);
        utility.ToggleElementById(procedureTypeMgr.controls[controlId].inputDivId);
        utility.ClearTextBox(procedureTypeMgr.controls[controlId].monthTextId);
        
        separator.innerHTML = setToOld ? '/' : '-';

        // Change link classes
        oldProcLink.className = setToOld ? 'SelectedProcedureLink' : 'UnSelectedProcedureLink';
        newProcLink.className = !setToOld ? 'SelectedProcedureLink' : 'UnSelectedProcedureLink';

        // Change link javascript actions
        oldProcLink.href = !setToOld ? procedureTypeMgr.GetHref(controlId) : 'javascript:void(0);'
        newProcLink.href = setToOld ? procedureTypeMgr.GetHref(controlId) : 'javascript:void(0);'
    },

    // Adds a control to the manager's collection of controls
    //
    // param "controlId": The clientID of the procedureType-control
    // param "hiddenId": The clientID of the procedureType-control's isOldCourtHidden control
    // param "labelDivId": The clientID of the procedure-control's newProcTitleDiv control
    // param "inputDivId": The clientID of the procedure-control's newProcDiv control
    // param "separatorId": The clientID of the procedure-control's procSeparator control
    // optional param "setToOld": True to set old-courts-procedure to selected, otherwise false (or null)
    AddControl: function(controlId, hiddenId, labelDivId, inputDivId, separatorId, monthTextId, setToOld) {
        procedureTypeMgr.controls[controlId] =
        {
            'hiddenId': hiddenId,
            'labelDivId': labelDivId,
            'inputDivId': inputDivId,
            'separatorId': separatorId,
            'monthTextId': monthTextId
        };

        if (setToOld) {
            procedureTypeMgr.SetProcType(controlId, setToOld);
        }
        else {
            procedureTypeMgr.SetLinks(controlId, setToOld);
        }
    },

    // Toggles the procType between old and new
    ToggleProcType: function(controlId) {
        var hidden = document.getElementById(procedureTypeMgr.controls[controlId].hiddenId);

        procedureTypeMgr.SetProcType(controlId, (hidden.value === 'false'));
    }
};
