var cmCategoryId = "Deposits:Marketing:ConsumerPricing";

var cmStateInfo = {
    // <bac_state>:
    CA:             { pageId:"Deposits:Marketing:ConsumerPricing;CALP",         cmRegion: 'CA' },
    ID:             { pageId:"Deposits:Marketing:ConsumerPricing;NWLP",         cmRegion: 'NW' },
    WA:             { pageId:"Deposits:Marketing:ConsumerPricing;NWLP",         cmRegion: 'NW'  },
    IL:             { pageId:"Deposits:Marketing:ConsumerPricing;LASALLELP",    cmRegion: 'Lasalle' },
    IN:             { pageId:"Deposits:Marketing:ConsumerPricing;LASALLELP",    cmRegion: 'Lasalle' },
    MI:             { pageId:"Deposits:Marketing:ConsumerPricing;LASALLELP",    cmRegion: 'Lasalle' },
    defaultCase:    { pageId:"Deposits:Marketing:ConsumerPricing;ModelLP",      cmRegion: 'Model' }
}

var bac_state = jimAuld.utils.cookies.get('state');
var pvkey = (bac_state !== null && typeof(cmStateInfo[bac_state]) !== 'undefined') ? bac_state : "defaultCase";
var cmRegion = cmStateInfo[pvkey]['cmRegion'];

var cmExtraElementIds = {
    "monthlyDrawerToggle": {
        CA:         "MonthlyServiceCA",
        NW:         "MonthlyServiceNW",
        Lasalle:    "MonthlyMaintLasalle",
        Model:      "MonthlyMaintShadeModel"
    },
    "monthlyTabs_label0": {
        CA:         "MonthlySvcMACCA",
        NW:         "MonthlySvcMACNW",
        Lasalle:    "MonthlyMaintMACLasalle",
        Model:      "MonthlyMaintMACModel"
    },
    "monthlyTabs_label1": {
        CA:         "MonthlySvcStdChkCA",
        NW:         "MonthlySvcStdChkNW",
        Lasalle:    "MonthlyMaintRegChkLasalle",
        Model:      "MonthlyMaintRegChkModel"
    },
    "monthlyTabs_label2": {
        CA:         "MonthlySvcCampusEdgeCA",
        NW:         "MonthlySvcCampusEdgeNW",
        Lasalle:    "MonthlyMaintRegSavLasalle",
        Model:      "MonthlyMaintCampusEdgeModel"
    },
    "monthlyTabs_label3": {
        Lasalle:    "MonthlyMaintCampusEdgeLasalle"
    },
    "monthlyTabs_content0_a.openSideDrawer.directDeposit": {
        CA:         "MonthlySvcDirectDepositLearnMoreCA",
        NW:         "MonthlySvcDirectDepositLearnMoreNW",
        Lasalle:    "MonthlyMaintDirectDepositLearnMoreLasalle",
        Model:      "MonthlyMaintDirectDepositLearnMoreModel"
    },
    "monthlyTabs_content0_a.openSideDrawer.alerts": {
        CA:         "MonthlySvcMACAlertsLearnMoreCA",
        Lasalle:    "MonthlyMaintMACAlertsLearnMoreLasalle",
        Model:      "MonthlyMaintMACAlertsLearnMoreModel"
    },
    "monthlyTabs_content0_a.openSideDrawer.online": {
        CA:         "MonthlySvcMACOnlineBankingLearnMoreCA",
        NW:         "MonthlySvcMACOnlineBankingLearnMoreNW",
        Lasalle:    "MonthlyMaintMACOnlineBankingLearnMoreLasalle",
        Model:      "MonthlyMaintMACOnlineBankingLearnMoreModel"
    },
    "monthlyTabs_content0_a.openSideDrawer.online.mobile": {
        CA:         "MonthlySvcMACMobileBankingLearnMoreCA",
        Lasalle:    "MonthlyMaintMACMobileBankLearnMoreLasalle",
        Model:      "MonthlyMaintMACMobileBankLearnMoreModel"
    },
    "monthlyTabs_content1_a.openSideDrawer.alerts": {
        CA:         "MonthlylSvcStdCheckingAlertLearnMoreCA",
        Lasalle:    "MonthlyMaintRegCheckingAlertLearnMoreLasalle",
        Model:      "MonthlyMaintRegCheckingAlertLeanMoreModel"
    },
    "monthlyTabs_content1_a.openSideDrawer.online": {
        CA:         "MonthlySvcStdCheckingOnlineBankLearnMoreCA",
        Lasalle:    "MonthlyMaintRegCheckingBillPayLearnMoreLasalle",
        Model:      "MonthlyMaintRegCheckingBillPayLearnMoreModel"
    },
    "monthlyTabs_content1_a.openSideDrawer.online.mobile": {
        CA:         "MonthlySvcStdCheckingMobileBankLearnMoreCA",
        Lasalle:    "MonthlyMaintRegCheckingMobileBankLearnMoreLasalle",
        Model:      "MonthlyMaintRegCheckingMobileBankLearnMoreModel"
    },
    "monthlyTabs_content2_a.openSideDrawer.alerts": {
        Lasalle:    "MonthlyMaintRegSavingsIFAlertLearnMoreLasalle"
    },
    "monthlyTabs_content2_a.openSideDrawer.directDeposit": {
        Lasalle:    "MonthlyMaintRegSavingsDirectDepositLearnMoreLasalle"
    },
    "monthlyTabs_content2_a.openSideDrawer.online": {
        Lasalle:    "MonthlyMaintRegSavingsMobileBankingLearnMoreLasalle"
    },
    "monthlyTabs_content2_a.openSideDrawer.online.mobile": {
        Lasalle:    "MonthlyMaintRegSavingsMobileBankingLearnMoreLasalle"
    },
    "overdraftsTabs_label2": {
        CA:         "ExtendedOverdraftBalanceChargeCA",
        NW:         "ExtendedOverdraftBalanceChargeNW",
        Lasalle:    "OverdraftProtectionTransferFreeLasalle",
        Model:      "OverdraftProtectionTransferFreeModel"
    },
    "overdraftsTabs_content2_a.openSideDrawer.online.mobile": {
        CA:         "ExtendedOverdrawnMobileBankingLearnMoreCA",
        Lasalle:    "OverdraftProtectionMobileBankingLearnMoreLasalle",
        Model:      "OverdraftProtectionMobileBankingLearnMoreModel"
    }
}

var cmElementTags = {
    overviewDrawerToggle:       { elementId: 'OverviewShade',                       appendCmRegion: true },
    monthlyDrawerToggle:        { elementId: getElementId('monthlyDrawerToggle'),   appendCmRegion: false },
    overdraftsDrawerToggle:     { elementId: 'OverdraftReturnItemShade',            appendCmRegion: true },
    otherChangesDrawerToggle:   { elementId: 'OtherPriceChangesShade',              appendCmRegion: true },
    valuableDrawerToggle:       { elementId: 'ValuableFeaturesBenefits',            appendCmRegion: true },
    monthlyTabs_label0:         { elementId: getElementId('monthlyTabs_label0'),    appendCmRegion: false },
    monthlyTabs_label1:         { elementId: getElementId('monthlyTabs_label1'),    appendCmRegion: false },
    monthlyTabs_label2:         { elementId: getElementId('monthlyTabs_label2'),    appendCmRegion: false },
    monthlyTabs_label3:         { elementId: getElementId('monthlyTabs_label3'),    appendCmRegion: false },
    overdraftsTabs_label0:      { elementId: 'ReduceOverdraft',                     appendCmRegion: true }, 
    overdraftsTabs_label1:      { elementId: 'OverdraftItemFee',                    appendCmRegion: true },
    overdraftsTabs_label2:      { elementId: getElementId('overdraftsTabs_label2'), appendCmRegion: false },
    overdraftsTabs_label3:      { elementId: "ExtendedOverdraftBalanceCharge",      appendCmRegion: true },
    otherChangesTabs_label0:    { elementId: "StopPaymentFees",                     appendCmRegion: true },
    otherChangesTabs_label1:    { elementId: "CheckCopies",                         appendCmRegion: true },
    otherChangesTabs_label2:    { elementId: "CheckEnclusureFees",                  appendCmRegion: true },
    otherChangesTabs_label3:    { elementId: "DepositSlipsCreditItems",             appendCmRegion: true },
    otherChangesTabs_label4:    { elementId: "IRACoverdellESADirectCustodianTransferProcFee",   appendCmRegion: true },
    valuableTabs_label0:        { elementId: "ValuableFeaturesFastAccessToMoney",   appendCmRegion: true },
    valuableTabs_label1:        { elementId: "ValuableFeaturesFeelSecureWIthMoney", appendCmRegion: true },
    valuableTabs_label2:        { elementId: "ValuableFeaturesGetTheMostOutOfMoney", appendCmRegion: true },
    directDepositSideDrawerToggle:  { elementId: 'HowToHelpPreventMinFeesDirectDepositExpand',          appendCmRegion: false },
    alertsSideDrawerToggle:         { elementId: 'HowToHelpPreventMinFeesAlertsExpand',                 appendCmRegion: false },
    onlineSideDrawerToggle:         { elementId: 'HowToHelpPreventMinFeesOnlineMobileBankingExpand',    appendCmRegion: false },
    myPortfolioSideDrawerToggle:    { elementId: 'HowToHelpPreventMinFeesBudgetSaveExpand',             appendCmRegion: false },
    usefulLinksSideDrawerToggle:    { elementId: 'HowToHelpPreventMinFeesUsefulLinksExpand',            appendCmRegion: false }
}

var cmElementGroups = [
    { selector: 'area.monthly',             elementId: 'OverviewMHMaintMinMonthlyBal',          appendCmRegion: true },
    { selector: 'area.overdraftProtection', elementId: 'OverviewMHEnrollOverdraftProtection',   appendCmRegion: true },
    { selector: 'area.directDeposit',       elementId: 'OverviewDirectDepositShade',            appendCmRegion: true },
    { selector: 'area.alerts',              elementId: 'OverviewMHSetUpAlerts',                 appendCmRegion: true },
    { selector: 'area.online',              elementId: 'OverviewMHOnlineMobileBanking',         appendCmRegion: true },
    { selector: 'area.myPortfolio',         elementId: 'OverviewMyPortfolioShade',              appendCmRegion: true },
    { selector: 'div#monthlyTabs_content0 a.openSideDrawer.directDeposit', elementId: getElementId('monthlyTabs_content0_a.openSideDrawer.directDeposit'),    appendCmRegion: false },
    { selector: 'div#monthlyTabs_content0 a.openSideDrawer.alerts',        elementId: getElementId('monthlyTabs_content0_a.openSideDrawer.alerts'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content0 a.openSideDrawer.online',        elementId: getElementId('monthlyTabs_content0_a.openSideDrawer.online'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content0 a.openSideDrawer.online.mobile', elementId: getElementId('monthlyTabs_content0_a.openSideDrawer.online.mobile'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content1 a.openSideDrawer.alerts', elementId: getElementId('monthlyTabs_content1_a.openSideDrawer.alerts'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content1 a.openSideDrawer.online', elementId: getElementId('monthlyTabs_content1_a.openSideDrawer.online'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content1 a.openSideDrawer.online.mobile', elementId: getElementId('monthlyTabs_content1_a.openSideDrawer.online.mobile'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content2 a.openSideDrawer.alerts', elementId: getElementId('monthlyTabs_content2_a.openSideDrawer.alerts'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content2 a.openSideDrawer.directDeposit', elementId: getElementId('monthlyTabs_content2_a.openSideDrawer.directDeposit'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content2 a.openSideDrawer.online', elementId: getElementId('monthlyTabs_content2_a.openSideDrawer.online'),           appendCmRegion: false },
    { selector: 'div#monthlyTabs_content2 a.openSideDrawer.online.mobile', elementId: getElementId('monthlyTabs_content2_a.openSideDrawer.online.mobile'),           appendCmRegion: false },
    { selector: 'div#overdraftsTabs_content0 a.openSideDrawer.alerts', elementId: 'ReduceOverdraftAdditionalAlertsLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content0 a.openSideDrawer.myPortfolio', elementId: 'ReduceOverdraftMyPortfolioLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content1 a.openSideDrawer.alerts', elementId: 'OverdraftItemFeeIFAlertLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content1 a.openSideDrawer.online', elementId: 'OverdraftItemFeeRecurringPaymentOnlineBankingLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content1 a.openSideDrawer.online.mobile', elementId: 'OverdraftItemFeeTransferFundsMobileBankingLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content1 a.openSideDrawer.directDeposit', elementId: 'OverdraftItemFeeEnrollDirectDepositLearnMore',           appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content2 a.openSideDrawer.alerts', elementId: 'OverdraftProtectionLowBalanceLAertsLearnMore', appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content2 a.openSideDrawer.online.mobile', elementId: getElementId('overdraftsTabs_content2_a.openSideDrawer.online.mobile'), appendCmRegion: false },
    { selector: 'div#overdraftsTabs_content2 a.openSideDrawer.myPortfolio', elementId: 'ExtendedOverdrawnMyPortfolioLearnMore', appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content2 a.openSideDrawer.directDeposit', elementId: 'ExtendedOverdrawnDirectDepositLearnMore', appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content3 a.openSideDrawer.online.mobile', elementId: 'ExtendedOverdrawnMobileBankingLearnMore', appendCmRegion: true },
    { selector: 'div#overdraftsTabs_content3 a.openSideDrawer.myPortfolio', elementId: 'ExtendedOverdrawnMyPortfolioLearnMore', appendCmRegion: true },
    { selector: 'div#otherChangesTabs_content1 a.openSideDrawer.online',    elementId: 'CheckCopiesOnlineBankingLearnMore',             appendCmRegion: true },
    { selector: 'div#otherChangesTabs_content2 a.openSideDrawer.online',    elementId: 'CheckEnclosureFeesOnlineBankingLearnMore',      appendCmRegion: true }
]

function getPageId(){
    return cmStateInfo[pvkey]['pageId'];
}

function getCategoryId(){
    return cmCategoryId;
}

function getElementId(tagId) {
    return cmExtraElementIds[tagId][cmRegion];
}

function getCmElementGroup(element) {
    var foundTagGroup = false;
    for (var j = 0; j < cmElementGroups.length; j++) {
        var tagGroup = cmElementGroups[j];
        $$(tagGroup['selector']).each(function(tagGroupMember) {
            if (tagGroupMember == element) {
                foundTagGroup = tagGroup;
            }
        });
    }
    return foundTagGroup;
}

function initCmElementEvents(){
    for(tag in cmElementTags){
        if ($(tag)) {
            $(tag).observe('click', function(event) {
                var elementId = cmElementTags[this.id]['appendCmRegion'] ? cmElementTags[this.id]['elementId'] + cmRegion : cmElementTags[this.id]['elementId'];
                cmCreatePageElementTag(elementId, cmCategoryId);
            });
        }
    }

    for (var i = 0; i < cmElementGroups.length; i++) {
        var tagGroup = cmElementGroups[i];
        if ($$(tagGroup['selector']).length) {
            $$(tagGroup['selector']).invoke('observe', 'click', function(event) {
                var elementGroup = getCmElementGroup(this);
                var elementId = elementGroup['appendCmRegion'] ? elementGroup['elementId'] + cmRegion : elementGroup['elementId'];
                cmCreatePageElementTag(elementId, cmCategoryId);
            });
        }
    }
}
