DSA Interface

Interface enhancements for DSA

// ==UserScript==
// @name			DSA Interface
// @namespace		COMDSPDSA
// @version			20.7
// @description		Interface enhancements for DSA
// @author			Dan Overlander
// @include         http://sales.dell.com/*
// @include	        *preol.dell.com*
// @include	        *http://localhost:36865*
// @include			*http://localhost:36158*
// @include			*localhost.dell.com:5000*
// @include			*dell.com/salesapp*
// @include			*online-sales-ux-*
// @exclude         */swagger/*
// @require			https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require         https://greasyfork.org/scripts/23115-tampermonkey-support-library/code/Tampermonkey%20Support%20Library.js?version=730858
// @require         https://greasyfork.org/scripts/383641-aria-favlets/code/ARIA%20Favlets.js?version=702363
// @require		    https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js
// @grant           GM_setValue
// @grant           GM_getValue
// ==/UserScript==

// Since v20.6: Extracting DOM Assistant as a separate script
// Since v20.5: Minor tweaks to Partners link generator
// Since v20.4: Bugfix: Updated config link
// Since v20.3: Tweaking UI compression. Removes Tamper Global script dependency
// Since v20.2: Fixed VERIFY link for partnerUX.  Added United States to country data - missing orgId, of course?  Another new version of TM library. Revamped accessibility scanning, adding img altTag scan.
// Since v20.1: Updated PartnerUX homepage shortcuts for quotes to use updated route.  Merged partner offer- and quote- data. moved some style generation to a one-time area. Allowing .versions to be pasted into quickLink number field.
// Since v20.0: Updated required support library version
// Since v19.5: Tweaks for Partner app.  Added global scan to log multiple (identical) IDs and missing ARIA properties on some elements. Favorites for PartnerUX saved as string-objects. Updated accessibility icon.
// Since v19.4: Added ARIA check button. May move it out to a separate script.
// Since v19.3: Merged the functionality of the DSA-Menu "DSA Plugin" choice with that of the now-global battery icon.
// Since v19.2: Removing errant console.log. Moving setTamperIcon to tamperLibrary
// Since v19.1: Enhanced homepage link algorhythm
// Since v19: Bug Fixes. Colored favorites in partner favorites.
// Since v18: Renamed Import "Emailed Cart" to Import "eQuote" in main navigation. Added Partner UI homepage tweaks.
// Sinve v17: Tweaked app-controls to make them appear more centered.
// Since v16: Included the customer bar resizing css within the preferences-regulated gate. Tweaked it.
// Since v15: added hiding the walkme stuff to the options panel (apparently I did not know it was controlled via profile, first). Reduced timeout; feels more pleasant, but must test in case it kills performance. Adjusted config page title compressed Y value
// Since v14: bugfix: Adjusted customer-ribbon button y-position on orderReview and orderDetails. Created localStorage prefs
// Since v13: Fixed a smry-ctnr CSS bug
// Since v12: Modernized trigger elements. fixed the customer ribbon compression
// Since v11: Hid the walkme stuff
// Since v10: Re-added group alternating background colors
// Since v09: activates compression on scroll
// Since v08: Renamed
// Since v07: Includes G1, Prod
// Since v06: Tweaks to homepage
// Since v05: Fixes (again) the create-quote icon
//            Adds customer-dashboard icon
// Since v04: Added more of my own customers to the highlight-in-red list
// Since v03: Tweaking homepage column title area
// Since v02: updating tm support library. Changing the elements the script waits for on initialization
// Since v01: homepage search fields right-aligned in title rows
//          : doesn't swap col-4 for col-6 except on homepage
//          : COMMENTED OUT : customer ribbon compressed

/*
 * tm is an object included via @require from DorkForce's Tampermonkey Assist script
 */
(function() {
    'use strict';

    var TIMEOUT = 250,
        global = {
            scriptName: 'DSA Interface',
            prefsName: 'uiPrefs',
            prefs: {},
            mems: global != null ? global.mems : {}, // memsName: 'uiMems', // currently no need to actually save these ??
            triggerElements: ['.icon-ui-dell', '.dds__container'],
            isMouseMoved: false,
            areClassesAdded: false,
            partnerClassesAdded: false,
            areAlertsAdded: false,
            isResetting: undefined,
            hpCompressed: false
        },
        page = {
            initialize: function () {
                setTimeout(function () {
                    page.setPrefs();
                    //page.setMems(); // currently no need to actually save these ??
                    page.addClasses();
                    tm.addClasses();
                    tm.setTamperIcon(global);
                    tm.checkNotes(global);
                    page.addHighlights();
                    page.compression();
                    page.alternatingColors();
                    page.adjustPartnerUI();
                }, TIMEOUT);
            },
            setPrefs: function () {
                var currentPrefs = GM_getValue(global.prefsName);
                if (currentPrefs == null || _.isEmpty(JSON.parse(currentPrefs))) {
                    global.prefs = {
                        debugMode: 'false',
                        partnerOffers: [
                            {
                                "user": "[email protected]",
                                "invoices": [
                                    {
                                        "gEnv": "g2",
                                        "offerNum": "50125456.0",
                                        "orgId": "374"
                                    }
                                ]
                            },
                            {
                                "user": "[email protected]",
                                "invoices": [
                                    {
                                        "gEnv": "g2",
                                        "offerNum": "13045689.0",
                                        "orgId": "328"
                                    }
                                ]
                            },
                            {
                                "user": "[email protected]",
                                "invoices": [
                                    {
                                        "gEnv": "g2",
                                        "solutionNum": "104804",
                                        "offerNum": "12009268.0",
                                        "orgId": "370",
                                        "quoteNum": "3000000739319.1"
                                    }
                                ]
                            },
                            {
                                "user": "[email protected]",
                                "invoices": [
                                    {
                                        "gEnv": "g2",
                                        "orgId": "302"
                                    }
                                ]
                            },
                            {
                                "user": "[email protected]",
                                "invoices": [
                                    {
                                        "gEnv": "g2",
                                        "orgId": "8",
                                        "quoteNum": "3000000812572.1"
                                    }
                                ]
                            }
                        ],
                        hiliteInYourCustomers: '[04], [08], RETAIL',
                        hiliteColor: 'red',
                        compressUi: 'false',
                        hideWalkme: 'false'
                    };
                    global.prefs.partnerOffers = JSON.stringify(global.prefs.partnerOffers);//.replace(/(\r\n\t|\n|\r\t)/gm,'');//.replace(/"/gm, '\'');
                    tm.savePreferences(global.prefsName, global.prefs);
                } else {
                    global.prefs = JSON.parse(currentPrefs);
                }
            },
            //             setMems: function () { // currently no need to actually save these ??
            //                 var currentMems = GM_getValue(global.memsName);
            //                 if (currentMems == null || _.isEmpty(JSON.parse(currentMems))) {
            //                     global.mems = {
            //                         dupedIds: []
            //                     };
            //                     tm.savePreferences(global.memsName, global.mems);
            //                 } else {
            //                     global.prefs = JSON.parse(currentMems);
            //                 }
            //             },
            addClasses: function () {
                if (!global.areClassesAdded) {
                    global.areClassesAdded = true;

                    tm.addGlobalStyle('.cust-list-blk:hover {background-color: cornsilk}');
                    tm.addGlobalStyle('.home-sections .dotted {margin-top:3px; margin-bottom:3px;');
                    tm.addGlobalStyle('.home-sections .actv-block {padding-bottom:0;');
                    tm.addGlobalStyle('.singleActivity:hover {background-color: cornsilk;}');

                    tm.addGlobalStyle('.usertag {background-color: greenyellow;}');

                    // homepage column headers
                    tm.addGlobalStyle('.home-col-hdr h3 { font-size:1.3em; font-weight:bold; padding-top:3px; }');

                    // homepage search section
                    tm.addGlobalStyle('#home_search_container { margin-bottom: 0px; }');
                    tm.addGlobalStyle('#home_search_value { height: 30px; }');
                    tm.addGlobalStyle('#duplicate-po h3 { float: left; width: 200px; }');
                    tm.addGlobalStyle('#search_type_label { float: left; width: 110px; position: relative; top: 5px !important; }');
                    tm.addGlobalStyle('#search { float: left; width: 480px; padding: 0px !important; margin: 0px !important; }');
                    tm.addGlobalStyle('#search .input-search { position: initial !important; width: 100% !important; }');

                    // customer ribbon
                    if (global.prefs.compressUi === 'true') {
                        tm.addGlobalStyle('.app-nav {margin-top: 0;}');
                        tm.addGlobalStyle('.app-nav .app-title { padding-top:0; font-size:16px; line-height:1.1; }');
                        tm.addGlobalStyle('.current-business-unit { position:relative; top:-7px; }');
                    }

                    // hide Walk Me Through crap
                    if (global.prefs.hideWalkme === 'true') {
                        tm.addGlobalStyle('#walkme-player, .walkme-custom-icon-outer-div { display: none !important; }');
                    }

                    // ARIA button
                    tm.addGlobalStyle('.ariaButton {position:fixed; z-index:999999999; bottom:0px; right:40px; left:unset; content: url("https://www.dorkforce.com/dsa/preferences-desktop-accessibility-icon.png"); width:16px; height:16px;}');

                    // PartnerUX homepage links
                    tm.addGlobalStyle('#DSAHomePage h4 { margin:0; font-weight:bold !important; } ');
                    tm.addGlobalStyle('.inline {float:left; padding:5px 3px;} ');
                    tm.addGlobalStyle('.aFavoriteQuote       { clear:both; min-height:27px; cursor:default; }' +
                                      '.aFavoriteQuote:hover { background-color:cornsilk; font-weight:bold; }' +
                                      '.favoritesEnd         { clear:both; }');
                    tm.addGlobalStyle('.fixedWidth {width:200px; overflow:hidden; margin-right:10px; }');
                    tm.addGlobalStyle('#quickLink input, #quickLink select, #quickLink button, #quickLink radio {height:25px; margin-left:20px;}');
                    tm.addGlobalStyle('#quickLink { margin: 0 0 20px 0;}');
                    tm.addGlobalStyle('.gEnv { background:LightCyan; }');
                    tm.addGlobalStyle('.dEnv { background:powderBlue; }');
                    tm.addGlobalStyle('.lEnv { background:lightSteelBlue; }');
                    tm.addGlobalStyle('.unlinked { opacity:0.3; }');

                }
            },
            adjustPartnerUI: function () {
                if (global.prefs.debugMode === 'true') {
                    if($('.tamperlabel').length > 0 && $('.ariaButton').length === 0) {
                        $('.tamperlabel').before('<span class="ariaButton"></span>');
                    }
                    tm.getContainer({
                        'el': '.ariaButton'
                    }).then(function($container){
                        $('.ariaButton').css('cursor', 'pointer').unbind('click').on('click', function () {
                            ariaCheck.start(document); // TODO: finish as it doesn't seem to walk the entire dom
                        });
                    });
                }
                var verboseEnv = function(env) {
                    switch(env) {
                        case('g4'):
                            return 'ge4-sit';
                        case('g3'):
                            return 'ge3-sit';
                        case('g2'):
                            return 'ge2-sit';
                        default:
                            return 'ge1-sit';
                    }
                }
                if ($('.channel-header').length > 0 && !global.partnerClassesAdded) {
                    global.partnerClassesAdded = true;
                    tm.addGlobalStyle('.popupDetailWindow { position:fixed !important; }');
                }

                // hide the default popup Close because for some weird reason it's not working
                $('.popupDetailContent.fingery').hide();

                // localize vars
                var partners = global.prefs.partnerOffers != null ? JSON.parse(global.prefs.partnerOffers.replace(/'/gm, '"')) : [];
                partners = partners.sort(function(a, b){
                    if(a.name < b.name) { return -1; }
                    if(a.name > b.name) { return 1; }
                    return 0;
                })

                // modify logo
                var getUrl = window.location;
                var baseUrl = getUrl.protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
                if (baseUrl.indexOf('online-sales') < 0) {
                    baseUrl = 'https://localhost.dell.com:5000/';
                }
                $('.dds__msthd-dell-icon').prop('href', baseUrl).css('color', 'yellow').attr('aria-label', 'Tampermonkey Homepage Link');


                if ($('#myQuotes').length === 0 && $('#DSAHomePage').length > 0) {
                    var countries = countryData();

                    // add quickLink form
                    $('#DSAHomePage').append('<H4 aria-label="Generate the URL for an offer or quote">QuickLink Generator</H4>');
                    var formString = '<div id="quickLink">[NUMBER][REGION][TYPE][SUBMIT]</div>';
                    var regionString = '<select id="regionInfo">[OPTIONS]</select>';
                    var regionOptions = '';
                    var numberString = '<input id="numberInfo" aria-label="Quick Link Generator Input Field"></input>';
                    var typeString =
                        '<input type="radio" name="typeInfo" value="offer" id="typeInfo1"                   /> <label for="typeInfo1">Offer</label>' +
                        '<input type="radio" name="typeInfo" value="quote" id="typeInfo2" checked="checked" /> <label for="typeInfo2">Quote</label>';
                    var submitString = '<button aria-label="Generate a Partner UX offer or quote URL and navigate to it" id="submitQuickLink">Go</button>';
                    regionOptions += '<option value="us/en/" orgId="8">UNITED STATES</option>'; // hack to force US at top
                    _.each(countries, (country) => {
                        regionOptions += '<option value="' + country.url.toLowerCase() + '" orgId="' + country.orgId + '">' + country.name + '</option>';
                    });
                    regionString = regionString.replace('[OPTIONS]', regionOptions);
                    formString = formString.replace('[REGION]', regionString);
                    formString = formString.replace('[NUMBER]', numberString);
                    formString = formString.replace('[TYPE]', typeString);
                    formString = formString.replace('[SUBMIT]', submitString);
                    $('#DSAHomePage').append(formString);

                    $('#submitQuickLink').on('click', () => {
                        var targetUrl = '/salesapp/';
                        var typeInfo = $('input[name=typeInfo]:checked').val();
                        var leNum = $('#numberInfo').val();
                        var leVer = leNum.split('.')[1] != null ? leNum.split('.')[1] : '1';
                        targetUrl += typeInfo === 'offer' ? $('#regionInfo').val() : 'us/en/';
                        targetUrl += typeInfo === 'offer' ? 'offer/' : 'quote/';
                        targetUrl += Math.trunc(Number(leNum)) + '/' + leVer + '/';
                        targetUrl += typeInfo === 'offer' ? $('#regionInfo option:selected').attr('orgId') : '';
                        window.location = (targetUrl);
                        return false;
                    });

                    // add favorites

                    $('#DSAHomePage').append('<H4 id="myQuotes" aria-label="My Favorite Quotes">My Favorite Quotes</H4>');
                    _.each(partners, function(partner) {
                        _.each(partner.invoices, function(invoice) {
                            var country = _.find(countries, function (country) { return country.orgId === Number(invoice.orgId); });
                            var region = country.region.toLowerCase() === 'emea' ? 'EURO' : country.region.toLowerCase() === 'amer' ? 'AMER' : 'ASIA';
                            var cPart = country.url.substr(0, 2);
                            var lPart = country.url.substr(3, 2);
                            var offerNum = invoice.offerNum != null && invoice.offerNum.split('.')[0] != null ? invoice.offerNum.split('.')[0] : invoice.offerNum;
                            var offerVer = invoice.offerNum != null && invoice.offerNum.split('.')[1] != null ? invoice.offerNum.split('.')[1] : '1';
                            var quoteNum = invoice.quoteNum != null && invoice.quoteNum.split('.')[0] != null ? invoice.quoteNum.split('.')[0] : invoice.quoteNum;
                            var quoteVer = invoice.quoteNum != null && invoice.quoteNum.split('.')[1] != null ? invoice.quoteNum.split('.')[1] : '1';
                            var appendString = '<div class="aFavoriteQuote">[COUNTRY][USER][VERIFY][BREAK][CONFIG][BREAK][G-ENV-PARTNER-OFFER][G-ENV-PARTNER-QUOTE][BREAK][DEV-ENV-OFFER][DEV-ENV-QUOTE][BREAK][LOCALOFFER][LOCALQUOTE][BREAK][G-ENV-DSA][BREAK][PCFDSALINK]</div>';
                            var countryLabel = '<div class="fixedWidth">' + country.name + '</div>';
                            var userLabel = '<div class="fixedWidth">' + partner.user + '</div>';
                            var verifyLink = offerNum == null ? '<span class="unlinked">Verify</span>' : '<a href="http://' + invoice.gEnv + 'vmoscux01.olqa.preol.dell.com/solutions/Configurator/api/QuoteCheckout/v1/' + region + '/CheckUserHasQuoteCheckoutAccess/' + offerNum + '/' + offerVer + '/' + partner.user + '">Verify</a>';
                            var configLink =
                                '<a href="https://www.dell.com/Identity/global/Login/a1e7fd82-03de-4731-8899-878cb868b8fa?c=' + cPart + '&l=' + lPart + '&redirecturl=' +
                                'http://www.dell.com/solutions/configurator/' + country.url + 'q_' + country.catalog + '/' + region + '/osc/your-solutions">Config</a>'
                            var gEnvPOffer = offerNum == null ? '<span class="unlinked">' + invoice.gEnv + 'Offer</span>' : '<a href="https://online-sales-ux-' + verboseEnv(invoice.gEnv) + '.ausvdc02.pcf.dell.com/salesapp/' + country.url + 'offer/' + offerNum + '/' + offerVer + '/' + invoice.orgId + '">' + invoice.gEnv + 'Offer</a>';
                            var gEnvPQuote = quoteNum == null ? '<span class="unlinked">' + invoice.gEnv + 'Quote</span>' : '<a href="https://online-sales-ux-' + verboseEnv(invoice.gEnv) + '.ausvdc02.pcf.dell.com/salesapp/' + country.url + 'quote/' + quoteNum + '/' + quoteVer + '">' + invoice.gEnv + 'Quote</a>';
                            var devOffer = offerNum == null ? '<span class="unlinked">devOffer</span>' : '<a href="https://online-sales-ux-dev.ausvdc02.pcf.dell.com/salesapp/' + country.url + 'offer/' + offerNum + '/' + offerVer + '/' + invoice.orgId + '">devOffer</a>';
                            var devQuote = quoteNum == null ? '<span class="unlinked">devQuote</span>' : '<a href="https://online-sales-ux-dev.ausvdc02.pcf.dell.com/salesapp/' + country.url + 'quote/' + quoteNum + '/' + quoteVer + '">devQuote</a>';
                            var gEnvDsa = quoteNum == null ? '<span class="unlinked">SalesApp ' + invoice.gEnv + '</span>' : '<a href="http://' + invoice.gEnv + 'vmcomux01.olqa.preol.dell.com/#/quote/details/QuoteNumber/' + quoteNum + '">SalesApp ' + invoice.gEnv + '</a>';
                            var localOffer = offerNum == null ? '<span class="unlinked">localOffer</span>' : '<a href="https://localhost.dell.com:5000/salesapp/' + country.url + 'offer/' + offerNum + '/' + offerVer + '/' + invoice.orgId + '">localOffer</a>';
                            var localQuote = quoteNum == null ? '<span class="unlinked">localQuote</span>' : '<a href="https://localhost.dell.com:5000/us/en/quote/' + quoteNum + '/' + quoteVer + '">localQuote</a>';
                            var pcfDsaLink = quoteNum == null ? '<span class="unlinked">PCFDSA</span>' : '<a href="https://dsa-sales-ux-ge4-sit.ausvdc02.pcf.dell.com/#/us/en/quote/' + quoteNum + '/' + quoteVer + '">PCFDSA</a>';
                            appendString = appendString.replace('[COUNTRY]', '<span class="inline">' + countryLabel + '</span>');
                            appendString = appendString.replace('[USER]', '<span class="inline">' + userLabel + '</span>');
                            appendString = appendString.replace('[VERIFY]', '<span class="inline">' + verifyLink + '</span>');
                            appendString = appendString.replace('[CONFIG]', '<span class="inline">' + configLink + '</span>');
                            appendString = appendString.replace('[G-ENV-PARTNER-OFFER]', '<span class="inline gEnv">(' + gEnvPOffer + '</span>');
                            appendString = appendString.replace('[G-ENV-PARTNER-QUOTE]', '<span class="inline gEnv">' + gEnvPQuote + ')</span>');
                            appendString = appendString.replace('[DEV-ENV-OFFER]', '<span class="inline dEnv">(' + devOffer + '</span>');
                            appendString = appendString.replace('[DEV-ENV-QUOTE]', '<span class="inline dEnv">' + devQuote + ')</span>');
                            appendString = appendString.replace('[G-ENV-DSA]', '<span class="inline gEnv">' + gEnvDsa + '</span>');
                            appendString = appendString.replace('[LOCALOFFER]', '<span class="inline lEnv">(' + localOffer + '</span>');
                            appendString = appendString.replace('[LOCALQUOTE]', '<span class="inline lEnv">' + localQuote + ')</span>');
                            appendString = appendString.replace('[PCFDSALINK]', '<span class="inline lEnv">' + pcfDsaLink + ')</span>');
                            appendString = appendString.replace(/\[BREAK\]/g, '<div class="inline" style="width:5px;"></div>');
                            $('#DSAHomePage').append(appendString);
                        });
                    });
                    $('#DSAHomePage').append('<div class="favoritesEnd"></div>');

                }
            },
            addHighlights: function () {
                var hiArray = global.prefs.hiliteInYourCustomers != null ? global.prefs.hiliteInYourCustomers.replace(/ */g, '').split(','): [];
                _.each(hiArray, function(hilite) {
                    $('.cust-list-blk a:contains("' + hilite + '")').css('color', global.prefs.hiliteColor);
                    $('.aFavoriteQuote a:contains("' + hilite + '")').css('color', global.prefs.hiliteColor);
                });
            },
            compression: function () {
                if (!global.hpCompressed && global.prefs.compressUi === 'true') {
                    //global.hpCompressed = true;

                    // config page floating title
                    $('.fixed-position-container').css({'top': '106px'});

                    // Column: Your Customers
                    $('.cust-list-blk').css({'height': '22px', 'font-size': '.8em', 'overflow': 'hidden'});
                    $('.icon-small-favorite-100').css({'height': '9px', 'width': '9px', 'background-position': '-287px -46px'});
                    $('.icon-small-favorite-0').css({'height': '9px', 'width': '9px', 'background-position': '-286px -137px'});
                    $('.remove-record').css({'top': '-3px', 'position': 'relative', 'height': '20px'});
                    $('.cust-list-blk a:contains(Create Quote)').css({'position': 'relative', 'float': 'right', 'top': '-13px'}).html('<span class="remove-record leQuote" style="background-position:-46px -144px;">&nbsp;</span>');
                    $('.cust-list-blk a:contains(View Dashboard)').css({'position': 'relative', 'float': 'right', 'top': '-13px'}).html('<span class="remove-record leDashboard" style="background-position:-47px -288px;">&nbsp;</span>');
                    $('.input-search').prev().hide();
                    $('.input-search').css({'position': 'absolute', 'top': '0', 'left': '56%', 'width': '40%'});
                    $('#yourCustomersSection a').eq(0).prop('innerText', 'All');

                    // recent activity
                    $('#homepageController_recentActivity_h').prop('innerText', 'Recent Activity');
                    $('#homepageController_recentActivity_h').parent().find('a').eq(0).prop('innerText', 'All');
                    $('.actv-type span:first-child').css('display', 'none');
                    $('.actv-type span:nth-child(2)').css('float', 'right');
                    $('#recentActivity_sortBy').parent().css({'position': 'absolute', 'top': '0', 'left': '57%', 'width': '40%'});

                    // hide last col
                    if($('.remove-record').length > 0) {
                        if ($('#main .col-md-4:nth-child(5)').length > 0) {
                            $('#main .col-md-4:nth-child(5)').remove();
                            $('#main .col-md-4').toggleClass("col-md-4").toggleClass("col-md-6");
                        }
                    }

                    // hide title
                    $('#home_recentActivity').parent().parent().hide();

                    // compress title bar
                    $('.top-nav').css({'padding': '3px 0 0 0'});
                    $('#dellBrandLogo_goHomePage').css({'font-size': '35px', 'height': '35px'});
                    $('.main-nav').css({'min-height': '40px', 'margin-bottom': '10px', 'height': '40px'});
                    if ($('#welcomeMessage').length === 0) {
                        $('.view-nav-withoutribbon').css({'margin-top': '30px'});
                    } else {
                        $('.app-nav-withoutribbon').css({'margin-top': '0'});
                    }
                    $('.brand-title').css({'line-height': '35px'});
                    $('.content-shell .view-nav').css({'top': '40px'});
                    $('.brand').next().next().css({'position': 'relative', 'top': '-8px'});
                    if($('.remove-record').length === 0) {
                        if($('.view-nav-withoutribbon').length > 0) {
                            $('.content-area').css({'margin-top': '10px'});
                        } else {
                            $('.content-area').css({'margin-top': '80px'}); // customer ribbon = 60px
                        }
                    }

                    // customer ribbon
                    $('.top-nav .container').css({'height': '37px'});
                    $('.content-shell .view-nav').css({'height': '40px', 'min-height': '40px'});
                    if ($('#orderReview_createOrder').length === 0 && $('#orderDetails_moreActions').length === 0) {
                        $('.app-controls').parent().css({'top': '-5px'});
                    } else {
                        $('.app-controls').parent().css({'top': '5px'});
                    }
                    if ($('h2:contains("Service Tag")').length > 0) {
                        $('.app-controls').css({'padding-top': '5px'});
                        if ($('h2:contains("Service Tag Groups")').length > 0) { //whyyyyy
                            $('.app-controls').css({'padding-top': '10px'});
                        }
                    }

                }
            },
            alternatingColors: function () {
                $('.line-group:odd').css('background-color', 'rgba(0, 0, 0, 0.1)');
            }
        };

    /*
     * Global functions
     */

    function initScript () {
        _.each(global.triggerElements, function (trigger) {
            tm.getContainer({
                'el': trigger,
                'max': 100,
                'spd': 1000
            }).then(function($container){
                page.initialize();
            });
        });
    }

    initScript();

    $(document).mousemove(function(e) {
        if (!global.isMouseMoved) {
            global.isMouseMoved = true;
            setTimeout(function() {
                global.isMouseMoved = false;
            }, TIMEOUT * 2);
            initScript();
        }
    });

    window.onresize = function(event) {
        initScript();
    };

    // TODO: verify that this isn't doubling efforts
    $(document).scroll(function() {
        page.compression();
        page.alternatingColors();
    });

    function countryData() {
        var countryArray = [
            {
                "name": "AUSTRIA",
                "region": "EMEA",
                "countryCode": "AT",
                "catalog": 383839,
                "buId": 3838,
                "orgId": 334,
                "url": "at/de/"
            },
            {
                "name": "BELGIUM",
                "region": "EMEA",
                "countryCode": "BE",
                "catalog": 282823,
                "buId": 2828,
                "orgId": 322,
                "url": "be/nl/"
            },
            //             {
            //                 "name": "BELGIUM",
            //                 "region": "EMEA",
            //                 "countryCode": "BE",
            //                 "catalog": 282823,
            //                 "buId": 2828,
            //                 "orgId": 322,
            //                 "url": "be/fr/"
            //             },
            {
                "name": "CZECH REPUBLIC",
                "region": "EMEA",
                "countryCode": "CZ",
                "catalog": 343419,
                "buId": 3434,
                "orgId": 363,
                "url": "cz/en/"
            },
            {
                "name": "DENMARK",
                "region": "EMEA",
                "countryCode": "DK",
                "catalog": 122455,
                "buId": 1224,
                "orgId": 330,
                "url": "dk/en/"
            },
            {
                "name": "EGYPT",
                "region": "EMEA",
                "countryCode": "EG",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "eg/en/"
            },
            {
                "name": "FINLAND",
                "region": "EMEA",
                "countryCode": "FI",
                "catalog": 122271,
                "buId": 1222,
                "orgId": 331,
                "url": "fi/en/"
            },
            {
                "name": "FRANCE",
                "region": "EMEA",
                "countryCode": "FR",
                "catalog": 90917,
                "buId": 909,
                "orgId": 328,
                "url": "fr/fr/"
            },
            {
                "name": "GERMANY",
                "region": "EMEA",
                "countryCode": "DE",
                "catalog": 80852,
                "buId": 808,
                "orgId": 323,
                "url": "de/de/"
            },
            {
                "name": "GREECE",
                "region": "EMEA",
                "countryCode": "GR",
                "catalog": 500092,
                "buId": 5000,
                "orgId": 342,
                "url": "gr/en/"
            },
            {
                "name": "HUNGARY",
                "region": "EMEA",
                "countryCode": "HU",
                "catalog": 545523,
                "buId": 552,
                "orgId": 324,
                "url": "hu/en/"
            },
            {
                "name": "IRELAND",
                "region": "EMEA",
                "countryCode": "IE",
                "catalog": 510293,
                "buId": 5102,
                "orgId": 301,
                "url": "ie/en/"
            },
            {
                "name": "ISRAEL",
                "region": "EMEA",
                "countryCode": "IL",
                "catalog": 545523,
                "buId": 572,
                "orgId": 369,
                "url": "il/en/"
            },
            {
                "name": "ITALY",
                "region": "EMEA",
                "countryCode": "IT",
                "catalog": 616177,
                "buId": 6161,
                "orgId": 329,
                "url": "it/en/"
            },
            {
                "name": "KAZAKHSTAN",
                "region": "EMEA",
                "countryCode": "KZ",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "kz/en/"
            },
            {
                "name": "KENYA",
                "region": "EMEA",
                "countryCode": "KE",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "ke/en/"
            },
            {
                "name": "LITHUANIA",
                "region": "EMEA",
                "countryCode": "LT",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "lt/en/"
            },
            {
                "name": "LUXEMBOURG",
                "region": "EMEA",
                "countryCode": "LU",
                "catalog": 53102,
                "buId": 531,
                "orgId": 366,
                "url": "lu/fr/"
            },
            {
                "name": "MOROCCO",
                "region": "EMEA",
                "countryCode": "MA",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "ma/en/"
            },
            {
                "name": "NETHERLANDS",
                "region": "EMEA",
                "countryCode": "NL",
                "catalog": 212129,
                "buId": 2121,
                "orgId": 325,
                "url": "nl/en/"
            },
            {
                "name": "NIGERIA",
                "region": "EMEA",
                "countryCode": "NG",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "ng/en/"
            },
            {
                "name": "NORWAY",
                "region": "EMEA",
                "countryCode": "NO",
                "catalog": 232380,
                "buId": 2323,
                "orgId": 326,
                "url": "no/en/"
            },
            {
                "name": "POLAND",
                "region": "EMEA",
                "countryCode": "PL",
                "catalog": 313118,
                "buId": 3131,
                "orgId": 362,
                "url": "pl/pl/"
            },
            {
                "name": "PORTUGAL",
                "region": "EMEA",
                "countryCode": "PT",
                "catalog": 292924,
                "buId": 2929,
                "orgId": 364,
                "url": "pt/en/"
            },
            {
                "name": "QATAR",
                "region": "EMEA",
                "countryCode": "QA",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "qa/en/"
            },
            {
                "name": "ROMANIA",
                "region": "EMEA",
                "countryCode": "RO",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "ro/en/"
            },
            {
                "name": "RUSSIA",
                "region": "EMEA",
                "countryCode": "RU",
                "catalog": 54652,
                "buId": 546,
                "orgId": 370,
                "url": "ru/ru/"
            },
            {
                "name": "SAUDI ARABIA",
                "region": "EMEA",
                "countryCode": "SA",
                "catalog": 545523,
                "buId": 584,
                "orgId": 324,
                "url": "sa/en/"
            },
            {
                "name": "SLOVAKIA",
                "region": "EMEA",
                "countryCode": "SK",
                "catalog": 59202,
                "buId": 592,
                "orgId": 365,
                "url": "sk/en/"
            },
            {
                "name": "SLOVENIA",
                "region": "EMEA",
                "countryCode": "SI",
                "catalog": 545523,
                "buId": 5455,
                "orgId": 324,
                "url": "si/en/"
            },
            {
                "name": "SOUTH AFRICA",
                "region": "EMEA",
                "countryCode": "ZA",
                "catalog": 696926,
                "buId": 6969,
                "orgId": 337,
                "url": "za/en/"
            },
            {
                "name": "SPAIN",
                "region": "EMEA",
                "countryCode": "ES",
                "catalog": 191965,
                "buId": 1919,
                "orgId": 327,
                "url": "es/es/"
            },
            {
                "name": "SWEDEN",
                "region": "EMEA",
                "countryCode": "SE",
                "catalog": 121285,
                "buId": 1212,
                "orgId": 332,
                "url": "se/en/"
            },
            {
                "name": "SWITZERLAND",
                "region": "EMEA",
                "countryCode": "CH",
                "catalog": 272742,
                "buId": 2727,
                "orgId": 335,
                "url": "ch/de/"
            },
            //             {
            //                 "name": "SWITZERLAND",
            //                 "region": "EMEA",
            //                 "countryCode": "CH",
            //                 "catalog": 272742,
            //                 "buId": 2727,
            //                 "orgId": 335,
            //                 "url": "ch/fr/"
            //             },
            {
                "name": "TURKEY",
                "region": "EMEA",
                "countryCode": "TR",
                "catalog": 55152,
                "buId": 551,
                "orgId": 371,
                "url": "tr/tr/"
            },
            {
                "name": "UKRAINE",
                "region": "EMEA",
                "countryCode": "UA",
                "catalog": 545523,
                "buId": 547,
                "orgId": 324,
                "url": "ua/en/"
            },
            {
                "name": "UNITED ARAB EMIRATES",
                "region": "EMEA",
                "countryCode": "AE",
                "catalog": 545523,
                "buId": 5959,
                "orgId": 324,
                "url": "ae/en/"
            },
            {
                "name": "United Kingdom",
                "region": "EMEA",
                "countryCode": "UK",
                "catalog": 20204,
                "buId": 202,
                "orgId": 302,
                "url": "uk/en/"
            },
            {
                "name": "United States",
                "region": "AMER",
                "countryCode": "US",
                "catalog": 8,
                "buId": 11,
                "orgId": 8,
                "url": "us/en/"
            },
            {
                "name": "AFGHANISTAN",
                "region": "APJ",
                "countryCode": "AF",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "af/en/"
            },
            {
                "name": "AUSTRALIA",
                "region": "APJ",
                "countryCode": "AU",
                "catalog": 39101,
                "buId": 1401,
                "orgId": 376,
                "url": "au/en/"
            },
            {
                "name": "CAMBODIA",
                "region": "APJ",
                "countryCode": "KH",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "kh/en/"
            },
            {
                "name": "CHINA",
                "region": "APJ",
                "countryCode": "CN",
                "catalog": 46003,
                "buId": 8270,
                "orgId": 374,
                "url": "cn/zh/"
            },
            {
                "name": "FIJI",
                "region": "APJ",
                "countryCode": "FJ",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "fj/en/"
            },
            {
                "name": "HONG KONG",
                "region": "APJ",
                "countryCode": "HK",
                "catalog": 76003,
                "buId": 4042,
                "orgId": 377,
                "url": "hk/en/"
            },
            {
                "name": "INDIA",
                "region": "APJ",
                "countryCode": "IN",
                "catalog": 79003,
                "buId": 1717,
                "orgId": 384,
                "url": "in/en/"
            },
            {
                "name": "INDONESIA",
                "region": "APJ",
                "countryCode": "ID",
                "catalog": 43903,
                "buId": 439,
                "orgId": 390,
                "url": "id/en/"
            },
            {
                "name": "JAPAN",
                "region": "APJ",
                "countryCode": "JP",
                "catalog": 353504,
                "buId": 3535,
                "orgId": 389,
                "url": "jp/ja/"
            },
            {
                "name": "LAOS",
                "region": "APJ",
                "countryCode": "LA",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "la/en/"
            },
            {
                "name": "MALAYSIA",
                "region": "APJ",
                "countryCode": "MY",
                "catalog": 30003,
                "buId": 4046,
                "orgId": 375,
                "url": "my/en/"
            },
            {
                "name": "MONGOLIA",
                "region": "APJ",
                "countryCode": "MN",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "mn/en/"
            },
            {
                "name": "MYANMAR",
                "region": "APJ",
                "countryCode": "MM",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "mm/en/"
            },
            {
                "name": "NEPAL",
                "region": "APJ",
                "countryCode": "NP",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "np/en/"
            },
            {
                "name": "NEW ZEALAND",
                "region": "APJ",
                "countryCode": "NZ",
                "catalog": 36103,
                "buId": 4065,
                "orgId": 378,
                "url": "nz/en/"
            },
            {
                "name": "PAKISTAN",
                "region": "APJ",
                "countryCode": "PK",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "pk/en/"
            },
            {
                "name": "PAPUA NEW GUINEA",
                "region": "APJ",
                "countryCode": "PG",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "pg/en/"
            },
            {
                "name": "PHILIPPINES",
                "region": "APJ",
                "countryCode": "PH",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "ph/en/"
            },
            {
                "name": "SAMOA",
                "region": "APJ",
                "countryCode": "WS",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "ws/en/"
            },
            {
                "name": "SINGAPORE",
                "region": "APJ",
                "countryCode": "SG",
                "catalog": 32003,
                "buId": 1313,
                "orgId": 385,
                "url": "sg/en/"
            },
            //             {
            //                 "name": "SOUTH KOREA",
            //                 "region": "APJ",
            //                 "countryCode": "KR",
            //                 "catalog": 35003,
            //                 "buId": 4545,
            //                 "orgId": 386,
            //                 "url": "kr/fr/"
            //             },
            {
                "name": "SOUTH KOREA",
                "region": "APJ",
                "countryCode": "KR",
                "catalog": 35003,
                "buId": 4545,
                "orgId": 386,
                "url": "kr/ko/"
            },
            {
                "name": "SRI LANKA",
                "region": "APJ",
                "countryCode": "LK",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "lk/en/"
            },
            {
                "name": "TAIWAN",
                "region": "APJ",
                "countryCode": "TW",
                "catalog": 37003,
                "buId": 1841,
                "orgId": 387,
                "url": "tw/zh/"
            },
            {
                "name": "THAILAND",
                "region": "APJ",
                "countryCode": "TH",
                "catalog": 38003,
                "buId": 4444,
                "orgId": 388,
                "url": "th/en/"
            },
            {
                "name": "VIET NAM",
                "region": "APJ",
                "countryCode": "VN",
                "catalog": 34003,
                "buId": 4075,
                "orgId": 380,
                "url": "vn/en/"
            }
        ];
        return countryArray.sort(function(a, b){
            if(a.name < b.name) { return -1; }
            if(a.name > b.name) { return 1; }
            return 0;
        })
    }

})();