const elemIdUtils = {

    CARD_PREFIX: 'card',
    CARD_HEADER_PREFIX: 'cardHdr',
    CARD_DESCR_PREFIX: 'cardDescr',
    CARD_TEXT_PREFIX: 'cardText',
    CARD_TAB_CONTENT_PREFIX: 'cardTabContent',

    CARD_EXPANDED_CONTENT_PREFIX: 'cardExp',
    CARD_COLLAPSED_CONTENT_PREFIX: 'cardColl',

    BUTTON_CLOSE_CARD_HEADER_PREFIX: 'btnCloseCardHdr',
    BUTTON_LOAD_VIDEO_PREFIX: 'btnLoadVideo',

    IMAGE_BOOKMARK_PREFIX: 'imgBk',

    SPAN_LENS_NAME_PREFIX: 'lensNameS',

    SPAN_MORE_PREFIX: 'sMore',
    SPAN_LESS_PREFIX: 'sLess',

    COLLAPSE_TABS_PREFIX: 'collapseTabs',

    LIST_PREFIX: 'cardTab',

    LIST_ITEM_WHEN_TAB_PREFIX: 'liWhenTab',
    LIST_ITEM_HOW_TAB_PREFIX: 'liHowTab',
    LIST_ITEM_EXAMPLES_TAB_PREFIX: 'liExTab',
    LIST_ITEM_VIDEO_TAB_PREFIX: 'liVideoTab',

    WHEN_CONTENT_PREFIX: 'whenContent',
    HOW_CONTENT_PREFIX: 'howContent',
    EXAMPLES_CONTENT_PREFIX: 'exContent',
    VIDEO_CONTENT_PREFIX: 'videoContent',

    VIDEO_ANCHOR_PREFIX: 'videoAnchor',
    VIDEO_PREFIX: 'video',
    VIDEO_IFRAME_PREFIX: 'videoIFrame',
    VIDEO_IFRAME_PARENT_PREFIX: 'divVideoIFrame',

    TAB_PANE_WHEN_PREFIX: 'tpWhen',
    TAB_PANE_HOW_PREFIX: 'tpHow',
    TAB_PANE_EXAMPLES_PREFIX: 'tpExamples',
    TAB_PANE_VIDEO_PREFIX: 'tpVideo',

    getElemId: function getElemId(lensId, prefix, expanded) {
        // return an element id
        //  lensId: id of the target lens
        //  prefix: string prefix used for a set of related elements
        //  expanded:
        //      true: this element is the expanded version of its contents
        //      false: this element is the collapsed version
        //      undefined: there is only one of these elements per lens, not two versions (expanded, collapsed)

        //log('getElemId: enter');

        var elemId = '';

        if (typeof expanded === "undefined") {
            elemId = prefix + '-' + lensId;
        }
        else {
            if (expanded) {
                elemId = prefix + '-e-' + lensId;
            }
            else {
                elemId = prefix + '-c-' + lensId;
            }
        }

        //log('getElemId: elemId=' + elemId);
        //log('getElemId: leave');

        return elemId;
    },

    getVideoIFrameElemId: function getVideoIFrameElemId(lensId) {
        log('getVideoIFrameElemId: enter');

        const iFrameId = this.getElemId(lensId, elemIdUtils.VIDEO_IFRAME_PREFIX, undefined);
        // get the id of the iFrame element
        // for now, all video iFrame elements are one per lens, not expanded or collapsed

        log('getVideoIFrameElemId: videoElemId=' + iFrameId);
        log('getVideoIFrameElemId: leave');

        return iFrameId;
    },

    getLensIdFromVideoIFrameElemId: function getLensIdFromVideoIFrameElemId(elemId) {
        // example
        //  videoIFrame-19

        const logHdr = 'getLensIdFromVideoIFrameElemId: ';
        log(logHdr + 'enter');
        log(logHdr + 'elemId=' + elemId);

        const numStr = elemId.substring(12);
        // get the numeric string

        const lensId = parseInt(numStr, 10);
        // convert to an integer

        log(logHdr + 'lensId=' + lensId);
        log(logHdr + 'leave');

        return lensId;
    },

    getVideoIFrameParentElemId: function getVideoIFrameElemId(lensId) {
        log('getVideoIFrameParentElemId: enter');

        const divId = this.getElemId(lensId, elemIdUtils.VIDEO_IFRAME_PARENT_PREFIX, undefined);
        // get the id of the div parent of the iFrame element
        // for now, all video iFrame elements are one per lens, not expanded or collapsed

        log('getVideoIFrameParentElemId: divId=' + divId);
        log('getVideoIFrameParentElemId: leave');

        return divId;
    },
    
    getVideoElemId: function getVideoElemId(lensId) {
        log('getVideoElemId: enter');

        const videoElemId = this.getElemId(lensId, elemIdUtils.VIDEO_PREFIX, undefined);
        // get the id of the video element
        // for now, all video elements are one per lens, not expanded or collapsed

        log('getVideoElemId: videoElemId=' + videoElemId);
        log('getVideoElemId: leave');

        return videoElemId;
    }
};