﻿// 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);
        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, setToOld)
    {
        procedureTypeMgr.controls[controlId] = 
        {
            'hiddenId': hiddenId,
            'labelDivId': labelDivId,
            'inputDivId': inputDivId,
            'separatorId': separatorId
        };
        
        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'));
    }
};