
<!DOCTYPE html>

<!--[if IE]><![endif]-->
<!--[if IE 9]> <html class="no-js ie9 lt-ie10" lang="en"> <![endif]-->
<!--[if gt IE 9]><!--> <html class="no-js" lang="en"> <!--<![endif]-->

<script>
var pendoData = {
    visitor: {
        id:          "",
        key:         "",
        package:     "2",
        template:    "portal",
        firstName:   "",
        lastName:    "",
        email:       "",
        companyName: "",
        companyNum:  "",
        role:        "standard"
    },
    account: {
        id:          "descovacuum",
        key:         "4E578D6944DF40B4951A03B93A4B97AF",
        package:     "2"
    },
    session: {
        loggedIn:    "False",
        superUser:   "False"
    }
};
(function(apiKey){
    (function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=[];
    v=['initialize','identify','updateOptions','pageLoad'];for(w=0,x=v.length;w<x;++w)(function(m){
        o[m]=o[m]||function(){o._q[m===v[0]?'unshift':'push']([m].concat([].slice.call(arguments,0)));};})(v[w]);
        y=e.createElement(n);y.async=!0;y.src='https://cdn.pendo.io/agent/static/'+apiKey+'/pendo.js';
        z=e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,'script','pendo');

        pendo.initialize(pendoData);
})('53aab975-b5c0-47bb-4f37-d7849209d68c');
</script>

<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=2">
	
	

	<title>Desco Vacuum Cleaner Supply Co. Inc.</title>
	<meta name="description" content="Welcome to Desco Vacuum Cleaner Supply Co. Inc. This website is for the Vacuum Repair, Sales, & Installation Trade Only. We do ?not? sell to End users, and we do not maintain a retail/public website. Take a spin, peruse the FAQ section, and don?t hesitate to call if you have questions.">
	<meta name="keywords" content="">
  <link href="https://fonts.googleapis.com/css?family=Heebo:400,500,700&display=swap" rel="stylesheet"><link rel="stylesheet" href="templates/fa/css/font-awesome.min.css">

	<link rel="shortcut icon" type="image/x-icon" href="https://dqmy05zjbnp6b.cloudfront.net/images/favicon.ico?v=3983528980">
	<link rel="icon" type="image/png" href="" sizes="16x16" />
	<link rel="icon" type="image/png" href="" sizes="32x32" />

	<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/v/dt/dt-1.10.16/cr-1.4.1/fh-3.1.3/r-2.2.0/rg-1.0.2/datatables.min.css"/>

	
		<link rel="stylesheet" href="css/bootstrap-dashboard.css?376fd14">
		<link rel="stylesheet" href="css/dashboard-user.css?376fd14">
		<link rel="stylesheet" href="../css/focus.css?376fd14">

	
    <link rel="stylesheet" href="css/notemplate.css?376fd14">


    <style>

        /* 
        ### Skins CSS Overrides
        */
        
                /* Dashboard Template Styles 
                --------------------------------------------------------------- */

                h1, h2, h3, h4, h5, h6,
                input, button, select, textarea,
                body, body.dashboard {
                    font-family: Heebo
                }

                a { 
                    color: #0055a5; 
                }

                .text-warning,
                a.text-warning {
                    color: #8a6d3b;
                }

                .text-warning:hover {
                    color: #8a6d3b;
                }

                a.text-warning:hover {
                    color: #66512c;
                }

                .text-danger,
                a.text-danger {
                    color: #a94442;
                }

                .text-danger:hover {
                    color: #a94442;
                }

                a.text-danger:hover {
                    color: #843534;
                }

                .text-success,
                a.text-success {
                    color: #3c763d;
                }

                .text-success:hover {
                    color: #3c763d;
                }

                a.text-success:hover {
                    color: #2b542c;
                }

                .text-info,
                a.text-info {
                    color: #31708f;
                }

                .text-info:hover {
                    color: #31708f;
                }

                a.text-info:hover {
                    color: #245269;
                }

                li.active>a,
                a.active,
                a:hover,
                a:focus { 
                    color: rgb(26,110,190); 
                }

                li>a.activity-nav__link {
                    color: #333333e6;
                }

                li>a.activity-nav__link.active,
                li>a.activity-nav__link:hover,
                li>a.activity-nav__link:focus {
                    color: #333333;
                }

                .portal-home .thumbnail:hover {
                    color: rgb(26,110,190); 
                    border-color: rgb(26,110,190);
                }

                .portal-home .thumbnail:active {
                    border-color: #ddd;
                }

                h1, h2, h3, h4, h5, h6, 
                .formblock-heading, 
                legend, 
                .checkout-section-heading, 
                .checkout-section.active .checkout-section-heading { 
                    color: #000000; 
                }

                .pace .pace-progress {
                    background: #0055a5;
                }


                /* Default buttons 
                --------------------------------------------------------------- */

                .btn-link {
                    color: #0055a5;
                }

                .btn-link:not([disabled]):hover, 
                .btn-link:not([disabled]):focus, 
                .btn-link:not([disabled]):active, 
                .btn-link:not([disabled]).active {
                    color: rgb(26,110,190);
                }

                /* Primary buttons */
                .btn-primary, .btn-primary.button {
                    background-color: #0055a5;
                    border-color: #0055a5;
                    color: #FFFFFF;
                }

                .btn-primary:not([disabled]):hover, 
                .btn-primary:not([disabled]):focus, 
                .btn-primary:not([disabled]):active, 
                .btn-primary:not([disabled]).active, 
                .btn-primary:not([disabled]).button:hover, 
                .btn-primary:not([disabled]).button:focus, 
                .btn-primary:not([disabled]).button:active, 
                .btn-primary:not([disabled]).button.active {
                    background-color: rgb(26,110,190);
                    border-color: rgb(26,110,190);
                    color: #FFFFFF;
                }

                /* Secondary buttons */
                .btn:not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info), 
                .btn:not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).button {
                    background-color: #0055a5;
                    border-color: #0055a5;
                    color: #0055a5;
                }

                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info):hover, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info):focus, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info):active, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).active, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).button:hover, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).button:focus, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).button:active, 
                .btn:not([disabled]):not(.btn-primary):not(.btn-error):not(.btn-danger):not(.btn-warning):not(.btn-success):not(.btn-info).button.active {
                    background-color: rgb(26,110,190);
                    border-color: rgb(26,110,190);
                    color: #0055a5;
                }

                .list-group-item.active, 
                .list-group-item.active:hover, 
                .list-group-item.active:focus {
                    color: #FFFFFF !important;
                    border-color: #0055a5 !important;
                    background-color: #0055a5 !important;
                }

                /* Dashboard Header
                --------------------------------------------------------------- */

                .focus-header,
                .app-settings__tabs,
                .dashboard-header-1 {
                    background-color: #FFFFFF;
                    color: #333333;
                    border-bottom: 1px solid rgb(230,230,230);
                }

                .focus-header__exit-wrapper {
                    border-color: rgb(230,230,230);
                }

                .focus-header__exit {
                    color: #333333;
                }
                
                .focus-header__exit:focus,
                .focus-header__exit:active,
                .focus-header__exit:hover {
                    color: #333333 !important;
                    background-color:  rgb(230,230,230);
                }

                body.dashboard:not(.menu-open) .dashboard-header-1 {
                    border-left: none;
                }
                
                body.dashboard .off-canvas-hide,
                body.dashboard.-loading-dom .menu-shelf__btn-wrapper,
                .dashboard-header-1 .app-navicon {
                    color: #333333;
                    border-left: 1px solid rgb(230,230,230);
                }

                body.dashboard .off-canvas-show {
                    color: #333333;
                    border-right: 1px solid rgb(230,230,230);
                }

                @media (max-width: 480px) {
                    .dashboard-header-1 .app-logo {
                        border-right: 1px solid rgb(230,230,230);
                    }
                }

                .dashboard-header-1 .app-logo__validip-name:after {
                    background-color: rgb(230,230,230);
                }

                body.dashboard .off-canvas-hide:hover,
                .dashboard-header-1 .app-navicon:not(.app-logo):hover {
                    color: #333333;
                    border-left: 1px solid rgb(230,230,230);
                    background-color: rgb(245,245,245);
                }

                .dashboard-header-1 .app-logo:hover {
                    background-color: transparent;
                }

                body.dashboard .off-canvas-show:hover {
                    color: #333333;
                    border-right: 1px solid rgb(230,230,230);
                    background-color: rgb(245,245,245);
                }

                body.dashboard .off-canvas-hide:active,
                .dashboard-header-1 .app-navicon:not(.app-logo):active {
                    color: #333333;
                    background-color: rgb(250,250,250);
                }

                .dashboard-header-1 .app-logo:active {
                    background-color: transparent;
                }

                body.dashboard .off-canvas-show:active {
                    color: #333333;
                    background-color: rgb(250,250,250);
                }

                .dashboard-header-1 .app-navicon:not(.app-logo).active {
                    color: #333333;
                    background-color: rgb(250,250,250);
                }

                .dashboard-header-1 .app-navicon:not(.app-logo).active:hover {
                    color: #333333;
                    background-color: rgb(245,245,245);
                }

                .dashboard-header-1 .app-navicon:not(.app-logo).active:active {
                    color: #333333;
                    background-color: rgb(250,250,250);
                }

                .dashboard-header-1 .app-navicon .badge {
                    background-color: #0055a5;
                    color: #FFFFFF;
                }

                #dashboard-header-1 .header__search__button {
                    background-color: #0055a5;
                    color: #FFFFFF;
                }

                #dashboard-header-1 .header__search__button:hover,
                #dashboard-header-1 .header__search__button:focus {
                    color: #FFFFFF;
                    background-color: rgb(26,110,190);
                }

                .dashboard-header-1 .menu-drawer__lock {
                    color: #333333;
                    border: none;
                    background: none;
                }

                .dashboard-header-1 .menu-drawer__lock:hover,
                .dashboard-header-1 .menu-drawer__lock:focus,
                .dashboard-header-1 .menu-drawer__lock:active,
                .dashboard-header-1 .menu-drawer__lock.active {
                    color: #333333;
                    border: none;
                    background: none;
                }

                .app-cartqty {
                    color: #333333;
                }

                .menu-drawer__filter-search.input-search input:focus,
                code:focus, pre:focus, select:focus, textarea:focus, input:not(.btn):focus {
                    border-color: #00A3E0;
                    box-shadow: 0 0 0 2px rgba(0, 163, 224, 0.15);
                }

                .ac_results li.ac_over {
                    background-color: #0055a5;
                }

                @media (max-width: 979px) {
                    .app-search {
                        background-color: #FFFFFF;
                        color: #333333;
                    }
                }


                /* Products
                --------------------------------------------------------------- */

                .prod-pricing .retail {
                    color: #0055a5;
                }


                /* Dashboard Sidebars
                --------------------------------------------------------------- */
                
                .toolbar {
                    background-color: #0055a5;
                }

                @media (max-width: 480px) {
                    body:not(.menu-open) .toolbar {
                        background: none !important;
                    }
                }

                .toolbar__btn--mobile {
                    color: #333333;
                    background: #FFFFFF;
                }

                body.menu-open .toolbar__btn--mobile {
                    color: #FFFFFF;
                    background: #0055a5;
                }

                .toolbar:before {
                    background-color: #0055a5;
                }

                .toolbar__btn {
                    color: #FFFFFF;
                }

                .toolbar__btn:hover {
                    background-color: rgb(56,141,221);
                }
                
                .toolbar__btn:active {
                    background-color: rgb(76,162,242);
                }
                
                .toolbar__btn.active {
                    background-color: rgb(46,131,211);
                }
                
                .toolbar__btn.active:hover {
                    background-color: rgb(56,141,221);
                }
                
                .toolbar__btn.active:active {
                    background-color: rgb(51,136,216);
                }
                
                .menu-drawer {
                    background-color: #FFFFFF;
                    color: #333333;
                    border-right: 1px solid rgb(230,230,230);
                }

                .menu-drawer .linkset>li>a {
                    color: rgba(51,51,51,0.9);
                }

                .menu-drawer .linkset>li>a:hover {
                    color: #333333;
                    background-color: rgb(247,247,247);
                }

                .menu-drawer .linkset>li>a:focus {
                    color: #0055a5;
                }

                .menu-drawer .linkset>li>a:active {
                    color: #333333;
                    background-color: rgb(252,252,252);
                }

                .menu-drawer .linkset >li > a.active {
                    color: #333333;
                    background-color: rgb(247,247,247);
                    color: #0055a5;
                }

                .menu-drawer .linkset ul > li,
                .childlink__actions .add-to-quick-access,
                .childlink__actions .add {
                    border-color: rgb(245,245,245);
                }

                .menu-drawer .linkset > li.open > a,
                .menu-drawer .linkset ul > li.open > a {
                    background-color: rgb(247,247,247);
                }

                .menu-drawer .linkset > li.open > a:hover,
                .menu-drawer .linkset ul > li.open > a:hover {
                    background-color: rgb(242,242,242);
                }

                .menu-drawer .linkset > li.open > a:active,
                .menu-drawer .linkset ul > li.open > a:active {
                    background-color: rgb(250,250,250);
                }

                .menu-drawer .linkset ul li > a.active {
                    color: #0055a5;
                }

                .menu-drawer .linkset ul li > a.active:hover {
                    background-color: rgb(247,247,247);
                }

                .menu-drawer .linkset ul li > a.active:active {
                    background-color: rgb(250,250,250);
                }

                .menu-drawer .linkset ul li > a {
                    color: rgba(51,51,51,0.8);
                }

                .menu-drawer .linkset ul li > a:hover {
                    color: #333333;
                    background-color: rgb(245,245,245);
                }

                .menu-drawer .linkset ul li > a:active {
                    color: #333333;
                    background-color: rgb(250,250,250);
                }

                .menu-drawer .linkset ul li > a:focus {
                    color: #333333;
                    color: #0055a5;
                }

                .menu-drawer .linkset li .highlight {
                    color: #0055a5;
                }

                .menu-drawer__filter-wrapper {
                    background: #FFFFFF;
                    border-bottom: 1px solid rgb(230,230,230);
                }

                .menu-drawer__collapse {
                    color: rgba(51,51,51,0.2);
                    border-left: 1px solid rgb(230,230,230);
                    background: none;
                }

                .menu-drawer__collapse:hover {
                    color: #0055a5;
                    background-color: rgb(245,245,245);
                }

                .menu-drawer__collapse:active {
                    color: #0055a5;
                    background-color: rgb(250,250,250);
                }

                .menu-drawer__menu-title {
                    color: #333333;
                    border-bottom: 1px solid rgb(230,230,230);
                }

                .childlink__actions .add,
                .childlink__actions .add-to-quick-access {
                    color: rgba(51,51,51,0.2);
                }

                .childlink__actions .add:hover,
                .childlink__actions .add-to-quick-access:hover {
                    background-color: rgb(245,245,245);
                }

                .childlink__actions .add:focus {
                    color: #0055a5;
                }

                .childlink__actions .add:active,
                .childlink__actions .add-to-quick-access:active {
                    background-color: rgb(250,250,250);
                }

                .childlink__actions .add.active {
                    background-color: none;
                    color: #0055a5;
                }

                .menu-drawer__add-card {
                    color: #333333;
                }

                .menu-drawer__add-card:hover,
                .menu-drawer__add-card:focus {
                    color: #0055a5;
                    background-color: rgb(245,245,245);
                }

                .menu-drawer__add-card:active {
                    background-color: rgb(250,250,250);
                }

                .menu-drawer__add-card:hover .menu-drawer__add-icon {
                    color: #0055a5;
                }

                .app-settings__tab-item:hover,
                .app-settings__tab-item--no-scroll:hover {
                    color: #0055a5;
                }

                .app-settings__tab-item:active,
                .app-settings__tab-item--no-scroll:active {
                    background-color: rgb(252,252,252);
                }

                .app-settings__tab-item.active,
                .app-settings__tab-item--no-scroll.active {
                    background-color: rgb(250,250,250);
                    color: #0055a5;
                }

                .app-settings__tab-item.active:active,
                .app-settings__tab-item--no-scroll.active:active {
                    background-color: rgb(245,245,245);
                }

                .number-callout {
                    background: #0055a5;
                }

                /* Breadcrumbs
                --------------------------------------------------------------- */

                body.dashboard .breadcrumb.breadcrumb-cart li.active {
                    background: #0055a5;
                    color: #FFFFFF;
                }

                body.dashboard .breadcrumb.breadcrumb-cart li.active:after {
                    border-color: transparent;
                    border-left-color: #0055a5;
                    border-width: 20px;
                }

                /* Tooltip Popups
                --------------------------------------------------------------- */

        

                
    </style>
<script>
    // This function is needed for JS hooks.
    function getOriginalPageName() {
        return 'signin.asp';
    }

    function getUrlPath() {
        return '/signin.asp';
    }

    function getUrl() {
        return '/signin.asp?autopage=%2Fsitemap.asp';
    }

    function handleImageError(img, noImagePath){
        if(!noImagePath) {
            noImagePath = 'images/no-image.png';
        }
        if ($(img).attr('src') !== noImagePath) {
            $(img).attr('src', noImagePath);
        }    
    }
    var sitename = "descovacuum";
    var isWorkerDomain = false;
    var processPageTitle = isWorkerDomain && !false;
    var bValidIp = true;
    var sOfUrl   = 'https://www.descovac.com';
</script>

<script>
	var utils = {};

    utils.getParameter = function (param, context) {
        var value;
        if(!context) context = window;
        var parameters = context.location.search.replace('?', '');

        if (parameters) {
            var pattern = new RegExp('\\b' + param + '=([^;&]+)', 'gi');
            value = parameters.split(pattern)[1];
        }

        return value || '';
    };

    utils.buildImagePath = function(image){
        if(image && image.indexOf("http") > -1){
            imageUrl = image.replace(/http:/i, 'https:');
        }else{
            image = image.replace(oConfig.storefrontUrl, oConfig.sessionData.cdnUrl).toLowerCase();
            if(!image){
                imageUrl = oConfig.noImagePath || oConfig.sessionData.cdnUrl.replace(/\/+$/, '') + '/images/' + oConfig.defaultImage.replace(/^\/+/, '');
            }
            else if(image.indexOf("/") > -1){
                imageUrl = oConfig.sessionData.cdnUrl.replace(/\/+$/, '') + '/' + image.replace(/^\/+/, '');
            }
            else{
                imageUrl = oConfig.sessionData.cdnUrl.replace(/\/+$/, '') + '/images/' + image.replace(/^\/+/, '');
            }
        }
        return imageUrl + '?v=3983528980';
    };

    utils.pageUrl = location.href.replace(/.+\//, '');
    utils.loginUrl = 'security_logon.asp?autopage=' + encodeURIComponent(utils.pageUrl);

    utils.pageType = function(){
        var pageType = "";
        if(utils.pageUrl == '' && pageType == ''){
            pageType = 'home';
        }else if(pageType != ''){
            switch(pageType){
                case 'prodcat':
                case 'product':
                    pageType = 'catalog';
                    break;
                case 'page-section':
                case 'webpage':
                    pageType = 'content';
                    break;
                default:
                    pageType = 'other';
                    break;
            }
        }else{
            switch(getOriginalPageName()){
                case 'pc_product_detail.asp':
                case 'pc_combined_results.asp':
                    pageType = 'catalog';
                    break;
                case 'showcart.asp':
                case 'account.asp':
                    pageType = 'checkout';
                    break;
                default:
                    pageType = 'other';
                    break;

            }
        }
        return pageType;
    }

    utils.htmlEncode = function(value){
        return $('<textarea/>').text(value).html();
    }

    utils.htmlDecode = function(value){
        return $("<textarea/>").html(value).text();
    }
</script>
<script>
    var cimcloud = {
        helpers: {
            urlPath: getUrlPath,
            loginUrl: utils.loginUrl,
            pageType: utils.pageType,
            urlParameter: utils.getParameter,
            buildImagePath: utils.buildImagePath
        },
        session: {
            accountNumber: "",
            accountName: "",
            username: "",
            email: "",
            firstName: "",
            lastName: "",
            sitename: "descovacuum"
        }
    }
</script>


<script src="/js/bundles/coreTop.js?376fd1471434e59626597a413962b4402949459c" ></script>


<script src="/js/bundles/corePlugins.js?376fd1471434e59626597a413962b4402949459c" ></script>


<script src="/js/bundles/coreKO.js?376fd1471434e59626597a413962b4402949459c" ></script>


<script src="/js/bundles/coreVendors.js?376fd1471434e59626597a413962b4402949459c" ></script>
        <!-- Start Header Custom Code -->
        <!-- Desco Vac CIM Customizations - Header CSS -->
<link href="/private-landing-page.css" rel="stylesheet" />
<style type="text/css">
/*Main Theme Adjustments - Desco*/


/* site-wide fonts */
.nav-header, #retail-topbar-left-menu a {text-transform:uppercase!important;}
.retail-header-1 #retail-topbar-left-menu a {text-transform:uppercase!important; font-size:14px;}

/* Hidden Elements */
.retail-header-1 .topbar .container-fluid, 
.footer-email-list,
 .footer-reseller,
 .home-description:after, 
 .home .page-main,
 .retail-footer__company-name, 
 .retail-footer__address-text, 
 .retail-footer__email,
 .retail-footer__address br{display:none;}  
@media (max-width: 1025px){
  .logo-bar__right #retail-topbar-left-menu{display:none;}
  .retail-header-1 .topbar .container-fluid{display:block;}
}

/* Logo */
.retail-header-1 .logo-bar__logo .logo img{padding:0;}
.retail-header-1 .logo-bar__logo{margin-bottom:10px;}
/* Header search */
.retail-header-1 .header__hero-search{padding:0!important;margin:0;}
.retail-header-1 .header__hero-search__header{display:none;}
.retail-header-1 .header__hero-search .u-search-text .input-search{height:30px!important; border-radius:0; min-height:30px;}
.retail-header-1 .header__hero-search .u-search-btn button.btn{height:30px;border-radius:0;min-height:30px; line-height:1px!important;    padding: 0; width: 30px;background:black!important; color:white!important}

@media (min-width: 980px){
  .header__hero-search__container{position:relative; max-width:1600px!important;}
  .retail-header-1 .header__hero-search form {position: absolute;top: -82px;right: 15px;width: 250px; max-width:100%;}
}

@media (max-width: 1200px){
  .retail-header-1 .header__hero-search form{top:-120px}
}


@media (max-width: 980px){
    .retail-header-1 .header__hero-search form{top:0px;}
}
  
/* Navigation */
.logo-bar__right{margin-right:250px;}  
@media (max-width: 1200px){
  .logo-bar__right{margin-right:0;}  
}

[class*="retail-header"] .topbar__menu-toggle{color: white!important;}

/* Banner / Product Search */
.home .home-description{/*background-image:url(images/rotator-1-cropped.jpg); background-size:contain;*/ background-image:url(images/header.jpg); background-size:cover;  padding:20% 0 0;background-repeat: no-repeat; background-position: center; }
.prodcat .product-search {
    max-width: 980px;
    margin: 0 auto!important;
}
.product-search form{display: flex;  flex-wrap: wrap;  justify-content: space-between; width: 80%; width:94%; margin:  0 auto 24px;}
.product-search form label{display: block;margin-bottom:0;font-size: 28px; line-height: 36px; }
.product-search form button, .product-search form button:hover{background: white!important; color: #333!important; border: 0; padding: 0 30px; line-height: 36px;height:36px }
.product-search form select{margin: 0;}
@media (max-width: 980px){
    .product-search form label{display: none!important;}
    
}
@media (max-width: 730px){
  .product-search form select{width: 100%; margin-bottom: 10px;}
  .product-search form .filter-wrap, .product-search form .filter-wrap input{width: 100%; }
}

/* Manufacturers Section */
.manufacturers-wrap .trending-products__title{text-transform: uppercase;}
.manufacturer-logos{display: flex;flex-direction: row; flex-wrap: wrap;    justify-content: space-between;}
.manufacturer-logos img{display: block; float: left;flex: 0 0 auto; align-self: center; width:16%;}
@media (max-width: 768px){
  .manufacturer-logos img{width:25%;}
}
@media (max-width: 500px){
  .manufacturer-logos img{width:33.33%;}
}


/* Lower */
.marketing-wrap{display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; margin-top: 50px;}
.marketing-wrap .marketing__well{width: 33%;}
.marketing-wrap .marketing__well img{width: 100%;}

@media (max-width: 768px){
  .marketing-wrap{display: block;}
  .marketing-wrap .marketing__well{width: 100%; margin-bottom: 10px;}
}


/* Footer */
.retail-footer-1{margin-top: 20px;}
.retail-footer-1 a, .retail-footer-1 .nav-header span{color:#A4A4A4!important; text-decoration:none!important;}

@media (max-width: 980px){
  .retail-footer-1 #retail-footer-nav__menu .nav-header, .retail-footer-1 #retail-footer-nav__categories .nav-header, .retail-footer-1 #retail-footer-nav__social .nav-header { display:block; }  
  .retail-footer-1 #retail-footer-nav__social>li{display: block;}
}

/*.manufacturer-logos > a > img {
    display: block!important;
    float: left!important;
    flex: 0 0 auto!important;
    align-self: center!important;
    width: 16%!important;
    border: 2px solid yellow!important;
}
  */
/*
.manufacturer-logos > img {
    display: block!important;
    float: left!important;
    flex: 0 0 auto!important;
    align-self: center!important;
    width: 16%!important;
}*/
 .manufacturer-logos > * {
    display: block!important;
    float: left!important;
    flex: 0 0 auto!important;
    align-self: center!important;
    width: 16%!important;
} 
  .manufacturer-logos > * img{width:100%!important;}

  #SCHEMATICS .module-body{background:none!important}
  #SCHEMATICS .multi-select-help-text{color:white!important;}
  #SCHEMATICS .multi-select-submit{margin: 0!important;background: white;border: none;color: #333;}
  #nys_section_SCHEMATICS{display:none!important;}
  .product-search .module, .product-search .module-body{background:none!important; box-shadow:none!important;}
  #faceted-search-container-custom h2, 
  #faceted-search-container-custom .close{display:none;}

  /* main body width and left category sidemenu width adjustments */
  .container-fluid {
      margin-left: auto;
      margin-right: auto;
      max-width: 1600px;
  }  

  .catalog-sidebar {width: 460px;}
    @media (max-width: 1400px){  
        .catalog-sidebar {width: 360px!important;}
    }
    @media (max-width: 1100px){  
        .catalog-sidebar {width: 260px!important;}
    }

  /* left category sidemenu style adjustments */
  #catalog-sidebar a{color:#333;}
  #catalog-sidebar .category-window__body>.linkset li.active>a {color:#0255A5; background:none}
  .catalog-sidebar .link-parent.open > a {color: white!important;background-color:#0255A5!important; }
  #catalog-sidebar .category-window__body>.linkset li>a:hover{background-color:#3677B9!important ; color:white!important;}  

  
  
  .resourcecenter .home-description, 
        .contact_us .home-description, 
        .favorites_lists .home-description, 
        .sales_orders .home-description,
        .shipments .home-description, 
        .addresses .home-description,
        /*.dashboard .home-description,*/
        .schematics .home-description,
  .webpage .home-description{display:none!important}
.login-error-alert{width:500px!important;}  
  @media (max-width: 480px){
  .login-error-alert{top:-340px!important;}
  }

/* Product List Page */
[data-layout="list"] .prod-ds {height:3.8em!important;}

  
/* Product Details Page */
.detail-img-container #prodpicthumb {max-height:510px!important;}

  .retail-header-1 .logo-bar__right .linkset a{font-size:14px;}
  .home-ul{border-right:1px solid white; text-align:center!important;}
  .retail-header-1 #retail-topbar-left-menu{white-space:nowrap;}
  
@media (max-width: 600px){

  .home-description{background-image:none!important;}
  .home-description .product-search form::before{
  	content: 'Make & Model Search';
  	padding:5px 0;
  }
  html body .home-description{height:185px!important;}
  
}
  
  @media (max-width: 1475px){
    body .home-ul{display:none!important;}
  }
  @media (max-width: 1400px){

  
  
  .app-signin-form{width:100%!important;}
  body .app-signin-form .well{width:100%!important;}
  #logon_container{width:95%!important;}    
  #logo-bar a {font-size: 13px!important;}
  
  
  }
  
  @media (max-width: 1275px){
  	.signin .linkset a.header__signin-open, .signin .linkset a.header__user-menu__toggle{padding:0!important;}
  	.signin #retail-topbar-left-menu-signin > li > a{    padding: 8px 5px!important; }
  }
  @media (max-width: 980px){
  body .home-ul{display:block!important;}
  
  }
  .login-error-alert .alert{font-size:12px!important; white-space:nowrap!important;}
  body .home-ul a{ padding: 10px 10px 10px 0px!important; }
  #retail-topbar-left-menu-signin{white-space:nowrap!important;}
  
  @media (min-width: 1200px){
  		body .app-signin-form{width:96%!important;max-width: 1608px!important;}
		body #logon_container { width: 100%!important;padding-right: 430px!important; box-sizing: border-box!important;background: url(images/marketing-well-placeholder-2.jpg) no-repeat 99% center;}  
  		body .app-signin-form .well{width:100%!important}
  
  }

</style>


        <!-- End Header Custom Code -->
</head>

<body 
    class="signin interior dashboard t-ui-phase-3 site-type-2 no-template loggedout    t-ui-phase-3 no-template interior loggedout site-type-2 -loading-dom -loading-window" 
    
>
    

    	
<script>
var timerStart = Date.now();  
var lastElapsed = 0; 
var pageHitDate = new Date();
var pageLoad = {
    pageHitKey: '8DB19C2300704F1DB35E07BDF16D46B5',
	sessionId: '1AD9CAFADF6F46278D5D4D367AAEBAF0',
	orderId: '',
	createDate: (pageHitDate.getMonth()+1) + "/"
                + pageHitDate.getDate() + "/" 
                + pageHitDate.getFullYear() + " "  
                + pageHitDate.getHours() + ":"  
                + pageHitDate.getMinutes() + ":" 
                + pageHitDate.getSeconds(),
    priorTimeFrom: '',
    priorTime: '',
    urlRoot: 'www.descovac.com',
    pageName: 'signin.asp',
    uri: window.location.href,
	querystring: 'autopage=%2Fsitemap.asp',
	logs: [],
    clientTime: 0,
    serverTime: 0,
	totalTime: 0,
    dbReadCount: 0,
    dbWriteCount: 0
}; 

function addTimer(s) {
	var elapsed = (Date.now()-timerStart); //KEEP milliseconds
	var log = {
        source: 3,
        stepWithinSource: pageLoad.logs.filter( function(obj) { obj.source === 3 }).length,
        nickname: s,
        stepTime: elapsed - lastElapsed,
        cumulativeTime: elapsed
	};
	pageLoad.logs.push(log);
	lastElapsed = elapsed;
}

function logPageLoad() {
    if(pageLoad.logs.length > 0) {
        //sum the server-side, object, & client-side times onto the header.
        var serverTime=0;
        var maxClientSide=0;
        var len = pageLoad.logs.length-1;
        $.each(pageLoad.logs,function(i,o){
            if(o.source==0) { //server-side`
                serverTime=serverTime+o.cumulativeTime;
                pageLoad.dbReadCount += o.dbReadCount;
                pageLoad.dbWriteCount += o.dbWriteCount;
            /*} else if(o.source==2) { //object.. but these times are actually included in the client-side time since it is an ajax call. Don't add it twice. */
            } else if(o.source==3 && o.cumulativeTime > maxClientSide) { // on the last client-side record
                maxClientSide=o.cumulativeTime;
            }
        });
        var pt = pageLoad.priorTime;
        if(pt != "" && !isNaN(pt)){
            pageLoad.priorTime = parseFloat(pt);           
        } else {
            pageLoad.priorTime = 0;
        }
        pageLoad.serverTime = serverTime;
        pageLoad.clientTime = maxClientSide
        pageLoad.totalTime = parseInt(serverTime + maxClientSide + pageLoad.priorTime); //trim decimals
        $.ajax({
            url: '/api/timers/paymentpage/8DB19C2300704F1DB35E07BDF16D46B5',
            data: JSON.stringify(pageLoad),
            type: "POST",
            contentType: "application/json"
        });
        drawPageHitData();
        pageLoad.logs = []; //<-- this is cleared so that the page hit isn't logged more than once.. See containing IF block...
    }
}

function drawPageHitData() {
    
}

function toSecString(ms) {
    var s = (parseInt(ms*10)/10); //only keep 1 decimal
    s = parseInt(s) / 1000;

    return s + "sec(s)";
}

function addPageLoadData(data) {
    /*
    OO data is an object with 3 props: reads, writes, details[]
    */
    if(data.reads) {
        pageLoad.dbReadCount += data.reads;
    }
    if(data.writes) {
        pageLoad.dbWriteCount += data.writes;
    }
    if(data.details) {
        pageLoad.logs = pageLoad.logs.concat(data.details);
    } 
}

addTimer('master top');
</script>

        
        <div class="app-signin dash-landing u-card">
            
    <style>      
        .app-signin {
            max-width: 980px;
        }
    </style>
    
    <header class="private-mode__header">
        <a href="https://www.descovac.com" name="Logo link" class="private-mode__main-logo">
            <img src="https://dqmy05zjbnp6b.cloudfront.net/images/desco_logo.jpg?v=3983528980" alt="Logo">
        </a>
    </header>
    <div id="signedOutContent" class="private-mode">
                <div class="app-signin-content pull-left">
                    <style type="text/css">
	#landing-registration-form p { color: #333 !important; }
	
	.app-signin-content { display: block !important; }
	
	.signin .topbar { background-color: #222; color: #fff }
	
	.signin .topbar a { color: inherit }
	
	.signin .topbar > .container-fluid { font-size: 0 }
	
	.signin .topbar > .container-fluid > * { display: inline-block; vertical-align: top; font-size: 13.6px }
	
	@media (max-width: 1024px) {
		.signin .topbar > .container-fluid { padding: 0 }
	}
	
	.signin a.topbar__menu-toggle { display: none; padding: 0 20px; border-right: 1px solid #eaeaea; text-transform: uppercase; line-height: 40px }
	
	@media (max-width: 1024px) {
		.signin a.topbar__menu-toggle { display: inline-block; text-align: center }
	}
	
	.signin a.topbar__menu-toggle:hover,
	.signin a.topbar__menu-toggle:focus { background-color: #5c616a; color: #fff; text-decoration: none }
	
	.signin a.topbar__menu-toggle:after { display: none !important }
	
	@media (max-width: 1024px) {
		.open .signin a.topbar__menu-toggle { background-color: #5c616a }
	}
	
	.signin #retail-topbar-left-menu-signin { position: static; -webkit-transition: max-height 0.2s ease-out; transition: max-height 0.2s ease-out; text-align: left }
	
	@media (min-width: 1025px) {
		.signin #retail-topbar-left-menu-signin { display: block }
	}
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin { text-align: center; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); position: absolute; width: 100vw; z-index: 2 }
	}
	
	.signin #retail-topbar-left-menu-signin a { font-size: 13.6px }
	
	.signin #retail-topbar-left-menu-signin .linkset ul ul { top: 100%; left: 0 }
	
	@media (min-width: 1025px) {
		.signin #retail-topbar-left-menu-signin li.link-parent > a:after { content: '\F107' }
	}
	
	@media (min-width: 1025px) {
		.signin #retail-topbar-left-menu-signin .open li.link-parent > a:after { content: '\F106' }
	}
	
	.signin #retail-topbar-left-menu-signin > li { display: inline-block }
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li { display: block; background-color: #fff; border-top: 1px solid #ccc }
	}
	
	.signin #retail-topbar-left-menu-signin > li > a { padding: 8px 10px; text-decoration: none }
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li > a { display: block; color: #222 }
	
		.signin #retail-topbar-left-menu-signin > li > a:hover { background-color: #ededed }
	}
	
	.signin #retail-topbar-left-menu-signin > li > a:after { display: inline-block; padding: 0 5px }
	
	@media (min-width: 1025px) {
		.signin #retail-topbar-left-menu-signin > li > a:after { position: static; width: auto }
	}
	
	.signin #retail-topbar-left-menu-signin > li ul { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); background-color: #fff }
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li ul { box-shadow: none; background-color: #f2f2f2 }
	}
	
	.signin #retail-topbar-left-menu-signin > li ul > li:hover,
	.signin #retail-topbar-left-menu-signin > li ul > li:focus { background-color: #ededed }
	
	.signin #retail-topbar-left-menu-signin > li ul a { color: #222; text-decoration: none }
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li > ul { text-align: center }
	}
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li.link-parent > ul { position: static }
	}
	
	@media (max-width: 1024px) {
		.signin #retail-topbar-left-menu-signin > li.link-parent > ul li { border-top: 1px solid #eaeaea }
	}
	
	.signin #retail-topbar-left-menu-signin > li.link-parent > ul a { padding: 8px 10px; text-decoration: none }
	
	.signin #retail-topbar-left-menu-signin > li.link-parent.open > a { background-color: #555 }
	
	.signin .topbar__left { width: 100% }
	
	@media (max-width: 980px) {
		.signin .topbar__left { width: 33.3333333% }
	}
	
	@media (max-width: 980px) {
		.signin .topbar__right { width: 66.6666666% }
	}
	
	.signin .logo-bar { margin: 0 }
	
	@media (max-width: 980px) {
		.signin .logo-bar { text-align: center }
	}
	
	.signin .logo-bar > .container-fluid { display: -webkit-box; display: -ms-flexbox; display: flex; align-items: center }
	
	@media (max-width: 980px) {
		.signin .logo-bar > .container-fluid { display: block; padding: 0 }
	}
	
	.signin .logo-bar a:hover,
	.signin .logo-bar a:focus { text-decoration: none }
	
	.signin .logo-bar__logo { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; vertical-align: top; margin-right: 20px; max-width: 240px; min-height: 120px }
	
	@media (max-width: 980px) {
		.signin .logo-bar__logo { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; margin: 0 auto; min-height: 0 }
	}
	
	.signin .logo-bar__logo .logo { height: 120px }
	
	@media (max-width: 480px) {
		.signin .logo-bar__logo .logo { height: 100% }
	}
	
	.signin .logo-bar__logo .logo img { width: 100%; min-height: 100%; -o-object-fit: contain; object-fit: contain; padding: 20px 0; box-sizing: border-box }
	
	@media (max-width: 480px) {
		.signin .logo-bar__logo .logo img { min-height: 0; max-height: 140px }
	}
	
	@media (max-width: 500px) {
		.signin .logo-bar__logo .logo img { padding: 5px 0 }
	}
	
	.signin .logo-bar__right { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; justify-content: flex-end; position: relative; margin-left: auto; vertical-align: top; min-height: auto; min-width: 320px; height: 100% }
	
	.signin .logo-bar__right > * { font-size: 16px }
	
	@media (max-width: 980px) {
		.signin .logo-bar__right > * { -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1 }
	}
	
	@media (max-width: 980px) {
		.signin .logo-bar__right { width: 100%; margin-top: 0; background-color: #222; text-align: center }
	
		.signin .logo-bar__right > * { text-align: left }
	}
	
	@media (max-width: 768px) {
		.signin .logo-bar__right h4 { margin: 0; font-size: 14px }
	}
	
	.signin .logo-bar__right .linkset a { font-size: 16px }
	
	.signin .logo-bar__right .linkset a:after { padding: 6px 0 }
	
	@media (max-width: 500px) {
		.signin .logo-bar__right .linkset a { font-size: 13.6px }
	}
	
	.signin .logo-bar__right .linkset ul > li > a:hover,
	.signin .logo-bar__right .linkset ul > li > a:focus { background-color: #eaeaea }
	
	.signin #header__prodcat { display: inline-block; vertical-align: top; -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 12px; border: 0 }
	
	.signin #header__prodcat .header__prodcat__toggle { padding: 0 15px; text-transform: uppercase }
	
	@media (max-width: 980px) {
		.signin #header__prodcat .header__prodcat__toggle { padding: 10px 0; text-align: center; color: #fff }
	}
	
	.signin #header__prodcat .header__prodcat__toggle:after { display: none }
	
	.signin #header__prodcat .header__prodcat__toggle:hover { color: #5c616a }
	
	@media (max-width: 980px) {
		.signin #header__prodcat .header__prodcat__toggle:hover { background-color: #5c616a; color: #fff; padding: 10px 0 }
	}
	
	.signin #header__prodcat .header__prodcat__toggle [class*="icon-"] { display: none }
	
	@media (max-width: 980px) {
		.signin #header__prodcat .header__prodcat__toggle [class*="icon-"] { display: inline-block }
	}
	
	.signin #header__prodcat > li { display: inline-block }
	
	@media (min-width: 1025px) {
		.signin #header__prodcat > li { width: auto }
	}
	
	@media (max-width: 1024px) {
		.signin #header__prodcat > li { width: 100% }
	}
	
	.signin #header__prodcat > li > ul { border-top: 1px solid #5c616a; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); min-width: 280px }
	
	@media (min-width: 1025px) {
		.signin #header__prodcat > li > ul { top: calc(100% + 5px); left: 0 }
	}
	
	@media (max-width: 1500px) {
		.signin #header__prodcat > li > ul { right: 30%; left: auto; transform: translateX(30%); min-width: 260px }
	}
	
	@media (max-width: 980px) {
		.signin #header__prodcat > li > ul { width: 100% }
	}
	
	.signin #header__prodcat > li > ul ul { position: static; border-left: 5px solid #5c616a; -webkit-box-shadow: none; box-shadow: none; -webkit-box-sizing: border-box; box-sizing: border-box }
	
	.signin #header__prodcat > li > ul ul li a { font-size: 13.6px }
	
	.signin #header__prodcat > li > ul li { border-bottom: 1px solid #eaeaea }
	
	.signin #header__prodcat > li.link-parent { display: block; position: relative }
	
	@media (max-width: 980px) {
		.signin #header__prodcat > li.link-parent { position: static }
	}
	
	.signin #header__prodcat > li.link-parent ul { background-color: #fff }
	
	.signin #header__prodcat > li.link-parent li { border-bottom: 1px solid #eaeaea }
	
	@media (max-width: 1024px) {
		.signin #header__prodcat > li.link-parent li { border-bottom: 1px solid #eaeaea }
	}
	
	.signin #header__prodcat > li.link-parent li:hover > a,
	.signin #header__prodcat > li.link-parent li:focus > a,
	.signin #header__prodcat > li.link-parent li.open > a { color: #222; background-color: #ededed }
	
	.signin #header__prodcat > li.link-parent li.link-parent.open > a { background-color: #5c616a; color: #fff }
	
	.signin #header__prodcat > li.link-parent > ul.linkset { width: 250px; border-top: 1px solid #eaeaea; -webkit-box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5); box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5) }
	
	.signin #header__prodcat > li.link-parent > ul.linkset > li > ul > li a { padding-left: 30px }
	
	.signin #header__prodcat > li.link-parent > ul.linkset > li > ul > li > ul > li a { padding-left: 40px }
	
	.signin #header__prodcat > li.link-parent > ul.linkset > li > ul > li > ul > li > ul > li a { padding-left: 50px }
	
	.signin #header__prodcat > li.link-parent.open .header__prodcat__toggle { color: #5c616a }
	
	@media (max-width: 980px) {
		.signin #header__prodcat > li.link-parent.open .header__prodcat__toggle { background-color: #5c616a; color: #fff }
	}
	
	.signin .header__signin { display: inline-block; line-height: 40px; font-size: 14px; font-weight: 600; position: relative; vertical-align: top }
	
	@media (max-width: 980px) {
		.signin .header__signin { margin-right: 0; text-align: center; font-size: 13px }
	}
	
	.signin .linkset a.header__signin-open,
	.signin .linkset a.header__user-menu__toggle { display: block; padding: 0 15px; -webkit-box-sizing: border-box; box-sizing: border-box; font-weight: normal; text-transform: uppercase }
	
	@media (max-width: 980px) {
	
		.signin .linkset a.header__signin-open,
		.signin .linkset a.header__user-menu__toggle { padding: 10px 0; border-left: 1px solid #ccc; color: #fff }
	}
	
	.signin .linkset a.header__signin-open:hover,
	.signin .linkset a.header__user-menu__toggle:hover { color: #5c616a }
	
	@media (max-width: 980px) {
	
		.signin .linkset a.header__signin-open:hover,
		.signin .linkset a.header__user-menu__toggle:hover { color: #fff; background-color: #5c616a }
	}
	
	@media (min-width: 981px) {
	
		.signin .linkset a.header__signin-open i,
		.signin .linkset a.header__user-menu__toggle i { display: none }
	}
	
	.signin .linkset a.header__signin-open:after,
	.signin .linkset a.header__user-menu__toggle:after { display: none !important }
	
	.signin .linkset a.header__signin-open.disabled,
	.signin .linkset a.header__user-menu__toggle.disabled { opacity: 0.5 }
	
	.signin .header__signin-overlay { -webkit-box-sizing: border-box; box-sizing: border-box; position: fixed; top: -100vh; left: 0; width: 100%; height: 100%; z-index: 10; padding: 30px; overflow: auto; background: rgba(255, 255, 255, 0.95); color: #444; font-size: 16px; opacity: 0; text-align: center; -webkit-transition: opacity 0.5s; transition: opacity 0.5s }
	
	.signin .header__signin-overlay.active { top: 0; opacity: 1 }
	
	@media (max-width: 768px) {
		.signin .header__signin-overlay { background: #fff }
	}
	
	.signin .header__signin-overlay-close { padding: 10px; font-size: 50px; opacity: 1 }
	
	.signin .header__signin-form { width: 400px; height: 480px; max-width: 100%; margin: 0 auto; position: relative; top: 50%; color: #444; -webkit-transform: translateY(-50%); transform: translateY(-50%) }
	
	@media (max-height: 500px) {
		.signin .header__signin-form { top: 10%; -webkit-transform: none; transform: none }
	}
	
	.signin .header__signin-form .page-header { clear: both; margin-bottom: 0; border: 0 }
	
	.signin .header__signin-form h1 { font-size: 30px }
	
	.signin .header__signin-form .login_field input[type="text"],
	.signin .header__signin-form .login_field input[type="password"] { width: 96%; max-width: 400px }
	
	.signin .header__signin-form .well { max-width: 300px; margin-left: auto; margin-right: auto; -webkit-box-shadow: 0 0 100px 100px #fff; box-shadow: 0 0 100px 100px #fff; text-align: left }
	
	@media (max-width: 768px) {
		.signin .header__signin-form .well { -webkit-box-shadow: none; box-shadow: none }
	}
	
	.signin #header__cart-preview.linkset { vertical-align: top; -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 16px; text-align: center }
	
	.site-type-3.loggedout .signin #header__cart-preview.linkset { display: none !important }
	
	.signin #header__cart-preview.linkset > li { display: block; border: 0px }
	
	@media (max-width: 768px) {
		.signin #header__cart-preview.linkset > li { position: static }
	}
	
	.signin #header__cart-preview.linkset > li ul { background-color: #fff; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); border-top: 1px solid #eaeaea; position: absolute; right: 0; top: calc(100% + 5px) }
	
	@media (max-width: 980px) {
		.signin #header__cart-preview.linkset > li ul { top: 100% }
	}
	
	.signin #header__cart-preview.linkset > li #cart_window { text-align: left }
	
	.signin #header__cart-preview.linkset > li .header__cart-preview__toggle { padding: 0 12px; text-transform: uppercase }
	
	@media (max-width: 980px) {
		.signin #header__cart-preview.linkset > li .header__cart-preview__toggle { padding: 10px 0; border-left: 1px solid #ccc; color: #fff }
	}
	
	.signin #header__cart-preview.linkset > li .header__cart-preview__toggle:after { display: none }
	
	.signin #header__cart-preview.linkset > li .header__cart-preview__toggle:hover { color: #5c616a }
	
	@media (max-width: 980px) {
		.signin #header__cart-preview.linkset > li .header__cart-preview__toggle:hover { background-color: #5c616a; color: #fff }
	}
	
	.signin #header__cart-preview.linkset > li.open .header__cart-preview__toggle { color: #5c616a }
	
	@media (max-width: 980px) {
		.signin #header__cart-preview.linkset > li.open .header__cart-preview__toggle { background-color: #5c616a; color: #fff }
	}
	
	.signin #header__cart-preview.linkset #cart_window_incl { color: #222; background-color: #fff }
	
	@media (min-width: 769px) {
		.signin #header__cart-preview.linkset #cart_window_incl { min-width: 400px }
	}
	
	.signin #header__cart-preview.linkset #cart_window_incl a.close { position: absolute; color: #e25a47; text-decoration: none; margin: 0 10px 0 auto; font-size: 12px; right: 0; top: 34px }
	
	.signin #header__cart-preview.linkset #cart_window_incl .well.muted { color: #ccc }
	
	.signin #header__cart-preview.linkset #cart_window_qty { border-radius: 40px }
	
	.signin .header__user-menu { display: inline-block; vertical-align: top; text-align: center }
	
	@media (max-width: 980px) {
		.signin .header__user-menu > li { position: static }
	}
	
	.signin ul#retail-user-nav { border-top: 1px solid #5c616a; -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); background-color: #fff; text-align: left; top: calc(100% + 5px); left: 0 }
	
	@media (max-width: 980px) {
		.signin ul#retail-user-nav { top: 100% }
	}
	
	.signin .prodcat a { white-space: nowrap; padding: 10px 30px 10px 14px; line-height: 1.6 }
	
	.signin .header__hero-search { display: table; width: 100%; padding: 8% 20px; box-sizing: border-box; text-align: center; background-color: #bcbcbe; background-image: url(../../images/ecommerce-background-6.png); background-size: cover; background-repeat: no-repeat; background-position: center }
	
	@media (max-width: 480px) {
		.signin .header__hero-search { padding: 10px 20px }
	}
	
	body.interior .signin .header__hero-search { padding: 10px 20px }
	
	.signin .header__hero-search form { display: inline-block; margin: 0; font-size: 0; width: 100%; position: relative; vertical-align: top }
	
	.signin .header__hero-search .u-search-group { display: inline-block; vertical-align: top; font-size: 16px }
	
	.signin .header__hero-search .u-search-text { width: 100% }
	
	.signin .header__hero-search .u-search-text .input-search { width: 100%; height: 45px; margin: 0; padding-left: 20px; border-radius: 33px; box-sizing: border-box }
	
	body.interior .signin .header__hero-search .u-search-text .input-search { height: 45px }
	
	.signin .header__hero-search .u-search-droplist { display: none }
	
	.signin .header__hero-search .u-search-btn { position: absolute; top: 0; right: 0 }
	
	.signin .header__hero-search .u-search-btn button.btn { padding-right: 20px; height: 45px; line-height: 1; border-top-right-radius: 33px; border-bottom-right-radius: 33px; outline: none }
	
	.signin .header__hero-search .header__hero-search__button { width: 55px; height: 55px; background-color: transparent; color: #222; background-image: none; border: 0; box-shadow: none }
	
	@media (max-width: 500px) {
		.signin .header__hero-search .header__hero-search__button { width: 40px; height: 40px }
	}
	
	body.interior .signin .header__hero-search .header__hero-search__button { width: 45px; height: 45px }
	
	.signin .header__hero-search .header__hero-search__button:hover,
	.signin .header__hero-search .header__hero-search__button:focus { color: #5c616a; background-color: transparent !important; outline: none }
	
	.signin .header__hero-search__wrap { display: table-cell; vertical-align: middle }
	
	.signin .header__hero-search__container { max-width: 640px; margin: auto; height: 0; }
	
	@media (max-width: 768px) {
		.signin .header__hero-search__container { max-width: 100% }
	}
	
	.signin .header__hero-search__header { display: block; margin: 0; color: #fff; font-size: 27px; text-indent: 20px; text-align: left; text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); text-transform: uppercase }
	
	@media (max-width: 500px) {
		.signin .header__hero-search__header { display: none }
	}
	
	body.interior .signin .header__hero-search__header { display: none }
	
	.retail-header-2 .header__hero { display: table; width: 100%; padding: 12% 0; box-sizing: border-box; background-color: #777; background-image: url("../../images/ecommerce-background-8.jpg"); background-repeat: no-repeat; background-position: center; background-size: cover }
	
	body.interior .retail-header-2 .header__hero { display: none }
	
	.retail-header-2 .header__hero__wrap { display: table-cell; vertical-align: middle }
	
	.retail-header-2 .header__hero__container { max-width: 1400px; margin: auto; padding: 0 20px; box-sizing: border-box }
	
	@media (max-width: 768px) {
		.retail-header-2 .header__hero__container { max-width: 100% }
	}
	
	.retail-header-2 .header__hero__left { text-align: center }
	
	@media (max-width: 980px) {
		.grid-50-50 .retail-header-2 .header__hero__left { width: 40%; margin: 0 }
	}
	
	.retail-header-2 .header__hero__right { margin-top: 60px }
	
	@media (max-width: 980px) {
		.retail-header-2 .header__hero__right { margin-top: 0 }
	}
	
	@media (max-width: 480px) {
		.retail-header-2 .header__hero__right { margin-left: 40%; margin-top: -20px }
	}
	
	@media (max-width: 350px) {
		.retail-header-2 .header__hero__right { margin-left: 30% }
	}
	
	@media (max-width: 980px) {
		.grid-50-50 .retail-header-2 .header__hero__right { width: 60%; margin: 0 }
	}
	
	.retail-header-2 .header__hero__header { display: block; margin: 0; text-align: left; font-size: 44px; color: #fff; font-weight: bold }
	
	@media (max-width: 980px) {
		.retail-header-2 .header__hero__header { font-size: 36px }
	}
	
	@media (max-width: 768px) {
		.retail-header-2 .header__hero__header { font-size: 24px }
	}
	
	.retail-header-2 .header__hero__caption { color: #eaeaea }
	
	@media (max-width: 768px) {
		.retail-header-2 .header__hero__caption { font-size: 14px }
	}
	
	@media (max-width: 768px) {
		.retail-header-2 .header__hero__button { padding: 0 10px; line-height: 30px; font-size: 10px }
	}
	
	.retail-header-2 .retail-header { position: relative }
	
	.retail-header-2 .logo-bar { margin: 0; width: 100%; position: absolute; top: 0; left: 0; background-color: rgba(0, 0, 0, 0.5) }
	
	.interior .retail-header-2 .logo-bar { position: static; background-color: #222 }
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar { text-align: center; position: relative; background-color: #222 }
	}
	
	.retail-header-2 .logo-bar > .container-fluid { font-size: 0 }
	
	.retail-header-2 .logo-bar > .container-fluid > * { font-size: 16px }
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar > .container-fluid { padding: 0 }
	}
	
	.retail-header-2 body.interior .logo-bar { position: static; background-color: #222 }
	
	.retail-header-2 .logo-bar__logo { display: inline-block; vertical-align: top; margin-right: 20px }
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar__logo { display: block; margin: 0; background-color: #000 }
	}
	
	.retail-header-2 .logo-bar__logo .logo img { width: 100%; max-width: 140px; margin: auto; padding: 20px 0 }
	
	.retail-header-2 .logo-bar__right { display: inline-block; position: relative; margin-top: 25px; vertical-align: top; width: calc(100% - 180px); min-height: auto; text-align: right; font-size: 0 !important }
	
	.retail-header-2 .logo-bar__right > * { font-size: 16px !important }
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar__right { display: block; width: 100%; margin-top: 0; background-color: #222; text-align: center }
	}
	
	@media (max-width: 768px) {
		.retail-header-2 .logo-bar__right h4 { margin: 0; font-size: 14px }
	}
	
	.retail-header-2 .logo-bar__right .linkset a { text-decoration: none }
	
	.retail-header-2 .logo-bar__right > ul > li > a { font-size: 16px }
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar__right > ul > li > a { font-size: 13.6px; line-height: 20px; padding: 2px 0 7px !important }
	}
	
	@media (max-width: 980px) {
		.retail-header-2 .logo-bar__right > ul > li > a i { display: block; padding: 10px 0 0; font-size: 24px }
	}
	
	.retail-header-2 #header__prodcat { display: inline-block; vertical-align: top; box-sizing: border-box; text-align: left; border: 0 }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat { width: 25% }
	}
	
	.retail-header-2 #header__prodcat .header__prodcat__toggle { padding: 0 20px; color: #fff; text-transform: uppercase }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat .header__prodcat__toggle { padding: 0; text-align: center }
	}
	
	.retail-header-2 #header__prodcat .header__prodcat__toggle:after { display: none }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat .header__prodcat__toggle:hover { background-color: #5c616a; color: #fff }
	}
	
	.retail-header-2 #header__prodcat .header__prodcat__toggle [class*="icon-"] { display: none }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat .header__prodcat__toggle [class*="icon-"] { display: block }
	}
	
	.retail-header-2 #header__prodcat > li { display: inline-block }
	
	@media (min-width: 1025px) {
		.retail-header-2 #header__prodcat > li { width: auto }
	}
	
	@media (max-width: 1024px) {
		.retail-header-2 #header__prodcat > li { width: 100% }
	}
	
	.retail-header-2 #header__prodcat > li > ul { border-top: 1px solid #5c616a; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5) }
	
	@media (min-width: 981px) {
		.retail-header-2 #header__prodcat > li > ul { top: 100%; left: auto }
	}
	
	.retail-header-2 #header__prodcat > li > ul ul { position: static; border-left: 5px solid #777; box-shadow: none; box-sizing: border-box }
	
	.retail-header-2 #header__prodcat > li > ul ul li a { font-size: 13.6px }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat > li > ul ul { background-color: #efefef }
	}
	
	.retail-header-2 #header__prodcat > li > ul li { border-bottom: 1px solid #eaeaea }
	
	.retail-header-2 #header__prodcat > li.link-parent { display: block }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat > li.link-parent { position: static }
	}
	
	.retail-header-2 #header__prodcat > li.link-parent ul { background-color: #fff }
	
	.retail-header-2 #header__prodcat > li.link-parent li { border-bottom: 1px solid #eaeaea }
	
	@media (max-width: 1024px) {
		.retail-header-2 #header__prodcat > li.link-parent li { border-bottom: 1px solid #eaeaea }
	}
	
	.retail-header-2 #header__prodcat > li.link-parent li:hover > a,
	.retail-header-2 #header__prodcat > li.link-parent li:focus > a,
	.retail-header-2 #header__prodcat > li.link-parent li.open > a { color: #222; background-color: #ededed }
	
	.retail-header-2 #header__prodcat > li.link-parent li.link-parent.open > a { background-color: #777; color: #fff }
	
	.retail-header-2 #header__prodcat > li.link-parent > ul.linkset { width: 250px; border-top: 1px solid #eaeaea; box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5) }
	
	.retail-header-2 #header__prodcat > li.link-parent > ul.linkset > li > ul > li a { padding-left: 30px }
	
	.retail-header-2 #header__prodcat > li.link-parent > ul.linkset > li > ul > li > ul > li a { padding-left: 40px }
	
	.retail-header-2 #header__prodcat > li.link-parent > ul.linkset > li > ul > li > ul > li > ul > li a { padding-left: 50px }
	
	.retail-header-2 #header__prodcat > li.link-parent.open .header__prodcat__toggle { color: #fff }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__prodcat > li.link-parent.open .header__prodcat__toggle { background-color: #5c616a }
	}
	
	.retail-header-2 .header__signin { display: inline-block; vertical-align: top; box-sizing: border-box; text-align: left; text-transform: uppercase; border: 0 }
	
	@media (max-width: 980px) {
		.retail-header-2 .header__signin { text-align: center; width: 25% }
	}
	
	.retail-header-2 .linkset a.header__signin-open,
	.retail-header-2 .linkset a.header__user-menu__toggle { display: block; padding: 0 20px; box-sizing: border-box; font-weight: normal; color: #fff; text-transform: uppercase }
	
	@media (max-width: 980px) {
	
		.retail-header-2 .linkset a.header__signin-open,
		.retail-header-2 .linkset a.header__user-menu__toggle { border-left: 1px solid #ccc; border-right: 1px solid #ccc }
	}
	
	@media (max-width: 980px) {
	
		.retail-header-2 .linkset a.header__signin-open:hover,
		.retail-header-2 .linkset a.header__user-menu__toggle:hover { color: #fff; background-color: #5c616a }
	}
	
	@media (min-width: 981px) {
	
		.retail-header-2 .linkset a.header__signin-open i,
		.retail-header-2 .linkset a.header__user-menu__toggle i { display: none }
	}
	
	.retail-header-2 .linkset a.header__signin-open:after,
	.retail-header-2 .linkset a.header__user-menu__toggle:after { display: none !important }
	
	.retail-header-2 .linkset a.header__signin-open.disabled,
	.retail-header-2 .linkset a.header__user-menu__toggle.disabled { opacity: 0.5 }
	
	.retail-header-2 .header__signin-overlay { box-sizing: border-box; display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; padding: 30px; overflow: auto; background: rgba(85, 85, 85, 0.95); color: #fff; font-size: 16px; text-align: center }
	
	.retail-header-2 .header__signin-overlay.active { display: block }
	
	.retail-header-2 .header__signin-overlay button,
	.retail-header-2 .header__signin-overlay a,
	.retail-header-2 .header__signin-overlay .page-header h1 { color: #fff }
	
	@media (max-width: 768px) {
		.retail-header-2 .header__signin-overlay { background: #555 }
	}
	
	.retail-header-2 .header__signin-overlay-close { padding: 10px; font-size: 50px; opacity: 1 }
	
	.retail-header-2 .header__signin-form { width: 400px; height: 480px; max-width: 100%; margin: 0 auto; position: relative; top: 50%; color: #444; transform: translateY(-50%) }
	
	@media (max-height: 500px) {
		.retail-header-2 .header__signin-form { top: 10%; transform: none }
	}
	
	.retail-header-2 .header__signin-form .page-header { clear: both; margin-bottom: 0; border: 0 }
	
	.retail-header-2 .header__signin-form h1 { font-size: 30px }
	
	.retail-header-2 .header__signin-form .login_field input[type="text"],
	.retail-header-2 .header__signin-form .login_field input[type="password"] { width: 96%; max-width: 400px }
	
	.retail-header-2 .header__signin-form .well { max-width: 300px; margin-left: auto; margin-right: auto; box-shadow: 0 0 200px 200px #555; text-align: left }
	
	@media (max-width: 768px) {
		.retail-header-2 .header__signin-form .well { box-shadow: none }
	}
	
	.retail-header-2 #header__cart-preview.linkset { display: inline-block; vertical-align: top; box-sizing: border-box; font-size: 16px; position: relative }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__cart-preview.linkset { width: 25% }
	}
	
	.retail-header-2 #header__cart-preview.linkset > li { display: block; border: 0px }
	
	@media (max-width: 768px) {
		.retail-header-2 #header__cart-preview.linkset > li { position: static }
	}
	
	.retail-header-2 #header__cart-preview.linkset > li ul { background-color: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); border-top: 1px solid #eaeaea; position: absolute; right: 0 }
	
	@media (max-width: 768px) {
		.retail-header-2 #header__cart-preview.linkset > li ul { width: 400%; right: -100% }
	}
	
	.retail-header-2 #header__cart-preview.linkset > li #cart_window { text-align: left }
	
	.retail-header-2 #header__cart-preview.linkset > li .header__cart-preview__toggle { padding: 0 20px; color: #fff; text-transform: uppercase }
	
	.retail-header-2 #header__cart-preview.linkset > li .header__cart-preview__toggle:after { display: none }
	
	@media (max-width: 980px) {
		.retail-header-2 #header__cart-preview.linkset > li .header__cart-preview__toggle:hover { background-color: #5c616a; color: #fff }
	}
	
	@media (max-width: 980px) {
		.retail-header-2 #header__cart-preview.linkset > li.open .header__cart-preview__toggle { background-color: #5c616a; color: #fff }
	}
	
	.retail-header-2 #header__cart-preview.linkset #cart_window_incl { color: #222; background-color: #fff }
	
	@media (min-width: 769px) {
		.retail-header-2 #header__cart-preview.linkset #cart_window_incl { min-width: 400px }
	}
	
	.retail-header-2 #header__cart-preview.linkset #cart_window_incl a { padding: 0 }
	
	.retail-header-2 #header__cart-preview.linkset #cart_window_incl a.btn-primary { color: #fff }
	
	.retail-header-2 #header__cart-preview.linkset #cart_window_incl .well.muted { color: #aaa }
	
	.retail-header-2 #header__cart-preview.linkset #cart_window_qty { border-radius: 40px; line-height: 5px }
	
	@media (max-width: 768px) {
		.retail-header-2 #header__cart-preview.linkset #cart_window_qty { padding: 5px 7px; font-size: 12px }
	}
	
	.retail-header-2 .retail-header__search { display: inline-block; position: relative; box-sizing: border-box; text-transform: uppercase }
	
	@media (max-width: 980px) {
		.retail-header-2 .retail-header__search { width: 25%; border-left: 1px solid #ccc }
	}
	
	.retail-header-2 .retail-header__search form { width: 100%; height: 40px; margin: 0; padding: 1px; box-sizing: border-box; position: relative }
	
	.retail-header-2 .retail-header__search form input.input-search { width: 100%; height: 38px; box-sizing: border-box }
	
	.retail-header-2 .retail-header__search form .u-search-btn { position: absolute; top: 0; right: 0 }
	
	.retail-header-2 .retail-header__search form .u-search-btn button.btn { vertical-align: top; background-color: transparent; color: #5c616a; padding: 4px 10px; outline: none }
	
	.retail-header-2 .retail-header__search .retail-header__search__toggle { color: #fff }
	
	@media (min-width: 981px) {
		.retail-header-2 .retail-header__search .retail-header__search__toggle { display: none }
	}
	
	@media (max-width: 980px) {
		.retail-header-2 .retail-header__search .retail-header__search__toggle { padding: 0 }
	}
	
	.retail-header-2 .retail-header__search .retail-header__search__toggle:hover { background-color: #5c616a }
	
	.retail-header-2 .retail-header__search .retail-header__search__toggle:after { display: none !important }
	
	.retail-header-2 .retail-header__search__flyout { position: absolute; top: 100%; right: 0 }
	
	@media (min-width: 981px) {
		.retail-header-2 .retail-header__search__flyout { position: static }
	}
	
	@media (max-width: 980px) {
		.retail-header-2 .retail-header__search__flyout { display: none }
	}
	
	.retail-header-2 .retail-header__search li.open .retail-header__search__flyout { display: block }
	
	@media (max-width: 980px) {
		.retail-header-2 .retail-header__search li.open .retail-header__search__flyout { width: calc(400% + -16px); background-color: #fff; padding: 10px; z-index: 1; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5) }
	}
	
	.retail-header-2 .header__user-menu { display: inline-block; vertical-align: top }
	
	@media (max-width: 980px) {
		.retail-header-2 .header__user-menu { width: 25% }
	}
	
	.retail-header-2 ul#retail-user-nav { border-top: 1px solid #5c616a; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); background-color: #fff; text-align: left }
	
	.retail-header-2 ul#retail-user-nav li > a:hover,
	.retail-header-2 ul#retail-user-nav li > a:focus { background-color: #eaeaea }
	
	@media (max-width: 980px) {
		body.site-type-3 .retail-header-2 .header__signin { width: 50% }
	}
	
	body.site-type-3 .retail-header-2 .linkset a.header__signin-toggle,
	body.site-type-3 .retail-header-2 .linkset a.header__user-menu__toggle { border-right: 0 }
	
	body.site-type-3 .retail-header-2 #header__cart-preview.linkset { display: none !important }
	
	@media (max-width: 980px) {
		body.site-type-3 .retail-header-2 .retail-header__search { width: 33.333333% }
	}
	
	@media (max-width: 980px) {
		body.site-type-3.loggedout .retail-header-2 .retail-header__search li.open .retail-header__search__flyout { width: calc(300% + -16px) }
	}
	
	@media (max-width: 980px) {
		body.site-type-3.loggedout .retail-header-2 #header__prodcat { width: 33.333333% }
	}
	
	@media (max-width: 980px) {
		body.site-type-3.loggedout .retail-header-2 .header__signin { width: 33.333333% }
	}
	
	body.loggedin .retail-header-2 .header__signin { display: none }
	
	.retail-header-3 .header__hero { display: table; width: 100%; padding: 12% 0; box-sizing: border-box; background-color: #777; background-image: url("../../images/ecommerce-background-8.jpg"); background-repeat: no-repeat; background-position: center; background-size: cover }
	
	body.interior .retail-header-3 .header__hero { display: none }
	
	.retail-header-3 .header__hero__wrap { display: table-cell; vertical-align: middle }
	
	.retail-header-3 .header__hero__container { max-width: 1400px; margin: auto; padding: 0 20px; box-sizing: border-box }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__hero__container { max-width: 100% }
	}
	
	.retail-header-3 .header__hero__left { text-align: center }
	
	@media (max-width: 980px) {
		.grid-50-50 .retail-header-3 .header__hero__left { width: 40%; margin: 0 }
	}
	
	.retail-header-3 .header__hero__right { margin-top: 60px }
	
	@media (max-width: 980px) {
		.retail-header-3 .header__hero__right { margin-top: 0 }
	}
	
	@media (max-width: 480px) {
		.retail-header-3 .header__hero__right { margin-left: 40%; margin-top: -20px }
	}
	
	@media (max-width: 350px) {
		.retail-header-3 .header__hero__right { margin-left: 30% }
	}
	
	@media (max-width: 980px) {
		.grid-50-50 .retail-header-3 .header__hero__right { width: 60%; margin: 0 }
	}
	
	.retail-header-3 .header__hero__header { display: block; margin: 0; text-align: left; font-size: 44px; color: #fff; font-weight: bold }
	
	@media (max-width: 980px) {
		.retail-header-3 .header__hero__header { font-size: 36px }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .header__hero__header { font-size: 24px }
	}
	
	.retail-header-3 .header__hero__caption { color: #eaeaea }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__hero__caption { font-size: 14px }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .header__hero__button { padding: 0 10px; line-height: 30px; font-size: 10px }
	}
	
	.retail-header-3 .topbar { background: #222; color: #fff }
	
	.retail-header-3 .topbar > .container-fluid { font-size: 0 }
	
	.retail-header-3 .topbar > .container-fluid > * { display: inline-block; vertical-align: top; font-size: 13.6px }
	
	@media (max-width: 1024px) {
		.retail-header-3 .topbar > .container-fluid { padding: 0 }
	}
	
	.retail-header-3 .topbar > .container-fluid a { color: #eee; font-size: 13.6px; text-decoration: none }
	
	.retail-header-3 .topbar > .container-fluid a:hover,
	.retail-header-3 .topbar > .container-fluid a:focus { color: #fff; text-decoration: none }
	
	.retail-header-3 a.topbar__menu-toggle { display: none; padding: 0 20px; border-right: 1px solid #eaeaea; color: #fff; line-height: 40px; font-size: 13px }
	
	@media (max-width: 1024px) {
		.retail-header-3 a.topbar__menu-toggle { display: inline-block; text-align: center }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 a.topbar__menu-toggle { display: block; border-right: 0 }
	}
	
	.retail-header-3 a.topbar__menu-toggle:hover,
	.retail-header-3 a.topbar__menu-toggle:focus { background-color: #5c616a; color: #fff }
	
	.retail-header-3 a.topbar__menu-toggle:after { display: none !important }
	
	@media (max-width: 1024px) {
		.open .retail-header-3 a.topbar__menu-toggle { background-color: #5c616a }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin { position: static; -webkit-transition: max-height 0.2s ease-out; transition: max-height 0.2s ease-out; text-align: left }
	
	@media (min-width: 1025px) {
		.retail-header-3 #retail-topbar-left-menu-signin { display: block }
	}
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin { text-align: center; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); position: absolute; width: 100vw; z-index: 2 }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin .linkset ul ul { top: 100%; left: 0 }
	
	@media (min-width: 1025px) {
		.retail-header-3 #retail-topbar-left-menu-signin li.link-parent > a:after { content: '\F107' }
	}
	
	@media (min-width: 1025px) {
		.retail-header-3 #retail-topbar-left-menu-signin .open li.link-parent > a:after { content: '\F106' }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li { display: inline-block }
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li { display: block; background-color: #fff; border-top: 1px solid #ccc }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li > a { padding: 0 10px }
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li > a { display: block; color: #222 }
	
		.retail-header-3 #retail-topbar-left-menu-signin > li > a:hover { background-color: #ededed }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li > a:after { display: inline-block; padding: 0 5px }
	
	@media (min-width: 1025px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li > a:after { position: static; width: auto }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li ul { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); background-color: #fff }
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li ul { box-shadow: none; background-color: #f2f2f2 }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li ul > li:hover,
	.retail-header-3 #retail-topbar-left-menu-signin > li ul > li:focus { background-color: #ededed }
	
	.retail-header-3 #retail-topbar-left-menu-signin > li ul a { color: #222 }
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li > ul { text-align: center }
	}
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li.link-parent > ul { position: static }
	}
	
	@media (max-width: 1024px) {
		.retail-header-3 #retail-topbar-left-menu-signin > li.link-parent > ul li { border-top: 1px solid #eaeaea }
	}
	
	.retail-header-3 #retail-topbar-left-menu-signin > li.link-parent > ul a { font-size: 12px; padding: 0 10px }
	
	.retail-header-3 #retail-topbar-left-menu-signin > li.link-parent.open > a { background-color: #5c616a; color: #fff }
	
	@media (max-width: 980px) {
		.retail-header-3 .topbar__left { width: 33.3333333% }
	}
	
	.retail-header-3 .topbar__right { float: right }
	
	@media (max-width: 768px) {
		.retail-header-3 .topbar__right { width: 66.6666667% }
	}
	
	.retail-header-3 .topbar__right .topbar__right__nav { font-size: 0 }
	
	.retail-header-3 .topbar__right .topbar__right__nav > * { font-size: 16px }
	
	.retail-header-3 .header__signin { display: inline-block; line-height: 40px; font-size: 16px; font-weight: 600; position: relative; vertical-align: top }
	
	@media (max-width: 980px) {
		.retail-header-3 .header__signin { margin-right: 0; text-align: center; font-size: 13px }
	
		.site-type-3 .retail-header-3 .header__signin { width: 50% }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .header__signin { width: 50% }
	}
	
	body.loggedin .retail-header-3 .header__signin { display: none }
	
	.retail-header-3 .linkset a.header__signin-open,
	.retail-header-3 .linkset a.header__user-menu__toggle { display: block; padding: 0 20px; box-sizing: border-box; font-weight: normal }
	
	@media (max-width: 768px) {
	
		.retail-header-3 .linkset a.header__signin-open,
		.retail-header-3 .linkset a.header__user-menu__toggle { border-left: 1px solid #ccc; border-right: 1px solid #ccc }
	}
	
	.site-type-3 .retail-header-3 .linkset a.header__signin-open,
	.site-type-3 .retail-header-3 .linkset a.header__user-menu__toggle { border-right: 0 }
	
	@media (max-width: 768px) {
	
		.retail-header-3 .linkset a.header__signin-open:hover,
		.retail-header-3 .linkset a.header__user-menu__toggle:hover { color: #fff; background-color: #5c616a }
	}
	
	@media (min-width: 769px) {
	
		.retail-header-3 .linkset a.header__signin-open i,
		.retail-header-3 .linkset a.header__user-menu__toggle i { display: none }
	}
	
	.retail-header-3 .linkset a.header__signin-open:after,
	.retail-header-3 .linkset a.header__user-menu__toggle:after { display: none !important }
	
	.retail-header-3 .linkset a.header__signin-open.disabled,
	.retail-header-3 .linkset a.header__user-menu__toggle.disabled { opacity: 0.5 }
	
	.retail-header-3 .header__signin-overlay { box-sizing: border-box; display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; padding: 30px; overflow: auto; background: rgba(255, 255, 255, 0.95); color: #444; font-size: 16px; text-align: center }
	
	.retail-header-3 .header__signin-overlay.active { display: block }
	
	.retail-header-3 .header__signin-overlay a { color: #5c616a !important }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__signin-overlay { background: #fff }
	}
	
	.retail-header-3 .header__signin-overlay-close { padding: 10px; font-size: 50px; opacity: 1 }
	
	.retail-header-3 .header__signin-form { width: 400px; height: 480px; max-width: 100%; margin: 0 auto; position: relative; top: 50%; color: #444; transform: translateY(-50%) }
	
	@media (max-height: 500px) {
		.retail-header-3 .header__signin-form { top: 10%; transform: none }
	}
	
	.retail-header-3 .header__signin-form .page-header { clear: both; margin-bottom: 0; border: 0 }
	
	.retail-header-3 .header__signin-form h1 { font-size: 30px }
	
	.retail-header-3 .header__signin-form .login_field input[type="text"],
	.retail-header-3 .header__signin-form .login_field input[type="password"] { width: 96%; max-width: 400px }
	
	.retail-header-3 .header__signin-form .well { max-width: 300px; margin-left: auto; margin-right: auto; box-shadow: 0 0 200px 200px #fff; text-align: left }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__signin-form .well { box-shadow: none }
	}
	
	.retail-header-3 #header__cart-preview.linkset { vertical-align: top; float: right; box-sizing: border-box; font-size: 16px }
	
	@media (max-width: 980px) {
		.retail-header-3 #header__cart-preview.linkset { display: inline-block; float: none }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 #header__cart-preview.linkset { width: 50% }
	}
	
	.site-type-3 .retail-header-3 #header__cart-preview.linkset { display: none !important }
	
	.retail-header-3 #header__cart-preview.linkset > li { display: block; border: 0px }
	
	@media (max-width: 768px) {
		.retail-header-3 #header__cart-preview.linkset > li { position: static }
	}
	
	.retail-header-3 #header__cart-preview.linkset > li ul { background-color: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); border-top: 1px solid #eaeaea; position: absolute; right: 0 }
	
	.retail-header-3 #header__cart-preview.linkset > li #cart_window { text-align: left }
	
	.retail-header-3 #header__cart-preview.linkset > li #cart_window a { color: #5c616a }
	
	.retail-header-3 #header__cart-preview.linkset > li #cart_window a:hover,
	.retail-header-3 #header__cart-preview.linkset > li #cart_window a:focus { color: #2d2f33 }
	
	.retail-header-3 #header__cart-preview.linkset > li #cart_window a.btn-primary { color: #fff }
	
	.retail-header-3 #header__cart-preview.linkset > li .header__cart-preview__toggle { padding: 0 20px; text-align: center }
	
	@media (max-width: 980px) {
		.retail-header-3 #header__cart-preview.linkset > li .header__cart-preview__toggle { color: #fff }
	}
	
	.retail-header-3 #header__cart-preview.linkset > li .header__cart-preview__toggle:after { display: none }
	
	@media (max-width: 980px) {
		.retail-header-3 #header__cart-preview.linkset > li .header__cart-preview__toggle:hover { background-color: #5c616a; color: #fff }
	}
	
	@media (max-width: 980px) {
		.retail-header-3 #header__cart-preview.linkset > li.open .header__cart-preview__toggle { background-color: #5c616a; color: #fff }
	}
	
	.retail-header-3 #header__cart-preview.linkset #cart_window_incl { color: #222; background-color: #fff }
	
	@media (min-width: 769px) {
		.retail-header-3 #header__cart-preview.linkset #cart_window_incl { min-width: 400px }
	}
	
	.retail-header-3 #header__cart-preview.linkset #cart_window_incl a { padding: 0 }
	
	.retail-header-3 #header__cart-preview.linkset #cart_window_incl .well.muted { color: #ccc }
	
	.retail-header-3 #header__cart-preview.linkset #cart_window_qty { border-radius: 40px }
	
	.retail-header-3 .header__user-menu { display: inline-block; vertical-align: top; text-align: center }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__user-menu { width: 50% }
	}
	
	.retail-header-3 ul#retail-user-nav { border-top: 1px solid #5c616a; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.5); background-color: #fff; text-align: left }
	
	.retail-header-3 ul#retail-user-nav a { color: #555; text-decoration: none }
	
	.retail-header-3 ul#retail-user-nav a:hover,
	.retail-header-3 ul#retail-user-nav a:focus { background-color: #eee }
	
	.retail-header-3 .logo-bar { margin: 0 }
	
	@media (max-width: 980px) {
		.retail-header-3 .logo-bar { text-align: center }
	}
	
	.retail-header-3 .logo-bar > .container-fluid { font-size: 0; position: relative }
	
	@media (max-width: 980px) {
		.retail-header-3 .logo-bar > .container-fluid { padding: 0 }
	}
	
	.retail-header-3 .logo-bar__logo { box-sizing: border-box; display: block; min-height: 100px; padding: 20px 0 }
	
	@media (max-width: 768px) {
		.retail-header-3 .logo-bar__logo { margin: 0; padding: 10px 0 }
	}
	
	.retail-header-3 .logo-bar__logo .logo { display: block; width: 240px; margin: auto }
	
	.retail-header-3 .logo-bar__logo .logo img { width: 100% }
	
	.retail-header-3 .product-bar__right { display: block; position: relative }
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar__right { display: inline-block; width: 50% }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar__right h4 { margin: 0; font-size: 14px }
	}
	
	.retail-header-3 .product-bar__right .u-search-form { position: absolute; right: 20px; top: -125px }
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar__right .u-search-form { display: none; position: absolute; margin: 0; top: 100%; right: 0 }
	}
	
	.retail-header-3 .product-bar__right .u-search-form .input-search { width: 100%; height: 40px; padding-left: 20px; padding-right: 40px; border-radius: 25px; font-size: 16px; margin: 0; box-sizing: border-box }
	
	@media (min-width: 769px) {
		.retail-header-3 .product-bar__right .u-search-form .input-search { width: 150px; transition: width 0.1s }
	
		.retail-header-3 .product-bar__right .u-search-form .input-search:focus { width: 250px }
	}
	
	.retail-header-3 .product-bar__right .u-search-form .u-search-btn .header__search__button { vertical-align: top; color: #5c616a; position: absolute; top: 0; right: 0; background-color: transparent; background: transparent; padding: 5px 15px; outline: none }
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar__right .u-search-form .u-search-btn .header__search__button { top: 11px; right: 10px }
	}
	
	.retail-header-3 a.header__prodcat__toggle:after { display: none !important }
	
	@media (min-width: 769px) {
		.retail-header-3 a.header__prodcat__toggle { display: none }
	}
	
	@media (max-width: 980px) {
		.retail-header-3 a.header__prodcat__toggle { background-color: #5c616a; color: #fff; text-align: center }
	
		.retail-header-3 a.header__prodcat__toggle:hover,
		.retail-header-3 a.header__prodcat__toggle:focus { background-color: #222; color: #fff !important }
	}
	
	.retail-header-3 .header__prodcat { border-top: 1px solid #eaeaea; border-bottom: 1px solid #eaeaea }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__prodcat { display: inline-block; width: 50% }
	}
	
	.retail-header-3 .header__prodcat ul { background-color: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5) }
	
	@media (max-width: 768px) {
		.retail-header-3 .header__prodcat ul ul { position: static; box-shadow: none; box-sizing: border-box; border-top: 1px solid #eaeaea; border-bottom: 1px solid #eaeaea; border-left: 5px solid #5c616a }
	}
	
	.retail-header-3 .header__prodcat ul ul ul { position: static; box-shadow: none; box-sizing: border-box; border-top: 1px solid #eaeaea; border-bottom: 1px solid #eaeaea; border-left: 5px solid #5c616a }
	
	.retail-header-3 .header__prodcat .link-parent.open > a { background: #5c616a; color: #fff }
	
	.retail-header-3 .header__prodcat a { padding: 0 20px; font-size: 16px; text-decoration: none }
	
	.retail-header-3 .header__prodcat a:hover,
	.retail-header-3 .header__prodcat a:focus { background: #eee; text-decoration: none }
	
	@media (min-width: 769px) {
		.retail-header-3 .header__prodcat > li { text-align: center }
	}
	
	@media (min-width: 769px) {
		.retail-header-3 .header__prodcat > li > ul { display: block; box-shadow: none; position: static }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .header__prodcat > li > ul { width: 200% }
	}
	
	@media (min-width: 769px) {
		.retail-header-3 .header__prodcat > li > ul > li { display: inline-block; text-align: left }
	}
	
	@media (min-width: 769px) {
		.retail-header-3 .header__prodcat > li > ul > li > a:after { display: none !important }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar { padding-bottom: 10px }
	}
	
	.retail-header-3 .product-bar > .container-fluid { font-size: 0 }
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar > .container-fluid > * { font-size: 14px }
	}
	
	@media (max-width: 768px) {
		.retail-header-3 .catalog-sidebar { display: none !important }
	}
	
	.retail-header-3 .product-bar__search { list-style: none }
	
	.retail-header-3 .product-bar__search .product-bar__search__toggle { display: block; background-color: #5c616a; color: #fff; text-align: center; border-left: 1px solid #fff; box-sizing: border-box; font-size: 16px; text-decoration: none }
	
	@media (min-width: 769px) {
		.retail-header-3 .product-bar__search .product-bar__search__toggle { display: none }
	}
	
	.retail-header-3 .product-bar__search .product-bar__search__toggle:hover,
	.retail-header-3 .product-bar__search .product-bar__search__toggle:focus { background-color: #222; text-decoration: none }
	
	.retail-header-3 .product-bar__search .product-bar__search__toggle:after { display: none !important }
	
	.retail-header-3 .product-bar__search .open .u-search-form { display: block }
	
	@media (max-width: 768px) {
		.retail-header-3 .product-bar__search .open .u-search-form { padding: 10px; box-sizing: border-box; width: 200%; background-color: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); z-index: 1 }
	}
	
	.retail-footer-1 { background-color: #222; color: #fff }
	
	@media (max-width: 768px) {
		.retail-footer-1 { text-align: center }
	}
	
	.retail-footer-1 a { color: inherit; text-decoration: underline }
	
	.retail-footer-1 a:hover { text-decoration: none }
	
	.retail-footer-1 a:not(.show-mobile) { line-height: 30px; padding: 0 }
	
	.retail-footer-1 address { margin-bottom: 0 }
	
	.retail-footer-1 .nav-header { color: inherit }
	
	.retail-footer-1 [class*="icon-"] { margin-right: 3px }
	
	.retail-footer-1 .retail-footer__area { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 30px 20px; -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 14px }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__area { display: block; text-align: center }
	}
	
	.retail-footer-1 .retail-footer__area .linkset.click ul { display: block; position: static }
	
	.retail-footer-1 .retail-footer__area .link-parent { overflow: hidden; height: 100%; -webkit-transition: all .3s; transition: all .3s }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__area .link-parent { max-height: 50px }
	}
	
	.retail-footer-1 .retail-footer__area .link-parent.open { max-height: 500px }
	
	.retail-footer-1 .retail-footer__area .link-parent.open > ul { display: block !important }
	
	.retail-footer-1 .retail-footer__area .link-parent.open i.icon-plus:before { content: "\f068" }
	
	.retail-footer-1 .retail-footer__col { padding: 0 10px; -webkit-box-sizing: border-box; box-sizing: border-box }
	
	.retail-footer-1 .retail-footer__col:first-child { padding-left: 0 }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col:first-child { padding: 0 }
	}
	
	.retail-footer-1 .retail-footer__col:last-child { padding-right: 0 }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col:last-child { padding: 0 }
	}
	
	.retail-footer-1 .retail-footer__col .nav-header.show-mobile { display: none; width: 100%; max-width: 300px; border: 1px solid #777; border-radius: 5px; line-height: 40px; margin: 5px auto; padding: 0; text-decoration: none; -webkit-box-sizing: border-box; box-sizing: border-box; position: relative }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col .nav-header.show-mobile { display: block }
	}
	
	.retail-footer-1 .retail-footer__col .nav-header.show-mobile:after { display: none }
	
	.retail-footer-1 .retail-footer__col .nav-header.show-mobile i { position: absolute; right: 10px; top: 14px }
	
	.retail-footer-1 .retail-footer__col-1 { flex-basis: calc(100% / 5) }
	
	@media (min-width: 1025px) {
		.retail-footer-1 .retail-footer__col-1 { min-width: 260px }
	}
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col-1 { margin-bottom: 30px }
	}
	
	.retail-footer-1 .retail-footer__col-2 { flex-basis: calc(100% / 5) }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col-2 { margin-bottom: 10px }
	}
	
	.retail-footer-1 .retail-footer__col-3 { flex-basis: calc(100% / 5) }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__col-3 { margin-bottom: 10px }
	}
	
	.retail-footer-1 .retail-footer__col-4 { flex-basis: calc(100% / 5) }
	
	.retail-footer-1 .retail-footer__col-5 { flex-basis: calc(100% / 5) }
	
	@media (max-width: 980px) {
		.retail-footer-1 #retail-footer-nav__social > li { display: inline-block }
	
		.retail-footer-1 #retail-footer-nav__social > li i { margin: 5px }
	
		.retail-footer-1 #retail-footer-nav__social > li span { display: none }
	}
	
	@media (max-width: 980px) {
	
		.retail-footer-1 #retail-footer-nav__menu .nav-header,
		.retail-footer-1 #retail-footer-nav__categories .nav-header,
		.retail-footer-1 #retail-footer-nav__social .nav-header { display: none }
	}
	
	.retail-footer-1 .retail-footer__logo-wrap { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; position: relative; height: 100%; line-height: 1 }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__logo-wrap { top: 0; -webkit-transform: none; transform: none }
	}
	
	.retail-footer-1 .retail-footer__logo { display: block; max-width: 240px }
	
	@media (max-width: 980px) {
		.retail-footer-1 .retail-footer__logo { display: inline-block }
	}
	
	.retail-footer-1 .bottom-bar { padding: 10px 0; background: #000 }
	
	.retail-footer-1 .bottom-bar .container-fluid { font-size: 0 }
	
	.retail-footer-1 .bottom-bar .container-fluid > * { font-size: 16px }
	
	.retail-footer-1 .bottom-bar__copyright { display: inline-block; width: 50%; vertical-align: top }
	
	@media (max-width: 768px) {
		.retail-footer-1 .bottom-bar__copyright { width: 100%; text-align: center }
	}
	
	.retail-footer-1 .bottom-bar__copyright p,
	.retail-footer-1 .bottom-bar__copyright a { margin: 0; font-size: 12px; line-height: 20px; color: inherit }
	
	.retail-footer-1 .bottom-bar__colophon { display: inline-block; width: 50%; vertical-align: top; text-align: right }
	
	@media (max-width: 768px) {
		.retail-footer-1 .bottom-bar__colophon { width: 100%; text-align: center }
	}
	
	.retail-footer-1 .bottom-bar__colophon p,
	.retail-footer-1 .bottom-bar__colophon a { margin: 0; font-size: 12px; line-height: 20px; color: inherit }
	
	.retail-footer-1 .bottom-bar__colophon p:hover,
	.retail-footer-1 .bottom-bar__colophon p:focus,
	.retail-footer-1 .bottom-bar__colophon a:hover,
	.retail-footer-1 .bottom-bar__colophon a:focus { text-decoration: none }
	
	@media (max-width: 1024px) {
	
		.retail-footer-nav__menu__a-1,
		.retail-footer-nav__categories__a-1 { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center }
	}
	
	.retail-footer-2 { background-color: #444; color: #fff; text-align: center }
	
	.retail-footer-2 .bottom-bar { padding: 5px 0; background-color: #000; text-align: center; color: #fff }
	
	.retail-footer-2 .bottom-bar p { margin: 0; font-size: 12px; line-height: 20px }
	
	@media (max-width: 768px) {
		.retail-footer-2 { text-align: center }
	}
	
	.retail-footer-2 a { color: #fff; line-height: 30px; padding: 0 }
	
	.retail-footer-2 a:not(.show-mobile):hover,
	.retail-footer-2 a:not(.show-mobile):focus { text-decoration: underline }
	
	.retail-footer-2 address { margin-bottom: 0 }
	
	.retail-footer-2 [class*="icon-"] { margin-right: 3px }
	
	.retail-footer-2 .linkset.click ul { display: block; position: static }
	
	.retail-footer-2 .link-parent { overflow: hidden; height: 100%; transition: all .3s }
	
	@media (max-width: 980px) {
		.retail-footer-2 .link-parent { max-height: 50px }
	}
	
	.retail-footer-2 .link-parent.open { max-height: 500px }
	
	.retail-footer-2 .link-parent.open > ul { display: block !important }
	
	.retail-footer-2 .link-parent.open i.icon-plus:before { content: "\f068" }
	
	.retail-footer-2 .retail-footer__logo { margin-bottom: 30px }
	
	.retail-footer-2 .retail-footer__area-1 { padding: 30px 0 }
	
	.retail-footer-2 .retail-footer-nav__social { margin: 20px 0 0 }
	
	.retail-footer-2 .retail-footer__area-2 { padding: 30px 0; background-color: #222 }
	
	.retail-footer-2 .retail-footer__area-2 .nav-header.show-mobile { display: none; width: 100%; max-width: 300px; border: 1px solid #777; border-radius: 5px; line-height: 40px; margin: 5px auto; padding: 0; box-sizing: border-box; position: relative }
	
	@media (max-width: 980px) {
		.retail-footer-2 .retail-footer__area-2 .nav-header.show-mobile { display: block }
	}
	
	.retail-footer-2 .retail-footer__area-2 .nav-header.show-mobile:after { display: none }
	
	.retail-footer-2 .retail-footer__area-2 .nav-header.show-mobile i { position: absolute; right: 10px; top: 14px }
	
	.retail-footer-2 #retail-footer-nav__social .nav-header { display: none }
	
	.retail-footer-2 .retail-footer-nav__menu .nav-header { display: none }
	
	@media (min-width: 981px) {
		.retail-footer-2 .retail-footer-nav__menu > li { display: inline-block; margin: 0 10px }
	}
	
	.home-description { background-color: #5c616a; color: #fff; padding: 50px 0; box-sizing: border-box; position: relative; margin-bottom: 20px }
	
	@media (max-width: 768px) {
		.home-description { padding: 10px 0 }
	}
	
	.home-description:after { display: block; content: ""; position: absolute; top: 100%; width: 1px; height: 1px; left: calc(50% - 10px); border: 10px solid; border-color: #5c616a transparent transparent transparent }
	
	.home-description > .container-fluid { max-width: 1200px; box-sizing: border-box }
	
	.home-description h2 { font-size: 28px; color: inherit; margin-top: 0; margin-bottom: 20px }
	
	@media (max-width: 768px) {
		.home-description h2 { font-size: 20px; margin: 0 }
	}
	
	@media (max-width: 600px) {
		.home-description { height: 300px !important; }
	
		.home-description h2 { font-size: 16px }
	}
	
	.home-description p { color: inherit; line-height: 30px; margin-bottom: 0 }
	
	@media (max-width: 768px) {
		.home-description p { display: none }
	}
	
	.home-cat-tiles__wrap { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex }
	
	@media (max-width: 768px) {
		.home-cat-tiles__wrap { -webkit-box-flex-direction: column; -moz-box-flex-direction: column; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column }
	}
	
	.home-cat-tiles__col1 { margin: 0 10px 0 0 }
	
	.home-cat-tiles__col2 { margin: 0 0 0 10px }
	
	.home-cat-tiles { font-size: 0 }
	
	.home-cat-tiles__col { display: block; -webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; margin: 0 10px; padding: 0 }
	
	@media (max-width: 980px) {
		.home-cat-tiles__col { margin: 0 5px }
	}
	
	.home-cat-tiles__col:first-child { margin-left: 0 }
	
	@media (max-width: 768px) {
		.home-cat-tiles__col:first-child { margin: 0 0 5px }
	}
	
	.home-cat-tiles__col:last-child { margin-right: 0 }
	
	@media (max-width: 768px) {
		.home-cat-tiles__col:last-child { margin: 5px 0 0 }
	}
	
	.home-cat-tiles__2col-wrap { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex }
	
	.home-cat-tiles__tile { margin-bottom: 20px; height: 200px; font-size: 16px; position: relative; overflow: hidden }
	
	@media (max-width: 980px) {
		.home-cat-tiles__tile { margin-bottom: 10px }
	}
	
	@media (max-width: 768px) {
		.home-cat-tiles__tile { display: block; margin: 0 0 10px }
	}
	
	.home-cat-tiles__tile:hover .tile-bg,
	.home-cat-tiles__tile:focus .tile-bg { transform: scale(1.2) !important }
	
	.home-cat-tiles__tile a { display: block; width: 100%; height: 100%; position: relative; background-color: rgba(0, 0, 0, 0.1); -webkit-transition: background-color .3s; transition: background-color .3s }
	
	.home-cat-tiles__tile a:hover { background-color: transparent }
	
	.home-cat-tiles__tile h3 { display: inline-block; margin: 0; position: absolute; bottom: 10px; left: 20px; color: #fff; font-size: 32px; font-weight: bold; text-transform: uppercase; text-shadow: 0 0 10px rgba(0, 0, 0, 0.1); -webkit-transition: font-size .5s; transition: font-size .5s }
	
	@media (max-width: 1080px) {
		.home-cat-tiles__tile h3 { font-size: 28px }
	}
	
	@media (max-width: 980px) {
		.home-cat-tiles__tile h3 { font-size: 20px }
	}
	
	@media (max-width: 768px) {
		.home-cat-tiles__tile h3 { font-size: 26px }
	}
	
	@media (max-width: 480px) {
		.home-cat-tiles__tile h3 { font-size: 21px }
	}
	
	@media (max-width: 400px) {
		.home-cat-tiles__tile h3 { font-size: 16px }
	}
	
	.tile-bg { width: 100%; height: 100%; background-image: url("../../images/mountains-background-2.gif"); background-position: center; background-repeat: no-repeat; background-size: cover; position: absolute; -webkit-transition: all 7s; transition: all 7s }
	
	.tile-1 { display: block }
	
	.tile-2 { display: inline-block; -webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; margin-right: 10px }
	
	@media (max-width: 980px) {
		.tile-2 { margin-bottom: 0; margin-right: 5px }
	}
	
	.tile-3 { display: inline-block; -webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; margin-left: 10px }
	
	@media (max-width: 980px) {
		.tile-3 { margin-bottom: 0; margin-left: 5px }
	}
	
	.tile-4 { display: block }
	
	.tile-5 { display: inline-block; -webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; margin-right: 10px }
	
	@media (max-width: 980px) {
		.tile-5 { margin-bottom: 0; margin-right: 5px }
	}
	
	.tile-6 { display: inline-block; -webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; margin-left: 10px }
	
	@media (max-width: 980px) {
		.tile-6 { margin-bottom: 0; margin-left: 5px }
	}
	
	.trending-products__title { margin-top: 50px; text-align: center; color: #222; font-size: 24px; font-weight: 700 }
	
	.trending-products__title:after { content: ""; display: block; margin: 20px auto 0; width: 80px; height: 4px; background-color: #5c616a }
	
	.footer-reseller { display: table; width: 100%; color: #fff }
	
	.footer-reseller h2 { color: inherit; font-size: 24px; margin-top: 0 }
	
	.footer-reseller h2:after { content: ""; display: block; margin: 20px 0; width: 80px; height: 4px; background-color: #5c616a }
	
	.footer-reseller p { color: inherit }
	
	@media (max-width: 768px) {
		.footer-reseller p { font-size: 16px }
	}
	
	.footer-reseller i { color: inherit }
	
	.footer-reseller a { color: inherit }
	
	.footer-reseller__col { display: table-cell; width: 50%; padding: 40px 20px; box-sizing: border-box }
	
	@media (max-width: 600px) {
		.footer-reseller__col { display: block; width: 100%; padding: 20px }
	}
	
	.footer-reseller__col-1 { background-color: #eee; background-image: url(../../images/retail-image-placeholder-2.png); background-position: center; background-repeat: no-repeat; background-size: cover }
	
	@media (max-width: 600px) {
		.footer-reseller__col-1 { padding: 24% }
	}
	
	@media (min-width: 1401px) {
		.footer-reseller__col-1 { background-position: center right }
	}
	
	.footer-reseller__col-2 { background-color: #6e6e6e; position: relative }
	
	.footer-reseller__col-2:before { content: ""; width: 1px; height: 1px; border: 10px solid; border-color: transparent #6e6e6e transparent transparent; position: absolute; right: 100%; top: 45px; z-index: 1 }
	
	.footer-reseller__wrap { width: 50vw; max-width: 700px }
	
	@media (max-width: 600px) {
		.footer-reseller__wrap { width: 100% }
	}
	
	.footer-reseller__wrap .wpc_page_img { position: absolute; top: 0; left: -100%; height: 100%; width: 100%; overflow: hidden }
	
	.footer-reseller__wrap .wpc_page_img img { display: block; position: absolute; top: -9999px; left: -9999px; bottom: -9999px; right: -9999px; margin: auto; object-fit: cover; min-width: 100%; min-height: 100% }
	
	.footer-email-list { display: block; width: 100%; margin: 0; padding: 20px; box-sizing: border-box; border-top: 1px solid #eee }
	
	@media (max-width: 600px) {
		.footer-email-list { padding-top: 5px }
	}
	
	.footer-email-list form { margin: 0 auto; max-width: 660px }
	
	.footer-email-list__label { display: inline-block; height: 40px; margin: 0 5px 0 0; line-height: 40px; text-transform: uppercase; font-size: 16px; font-weight: 300; color: #222 }
	
	@media (max-width: 600px) {
		.footer-email-list__label { display: block; font-size: 18px }
	}
	
	input.footer-email-list__email { margin: 0; padding: 0 10px; box-sizing: border-box; height: 40px; line-height: 40px; width: calc(100% - 282px); max-width: 350px; vertical-align: top }
	
	@media (max-width: 980px) {
		input.footer-email-list__email { font-size: 16px }
	}
	
	@media (max-width: 600px) {
		input.footer-email-list__email { width: calc(100% - 120px) }
	}
	
	.footer-email-list__submit { vertical-align: top; background-color: #5c616a; color: #fff; text-transform: uppercase; border: 0; height: 40px; line-height: 40px; padding: 0 30px; box-sizing: border-box; font-size: 16px }
	
	#home-description { margin-bottom: 0px }
	
	.home .header__make-model { background-color: #0055a5; padding-top: 10px }
	
	.home .nys_section a.nys_subtitle { display: none }
	
	.home #nys_window { margin: 0 25% 0 25% }
	
	.home div#nys_window > div { display: none }
	
	.home div#nys_window #nys_section_SCHEMATICS { display: inline }
	
	.home .nys_search_terms { display: inline-flex }
	
	.home .nys_search_terms select { margin: 15px }
	
	@media (max-width: 768px) {
		.home .nys_search_terms { display: block }
	
		.home #nys_window { margin: 0 10px 0 10px }
	
		.home .nys_search_terms select { width: 90% }
	}
	
	.bottom-bar { color: rgba(255, 255, 255, 0.5); background-color: #000000; padding: 10px 0; }
	
	.breadcrumb { display: none !important; }
	
	.logo-bar > .container-fluid { }
	
	#landing-page-header { position: absolute; top: 0; left: 0; width: 100%; max-height: 130px; z-index: 9999; background: white; }
	
	.home-description { position: absolute; top: 170px; left: 0; width: 100%; background-image: url(images/header.jpg); background-size: contain; background-repeat: no-repeat; background-position: center; background-color: #0255A5; }
	
	#retail-footer-1 { position: absolute; left: 0; width: 100%; }
	
	.retail-footer-1 { background-color: #222; color: #fff; }
	
	.logo-bar__right { display: flex; align-items: center; justify-content: flex-end; position: relative; margin-left: auto; vertical-align: top; min-height: auto; min-width: 320px; height: 100%; }
	
	.logo-bar__logo { display: flex; align-items: center; vertical-align: top; margin-right: 20px; max-width: 240px; min-height: 120px; margin-bottom: 10px; }
	
	.logo-bar__right { display: flex; align-items: center; justify-content: flex-end; position: relative; margin-left: auto; vertical-align: top; min-height: auto; min-width: 320px; height: 100%; }
	
	.logo-bar > .container-fluid { display: flex; align-items: center; }
	
	#landing-page-main { position: absolute; left: 0; width: 100%; }
	
	#retail-topbar-left-menu-signin-signin > li { display: inline-block; }
	
	@media (min-width: 1025px) {
		#retail-topbar-left-menu-signin-signin { display: block; }
	}
	
	#retail-topbar-left-menu-signin-signin { position: static; transition: max-height 0.2s ease-out; text-align: left; }
	
	.home-cat-tiles__wrap { display: flex; }
	
	@media (max-width: 768px) {
		.home-cat-tiles__wrap { flex-direction: column; }
	}
	
	.home-cat-tiles__col1 { margin: 0 10px 0 0; }
	
	.home-cat-tiles__col2 { margin: 0 0 0 10px; }
	
	.home-cat-tiles { font-size: 0; }
	
	.home-cat-tiles__col { display: block; flex: 1; margin: 0 10px; padding: 0 }
	
	@media (max-width: 980px) {
		.home-cat-tiles__col { margin: 0 5px }
	}
	
	.home-cat-tiles__col:first-child { margin-left: 0; }
	
	@media (max-width: 768px) {
		.home-cat-tiles__col:first-child { margin: 0 0 5px }
	}
	
	.home-cat-tiles__col:last-child { margin-right: 0; }
	
	@media (max-width: 768px) {
		.home-cat-tiles__col:last-child { margin: 5px 0 0; }
	}
	
	.home-cat-tiles__2col-wrap { display: flex; }
	
	.home-cat-tiles__tile { margin-bottom: 20px; height: 200px; font-size: 16px; position: relative; overflow: hidden; }
	
	@media (max-width: 980px) {
		.home-cat-tiles__tile { margin-bottom: 10px; }
	}
	
	@media (max-width: 768px) {
		.home-cat-tiles__tile { display: block; margin: 0 0 10px; }
	}
	
	.home-cat-tiles__tile:hover .tile-bg,
	.home-cat-tiles__tile:focus .tile-bg { transform: scale(1.2) !important; }
	
	.home-cat-tiles__tile a { display: block; width: 100%; height: 100%; position: relative; background-color: rgba(0, 0, 0, 0.1); transition: background-color .3s }
	
	.home-cat-tiles__tile a:hover { background-color: transparent }
	
	.home-cat-tiles__tile h3 { display: inline-block; margin: 0; position: absolute; bottom: 10px; left: 20px; color: #fff; font-size: 32px; font-weight: bold; text-transform: uppercase; text-shadow: 0 0 10px rgba(0, 0, 0, 0.1); transition: font-size .5s }
	
	@media (max-width: 1080px) {
		.home-cat-tiles__tile h3 { font-size: 28px }
	}
	
	@media (max-width: 980px) {
		.home-cat-tiles__tile h3 { font-size: 20px }
	}
	
	@media (max-width: 768px) {
		.home-cat-tiles__tile h3 { font-size: 26px }
	}
	
	@media (max-width: 480px) {
		.home-cat-tiles__tile h3 { font-size: 21px }
	}
	
	@media (max-width: 400px) {
		.home-cat-tiles__tile h3 { font-size: 16px }
	}
	
	.tile-bg { width: 100%; height: 100%; background-image: url("../../images/mountains-background-2.gif"); background-position: center; background-repeat: no-repeat; background-size: cover; position: absolute; -webkit-transition: all 7s; transition: all 7s }
	
	.tile-1 { display: block; }
	
	.tile-2 { display: inline-block; flex: 1; margin-right: 10px }
	
	@media (max-width: 980px) {
		.tile-2 { margin-bottom: 0; margin-right: 5px }
	}
	
	.tile-3 { display: inline-block; flex: 1; margin-left: 10px }
	
	@media (max-width: 980px) {
		.tile-3 { margin-bottom: 0; margin-left: 5px; }
	}
	
	.tile-4 { display: block; }
	
	.tile-5 { display: inline-block; flex: 1; margin-right: 10px; }
	
	@media (max-width: 980px) {
		.tile-5 { margin-bottom: 0; margin-right: 5px }
	}
	
	.tile-6 { display: inline-block; flex: 1; margin-left: 10px }
	
	@media (max-width: 980px) {
		.tile-6 { margin-bottom: 0; margin-left: 5px }
	}
	
	body.dashboard.signin { max-height: none !important; min-height: 1200px; margin-top: 570px !important; background: white !important; }
	
	.app-signin { background: none !important; padding: 0 !important; max-width: none !important; box-shadow: none !important; max-width: 1600px !important; }
	
	.custacctlogin { }
	
	.private-mode__header { display: none !important }
	
	.app-signin-form { position: absolute; top: 570px; }
	
	.app-signin-form .well { max-width: none !important; width: 700px !important; margin-top: 15px !important; padding-top: 50px; padding-bottom: 50px; }
	
	.custom-account-login { display: flex !important; }
	
	.login-links ul,
	.login-links li { display: inline-block !important; }
	
	.nav-header,
	#retail-topbar-left-menu-signin a { text-transform: uppercase !important; }
	
	.signin #retail-topbar-left-menu-signin a { text-transform: uppercase !important; font-size: 16px; }
	
	.signin .topbar .container-fluid,
	.footer-email-list,
	.footer-reseller,
	.home-description:after,
	.home .page-main,
	.retail-footer__company-name,
	.retail-footer__address-text,
	.retail-footer__email,
	.retail-footer__address br { display: none; }
	
	@media (max-width: 1025px) {
		.logo-bar__right #retail-topbar-left-menu-signin { display: none; }
	
		.signin .topbar .container-fluid { display: block; }
	}
	
	.signin .logo-bar__logo .logo img { padding: 0; }
	
	.signin .logo-bar__logo { margin-bottom: 10px; }
	
	.signin .header__hero-search { padding: 0 !important; margin: 0; }
	
	.signin .header__hero-search__header { display: none !important; }
	
	.signin .header__hero-search .u-search-text .input-search { height: 30px !important; border-radius: 0; min-height: 30px; }
	
	.signin .header__hero-search .u-search-btn button.btn { height: 30px; border-radius: 0; min-height: 30px; line-height: 1px !important; padding: 0; width: 30px; background: black !important; color: white !important }
	
	@media (min-width: 980px) {
		.header__hero-search__container { position: relative; max-width: 1600px !important; }
	
		.signin .header__hero-search form { position: absolute; top: -82px; right: 15px; width: 250px; max-width: 100%; }
	}
	
	@media (max-width: 1200px) {
		.signin .header__hero-search form { top: -120px }
	}
	
	@media (max-width: 980px) {
		.signin .header__hero-search form { top: 0px; }
	}
	
	.logo-bar__right { margin-right: 250px; }
	
	@media (max-width: 1200px) {
		.logo-bar__right { margin-right: 0; }
	}
	
	[class*="retail-header"] .topbar__menu-toggle { color: white !important; }
	
	.home .home-description { background-image: url(images/header.jpg); background-size: contain; padding: 20% 0 0; background-repeat: no-repeat; background-position: center; }
	
	.product-search form { display: flex; flex-wrap: wrap; justify-content: space-between; width: 90%; margin: 0 auto 24px; }
	
	.product-search form label { display: block; margin-bottom: 0; font-size: 28px; line-height: 36px; }
	
	.product-search form button,
	.product-search form button:hover { background: white !important; color: #333 !important; border: 0; padding: 0 30px; line-height: 36px; height: 36px }
	
	.product-search form select { margin: 0; }
	
	@media (max-width: 980px) {
		.product-search form label { display: none !important; }
	}
	
	@media (max-width: 730px) {
		.product-search form select { width: 100%; margin-bottom: 10px; }
	
		.product-search form .filter-wrap,
		.product-search form .filter-wrap input { width: 100%; }
	}
	
	.manufacturers-wrap .trending-products__title { text-transform: uppercase; }
	
	.manufacturer-logos { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; }
	
	.manufacturer-logos img { display: block; float: left; flex: 0 0 auto; align-self: center; width: 16%; }
	
	@media (max-width: 768px) {
		.manufacturer-logos img { width: 25%; }
	}
	
	@media (max-width: 500px) {
		.manufacturer-logos img { width: 33.33%; }
	}
	
	.marketing-wrap { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: center; margin-top: 50px; }
	
	.marketing-wrap .marketing__well { width: 33%; }
	
	.marketing-wrap .marketing__well img { width: 100%; }
	
	@media (max-width: 768px) {
		.marketing-wrap { display: block; }
	
		.marketing-wrap .marketing__well { width: 100%; margin-bottom: 10px; }
	}
	
	.retail-footer-1 { margin-top: 20px; }
	
	.retail-footer-1 a,
	.retail-footer-1 .nav-header span { color: #A4A4A4 !important; text-decoration: none !important; }
	
	@media (max-width: 980px) {
	
		.retail-footer-1 #retail-footer-nav__menu .nav-header,
		.retail-footer-1 #retail-footer-nav__categories .nav-header,
		.retail-footer-1 #retail-footer-nav__social .nav-header { display: block; }
	
		.retail-footer-1 #retail-footer-nav__social > li { display: block; }
	}
	
	.manufacturer-logos > * { display: block !important; float: left !important; flex: 0 0 auto !important; align-self: center !important; width: 16% !important; }
	
	.manufacturer-logos > * img { width: 100% !important; }
	
	#SCHEMATICS .module-body { background: none !important }
	
	#SCHEMATICS .multi-select-help-text { color: white !important; }
	
	#SCHEMATICS .multi-select-submit { margin: 0 !important; background: white; border: none; color: #333; }
	
	#nys_section_SCHEMATICS { display: none !important; }
	
	.product-search .module,
	.product-search .module-body { background: none !important; box-shadow: none !important; }
	
	#faceted-search-container-custom h2,
	#faceted-search-container-custom .close { display: none; }
	
	#catalog-sidebar a { color: #333; }
	
	#catalog-sidebar .category-window__body > .linkset li.active > a { color: #0255A5; background: none }
	
	.catalog-sidebar .link-parent.open > a { color: white !important; background-color: #0255A5 !important; }
	
	#catalog-sidebar .category-window__body > .linkset li > a:hover { background-color: #3677B9 !important; color: white !important; }
	
	.signin .topbar__menu-toggle,
	.signin .logo-bar__right .linkset > li > a { color: #222222 !important; font-size: 16px !important; }
	
	.logo { width: 146px !important }
	
	.login_btn_wrap,
	.custom-account-login__submit { margin: 0 !important; }
	
	.custom-account-login { position: relative; }
	
	.contact-login input[type="text"],
	.contact-login input[type="password"] { width: 100%; }
	
	[for="logonUsername"] { position: absolute; top: -24px; left: 0; }
	
	[for="logonPassword"] { position: absolute; top: -24px; left: 40% }
	
	.login_field { margin: 0 2% 0 0 !important; width: 38% }
	
	#logon_container { position: relative; }
	
	.login-links { position: absolute; bottom: 30px; left: 282px !important; }
	
	#logon_container { padding: 10px 10px 10px 260px; border: 1px solid grey; }
	
	body .private-mode__header { display: block !important; position: absolute; z-index: 9999; }
	
	@media (min-width: 768px) {
		#logon_container { width: 690px; }
	}
	
	@media (min-width: 960px) {
		#logon_container { width: 800px; }
	}
	
	@media (min-width: 1200px) {
		#logon_container { width: 1075px; background: url(images/marketing-well-placeholder-2.jpg) no-repeat 99% center; background-size: auto 90%; }
	}
	
	@media (min-width: 1650px) {
		#logon_container { width: 1325px; background: url(images/marketing-well-placeholder-2.jpg) no-repeat 99% center; background-size: auto 90%; }
	
		.app-signin-form .well { width: 940px !important; }
	}
	
	@media (max-width: 1649px) {
		#logon_container { margin: 0 20px !important; }
	
		body .private-mode__header { left: 20px; }
	}
	
	@media (max-width: 1405px) {
		#logon_container { background: none; width: 708px; }
		.register-button { display: none !important }
	}
	
	@media (max-width: 1036px) {
		body .private-mode__header { display: none !important; }
	
		#logon_container { padding-left: 20px !important; }
	
		.login-links { left: 42px !important; }
	}
	
	#make2Dmodel-options-clone { display: none !important; }
	
	#landing-registration-form { margin: 0; }
	
	.product-search form { display: flex; flex-wrap: wrap; justify-content: space-between; width: 90%; margin: 0 auto 24px; }
	
	.product-search form select { width: 30% }
	
	.product-search label { color: white; }
	
	.home-description { padding: 20% 0 0 !important }
	
	#landing-registration-form .reg-form-header { width: 36% !important; text-align: right; padding-top: 45px; }
	
	#landing-registration-form .reg-form-header h2 { font-size: 60px; color: #0255A5; }
	
	#landing-registration-form .reg-form-fields { width: 60%; }
	
	#landing-registration-form .reg-form-fields form { display: flex; justify-content: space-around; align-content: center; align-items: flex-start; }
	
	#landing-registration-form .reg-form-fields .col { width: 30%; }
	
	#landing-registration-form input[type="submit"] { margin-top: 10px; }
	
	#landing-page-main { position: absolute; left: 0; width: 100%; top: 845px; }
	
	#logon_container { top: 220px; }
	
	body .private-mode__header { top: 780px; }
	
	.home-description { height: 600px; }
	
	#landing-registration-form { position: absolute; top: 2150px !important; left: 0; width: 100%; }
	
	#retail-footer-1 { top: 2900px !important; }
	
	@media (max-width: 980px) {
	
		.signin .topbar__menu-toggle,
		.signin .logo-bar__right .linkset > li > a { color: white !important; }
	
		#landing-registration-form { top: 1815px !important; }
	
		#retail-footer-1 { top: 4000px !important; }
	
		.reg-form-fields form { display: block !important; }
	
		body #landing-registration-form .reg-form-header,
		body #landing-registration-form .reg-form-fields { width: 100% !important; }
		#landing-registration-form .reg-form-header{ text-align:center!important}
	
		.reg-form-fields .col { width: 100% !important; }
	
		.reg-form-header { text-align: center; }
	
		input[type="submit"] { margin-top: 10px !important; }
	}
	
	@media (max-width: 768px) {
		#logon_container { width: 415px !important; }
	
		.app-signin-form .well { width: auto !important; }
	
		.login_field { width: 36%; }
	
		.login-links { left: 0px !important; bottom: 18px !important }
	
		.reg-form-header,
		.reg-form-fields { width: 100% !important; }
	
	   body  #landing-registration-form { top: 2650px !important; }
	
		.reg-form-header { text-align: center; }
	
	   body  #retail-footer-1 { top: 4450px !important; }
	
		.reg-form-fields form { display: block !important; }
	
		.reg-form-fields .col { width: 100% !important; }
	
		input[type="submit"] { margin-top: 10px !important; }
	
		.signin .topbar__menu-toggle,
		.signin .logo-bar__right .linkset > li > a { color: white !important; }
	}
	
	@media (max-width: 500px) {
		#logon_container { width: 415px !important; }
	
		.app-signin-form .well { width: auto !important; }
	
		.login_field { width: 36%; }
	
		.login-links { left: 0px !important; bottom: 18px !important }
	
		.reg-form-header,
		.reg-form-fields { width: 100% !important; }
	
		#landing-registration-form { top: 2640px !important; }
	
		.reg-form-header { text-align: center !important; }
	
		#retail-footer-1 { top: 4465px !important; }
	
		.reg-form-fields form { display: block !important; }
	
		#landing-registration-form .reg-form-header,
		#landing-registration-form .reg-form-fields,
		.reg-form-fields .col { width: 100% !important; }
	
		input[type="submit"] { margin-top: 10px !important; }
	
		.signin .topbar__menu-toggle,
		.signin .logo-bar__right .linkset > li > a { color: white !important; }
	
		.home-description { background-size: contain !important; }
	}
	
	.signin .header__hero-search { padding: 0 !important; margin: 0; }
	
	.signin .header__hero-search__header { display: none; }
	
	.signin .header__hero-search .u-search-text .input-search { height: 30px !important; border-radius: 0 !important; min-height: 30px; }
	
	.signin .header__hero-search .u-search-btn button.btn { height: 30px; border-radius: 0; min-height: 30px; line-height: 1px !important; padding: 0; width: 30px; background: black !important; color: white !important }
	
	@media (min-width: 980px) {
		body .header__hero-search__container { position: relative; max-width: 1600px !important; }
	
		.signin .header__hero-search form { position: absolute !important; top: -82px; right: 0; width: 250px !important; max-width: 100%; }
	}
	
	@media (max-width: 1200px) {
		.signin .header__hero-search form { top: -120px }
	}
	
	@media (max-width: 980px) {
		.signin .header__hero-search form { top: 0px; width: 100%; }
	}
	
	.logo-bar__right { margin-right: 250px; }
	
	@media (max-width: 1200px) {
		.logo-bar__right { margin-right: 0; }
	}
	
	[class*="retail-header"] .topbar__menu-toggle { color: white !important; }
	
	.signin .header__hero-search .u-search-btn button.btn,
	.signin .header__hero-search .u-search-btn button.btn:hover,
	.signin .header__hero-search .u-search-btn button.btn:active,
	.signin .header__hero-search .u-search-btn button { height: 30px !important; border-radius: 0 !important; min-height: 30px !important; line-height: 1px !important; padding: 0 !important; width: 30px !important; background: black !important; color: white !important; position: relative; z-index: 999; }
	
	@media (min-width:980px) {
		#retail-topbar-left-menu { display: none !important }
	}
	
	@media (max-width: 980px) {
		.topbar #retail-topbar-left-menu { background-color: #FFFFFF; }
	}
	
	@media (max-width: 1024px) {
		.topbar #retail-topbar-left-menu .retail-topbar-left-menu__a-1 { color: #333333 !important; }
	
		.signin #retail-topbar-left-menu { text-align: center; box-shadow: 0 2px 4px rgb(0 0 0 / 50%); position: absolute; width: 100vw !important; z-index: 2; }
	
		.signin #retail-topbar-left-menu > li { display: block; background-color: #fff; }
	
		.topbar #retail-topbar-left-menu .retail-topbar-left-menu__a-1:hover,
		.topbar #retail-topbar-left-menu .retail-topbar-left-menu__a-1:focus { color: #FFFFFF !important; background: #0055a5 !important; }
	
		.signin #retail-topbar-left-menu > li { display: block; background-color: #fff; border-top: 1px solid #ccc; }
	}
	
	@media (max-width: 600px) {
		#logon_container { top: -80px; }
	
		#landing-page-main { top: 545px; }
	
		#landing-registration-form { top: 2340px !important; }
	
		#retail-footer-1 { top: 4100px !important; }
	}
	
	#logon_container { top: -400px; }
	
	.home-description { top: 400px }
	
	#landing-page-main { top: 630px; }
	
	html body .private-mode__header { display: none !important }
	
	@media (max-width: 600px) {
		#logon_container { top: -340px; border: 0; }
	
		.home-description { top: 415px }
	
		#landing-page-main { top: 195px!important; }
	
		#landing-registration-form { top: 2100px !important; }
	
		#retail-footer-1 { top: 3850px !important; }
	}
	
	@media (max-width: 980px) {
		#logon_container { top: -340px; top: -294px !important; border: 0; }
	
		.home-description { top: 415px; top: 465px !important; }
	
		#landing-page-main { top: 320px; }
	
		#landing-registration-form { top: 1815px !important; }
	
		#retail-footer-1 { top: 3850px !important; }
	}
	
	#logon_container { padding-left: 12px; }
	
	.login-links { left: 32px !important; }
	
	@media (min-width: 1650px) {
		#logon_container { width: 1582px; max-width: 100vw; }
	
		.app-signin-form .well { width: 1205px !important; }
	}
	
	@media(max-width:980px) {
		.home-description { height: 300px; }
	}
	
	.login-error-alert { position: absolute; top: -444px; left: 20px; }
	
	@media(max-width:980px) {
		.login-error-alert { top: -315px; left: 40px; }
	}
	
	@media(max-width:600px) {
	
		body { width: 100%; overflow-x: hidden; }
		body #logon_container { width: 100% !important; left: -40px; }
	
		.login-error-alert { left: 0; }
		.product-search form select { width: 100% !important; }
		/*body .custom-account-login{display:block!important;}*/
		body .app-signin-form .well { width: 96% !important; }
		body .login-links { width: 76% !important; }
	
		body .login-links a { font-size: 13px; }
		body .login_btn_wrap .btn { font-size: 12px; }
		body #landing-registration-form { top: 2100px !important; }
	
		body .login-error-alert { width: 100% !important; }
	}
	
	.register-button { position: absolute; cursor: pointer; right: 0; top: 0; width: 375px; height: 100%; }
	#logon_container:before { display: table; content: "Sign in to your Account"; line-height: 0; font-weight: bold; left: 12px; position: relative; }
	
	@media(max-width:980px) {
	
		#logon_container:before { top: 30px; width: 100%; }
	}
	body .trending-products__title{color:black!important;}
	body .home-description{background-size:cover!important; padding:0!important;}   
	body .home-description >.container-fluid{position:relative; height:600px;}
	body .home-description >.container-fluid > .product-search{position:absolute; width:100%; top:470px;}
	@media(max-width:980px) {
	
		body .home-description{height:300px!important;}
		body .home-description >.container-fluid > .product-search{top:180px;}
	}
	
	@media(max-width:600px) {
		body .home-description{height:170px!important;}
		body .home-description >.container-fluid > .product-search{top:10px;}
	}
	
	
	@media(min-width:1450px) {
		body .home-description{height:600px!important;}
		body .home-description >.container-fluid > .product-search{top:470px;}
	}
	
	@media(min-width:1650px) {
		body .home-description{height:600px!important;}
		body .home-description >.container-fluid > .product-search{ top:470px;}
	}
	
	.manufacturers-wrap .trending-products__title{margin-top:20px!important;}
	.phonefield{display:flex;}
	.product-search form label{font-weight:normal!important;}
	</style>
<header id="landing-page-header">
<div id="topbar" class="topbar print-hide">
<div class="container-fluid"><nav class="topbar__left">
<ul class="topbar__left__menu linkset click-persist js-click-outside-to-close">
<li class="link-parent drop"><a class="topbar__menu-toggle" href="#0"> <i class="icon-reorder"></i> Menu </a>
<ul id="retail-topbar-left-menu" class="horizontal retail-topbar-left-menu retail-topbar-left-menu__ul-1">
<li class="retail-topbar-left-menu__li-1" data-key="5E0B5889E10E47028CE33AC69C40D3DC"><a class="retail-topbar-left-menu__a-1" href="https://descovacuum.cimstaging.com/pc_combined_results.asp">Product Search</a></li>
<li class="retail-topbar-left-menu__li-1" data-key="97CEF4A5B4A94613996744AA4BAD8B18"><a class="retail-topbar-left-menu__a-1" href="Schematics">Schematics</a></li>
<li class="retail-topbar-left-menu__li-1" data-key="2FA7F2D8797640DC9D47653396A48462"><a class="retail-topbar-left-menu__a-1" href="resourcecenter.asp">Info Center</a></li>
<li class="retail-topbar-left-menu__li-1 link-parent drop" data-key="67CD3978D3A5471589F3A40B6C9378C5"><a class="retail-topbar-left-menu__a-1" href="#">About</a>
<ul class="retail-topbar-left-menu__ul-2">
<li class="retail-topbar-left-menu__li-2" data-key="85BAA44D0A1F4D1AB5FE82FCD6BA0FAC"><a class="retail-topbar-left-menu__a-2" href="about">About Us</a></li>
<li class="retail-topbar-left-menu__li-2" data-key="E4ECE02AF2C74516BD78B8A2ECFB6413"><a class="retail-topbar-left-menu__a-2" href="contact_us.asp">Contact</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<div class="topbar__right">&nbsp;</div>
</div>
</div>
<div id="logo-bar" class="logo-bar">
<div class="container-fluid">
<div class="logo-bar__logo"><a class="logo" href="https://descovacuum.cimstaging.com"><img src="https://dqmy05zjbnp6b.cloudfront.net/images/logo.jpg" alt="Desco Vacuum Supply Logo" /></a></div>
<nav class="logo-bar__right">
<ul id="header__prodcat" class="header__prodcat linkset click-persist js-click-outside-to-close">
<li class="link-parent products__link-parent drop"><a class="header__prodcat__toggle" href="#0"><i class="icon-tags"></i> Products By Category</a>
<ul class="prodcat prodcat__ul-1">
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="products/AIR" data-parent-href="/products/AIR" data-parent-name="Air Driven Rug Tools/Parts" data-key="F5E87AF08BFD4144A3B2AB46473B87C6"><span class="cat-nm">Air Driven Rug Tools/Parts</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=552B66BE5E3A438FA0DCD08F7D7E3B7E" data-parent-href="/products/AIR|pc_combined_results.asp?pc_id=552B66BE5E3A438FA0DCD08F7D7E3B7E" data-parent-name="Air Driven Rug Tools/Parts|AIR DRIVEN CARPET TOOL PARTS" data-key="552B66BE5E3A438FA0DCD08F7D7E3B7E"><span class="cat-nm">AIR DRIVEN CARPET TOOL PARTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C94B5EF572064BD193A300BD25EB9FF1" data-parent-href="/products/AIR|pc_combined_results.asp?pc_id=552B66BE5E3A438FA0DCD08F7D7E3B7E|pc_combined_results.asp?pc_id=C94B5EF572064BD193A300BD25EB9FF1" data-parent-name="Air Driven Rug Tools/Parts|AIR DRIVEN CARPET TOOL PARTS|H-P AIR DRIVEN CARPET TOOL PARTS" data-key="C94B5EF572064BD193A300BD25EB9FF1"><span class="cat-nm">H-P AIR DRIVEN CARPET TOOL PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=89CF05DF9B2A49858441A57046770451" data-parent-href="/products/AIR|pc_combined_results.asp?pc_id=552B66BE5E3A438FA0DCD08F7D7E3B7E|pc_combined_results.asp?pc_id=89CF05DF9B2A49858441A57046770451" data-parent-name="Air Driven Rug Tools/Parts|AIR DRIVEN CARPET TOOL PARTS|WESSEL AIR DRIVEN CARPET TOOL PTS" data-key="89CF05DF9B2A49858441A57046770451"><span class="cat-nm">WESSEL AIR DRIVEN CARPET TOOL PTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/AIRTLS" data-parent-href="/products/AIR|/products/AIRTLS" data-parent-name="Air Driven Rug Tools/Parts|AIR DRIVEN CARPET / HARD FLOOR TOOLS" data-key="B9276718933A462E9E9758AA20932529"><span class="cat-nm">AIR DRIVEN CARPET / HARD FLOOR TOOLS</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9" data-parent-name="Attachments &amp; Tools-Genuine" data-key="64798855DCE74A65A94B4E9B760E32F9"><span class="cat-nm">Attachments &amp; Tools-Genuine</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=63AF2ECC7D9D40E0A4645F31C396916B" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=63AF2ECC7D9D40E0A4645F31C396916B" data-parent-name="Attachments &amp; Tools-Genuine|BEAM GENUINE ATTACHMENTS / TOOLS" data-key="63AF2ECC7D9D40E0A4645F31C396916B"><span class="cat-nm">BEAM GENUINE ATTACHMENTS / TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=0BFF2988DB654CE3B14A3C4CE4742B7B" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=0BFF2988DB654CE3B14A3C4CE4742B7B" data-parent-name="Attachments &amp; Tools-Genuine|BISSELL GENUINE ATTACHMENTS/TOOLS" data-key="0BFF2988DB654CE3B14A3C4CE4742B7B"><span class="cat-nm">BISSELL GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=F1027477535748A888166123E17A9BB4" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=F1027477535748A888166123E17A9BB4" data-parent-name="Attachments &amp; Tools-Genuine|BOSCH GENUINE ATTACHMENTS/TOOLS" data-key="F1027477535748A888166123E17A9BB4"><span class="cat-nm">BOSCH GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6722448B96DB439EB9C8331858D984C3" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=6722448B96DB439EB9C8331858D984C3" data-parent-name="Attachments &amp; Tools-Genuine|CLEAN OBSESSED ATTACHMENTS/TOOLS" data-key="6722448B96DB439EB9C8331858D984C3"><span class="cat-nm">CLEAN OBSESSED ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=81841B8B79F84367A410132852956E41" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=81841B8B79F84367A410132852956E41" data-parent-name="Attachments &amp; Tools-Genuine|COMPACT GENUINE ATTACHMENTS/TOOLS" data-key="81841B8B79F84367A410132852956E41"><span class="cat-nm">COMPACT GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7D41BE35BBCD4313B8EE152CA86FCBF2" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=7D41BE35BBCD4313B8EE152CA86FCBF2" data-parent-name="Attachments &amp; Tools-Genuine|DYSON GENUINE ATTACHMENTS/TOOLS" data-key="7D41BE35BBCD4313B8EE152CA86FCBF2"><span class="cat-nm">DYSON GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=5DB09A101EE14E1B97F58CBD21539533" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=5DB09A101EE14E1B97F58CBD21539533" data-parent-name="Attachments &amp; Tools-Genuine|EUREKA/ELECTROLUX GEN ATT/TOOLS" data-key="5DB09A101EE14E1B97F58CBD21539533"><span class="cat-nm">EUREKA/ELECTROLUX GEN ATT/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=63F29D99CF1843A4BA73A0514D0F99F8" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=63F29D99CF1843A4BA73A0514D0F99F8" data-parent-name="Attachments &amp; Tools-Genuine|HAYDEN GENUINE ATTACHMENTS/TOOLS" data-key="63F29D99CF1843A4BA73A0514D0F99F8"><span class="cat-nm">HAYDEN GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=F3CCE2550A774B8092DCEB8F89FB0901" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=F3CCE2550A774B8092DCEB8F89FB0901" data-parent-name="Attachments &amp; Tools-Genuine|HOOVER GENUINE ATTACHMENTS/TOOLS" data-key="F3CCE2550A774B8092DCEB8F89FB0901"><span class="cat-nm">HOOVER GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D676DEC61399411BABEFC90D44EF7A90" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=D676DEC61399411BABEFC90D44EF7A90" data-parent-name="Attachments &amp; Tools-Genuine|HYDROGEN GENUINE ATTACHMENTS/TOOLS" data-key="D676DEC61399411BABEFC90D44EF7A90"><span class="cat-nm">HYDROGEN GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=415F13B291B046428672EA3E3DD9A4C3" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=415F13B291B046428672EA3E3DD9A4C3" data-parent-name="Attachments &amp; Tools-Genuine|JOHNNY VAC GEN ATTACHMENTS/TOOLS" data-key="415F13B291B046428672EA3E3DD9A4C3"><span class="cat-nm">JOHNNY VAC GEN ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1764462CF8AE47F589E39F628E3BB13A" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=1764462CF8AE47F589E39F628E3BB13A" data-parent-name="Attachments &amp; Tools-Genuine|KIRBY GENUINE ATTACHMENTS/TOOLS" data-key="1764462CF8AE47F589E39F628E3BB13A"><span class="cat-nm">KIRBY GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=9EF49DBF53EE49E4818A62BEDA279BC6" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=9EF49DBF53EE49E4818A62BEDA279BC6" data-parent-name="Attachments &amp; Tools-Genuine|LOVELESS ASH ATTACHMENTS/SETS" data-key="9EF49DBF53EE49E4818A62BEDA279BC6"><span class="cat-nm">LOVELESS ASH ATTACHMENTS/SETS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=53F43930B5E846FB846BB2955005D140" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=53F43930B5E846FB846BB2955005D140" data-parent-name="Attachments &amp; Tools-Genuine|MISCELLANEOUS GENUINE ATTACH/TOOLS" data-key="53F43930B5E846FB846BB2955005D140"><span class="cat-nm">MISCELLANEOUS GENUINE ATTACH/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=AB3591A903F945B79B085E00FA5B4B62" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=AB3591A903F945B79B085E00FA5B4B62" data-parent-name="Attachments &amp; Tools-Genuine|NACECARE/NUMATIC GEN ATTACHMENTS/TOOLS" data-key="AB3591A903F945B79B085E00FA5B4B62"><span class="cat-nm">NACECARE/NUMATIC GEN ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=B8361F20C7BA4471A382871B2BC3297E" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=B8361F20C7BA4471A382871B2BC3297E" data-parent-name="Attachments &amp; Tools-Genuine|PANASONIC GENUINE ATTACHMENTS/TOOLS" data-key="B8361F20C7BA4471A382871B2BC3297E"><span class="cat-nm">PANASONIC GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8E8F9BD1DF1E4E09B5AC8E97C604C8C8" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=8E8F9BD1DF1E4E09B5AC8E97C604C8C8" data-parent-name="Attachments &amp; Tools-Genuine|PERFECT GENUINE ATTACHMENTS/TOOLS" data-key="8E8F9BD1DF1E4E09B5AC8E97C604C8C8"><span class="cat-nm">PERFECT GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=5614965609444A05846CF1CF1116984E" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=5614965609444A05846CF1CF1116984E" data-parent-name="Attachments &amp; Tools-Genuine|PROTEAM GENUINE ATTACHMENTS/TOOLS" data-key="5614965609444A05846CF1CF1116984E"><span class="cat-nm">PROTEAM GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=E68C8BE231B243C382B891687CF0515D" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=E68C8BE231B243C382B891687CF0515D" data-parent-name="Attachments &amp; Tools-Genuine|ROYAL/DIRT DEVIL GEN ATTACH/TOOLS" data-key="E68C8BE231B243C382B891687CF0515D"><span class="cat-nm">ROYAL/DIRT DEVIL GEN ATTACH/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=ED3159AA0E5742D8934BEE66572E7B95" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=ED3159AA0E5742D8934BEE66572E7B95" data-parent-name="Attachments &amp; Tools-Genuine|READIVAC ATTACHMENTS" data-key="ED3159AA0E5742D8934BEE66572E7B95"><span class="cat-nm">READIVAC ATTACHMENTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=25EC0DAB503E4B4DAE4C839963482D59" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=25EC0DAB503E4B4DAE4C839963482D59" data-parent-name="Attachments &amp; Tools-Genuine|REXAIR GENUINE ATTACHMENTS/TOOLS" data-key="25EC0DAB503E4B4DAE4C839963482D59"><span class="cat-nm">REXAIR GENUINE ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7EA7E436DE61417F9FB856A5A90E7FC4" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=7EA7E436DE61417F9FB856A5A90E7FC4" data-parent-name="Attachments &amp; Tools-Genuine|SEBO GENUINE ATTACHMENTS/WANDS" data-key="7EA7E436DE61417F9FB856A5A90E7FC4"><span class="cat-nm">SEBO GENUINE ATTACHMENTS/WANDS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=59B380B5F5BF4865830CC31B962EF766" data-parent-href="pc_combined_results.asp?pc_id=64798855DCE74A65A94B4E9B760E32F9|pc_combined_results.asp?pc_id=59B380B5F5BF4865830CC31B962EF766" data-parent-name="Attachments &amp; Tools-Genuine|VAPAMORE STEAM ATTACHMENTS" data-key="59B380B5F5BF4865830CC31B962EF766"><span class="cat-nm">VAPAMORE STEAM ATTACHMENTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481" data-parent-name="Attachments &amp; Tools-Repl" data-key="45EAA8BB70EF4B0D925DCAD8AE360481"><span class="cat-nm">Attachments &amp; Tools-Repl</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS" data-key="24B22B1CBDB845E6906DA11198982000"><span class="cat-nm">1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A3C779F90AD4441684BAC666CD287B93" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=A3C779F90AD4441684BAC666CD287B93" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' TO 1-1/4'' ADAPTERS" data-key="A3C779F90AD4441684BAC666CD287B93"><span class="cat-nm">1-1/2'' TO 1-1/4'' ADAPTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1A698DBD94FC4A329A213A29702FCEDE" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=1A698DBD94FC4A329A213A29702FCEDE" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL CREVICE TOOLS" data-key="1A698DBD94FC4A329A213A29702FCEDE"><span class="cat-nm">1-1/2'' COMMERCIAL CREVICE TOOLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C21C63B58B7840AD9A259EE130BF8C02" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=C21C63B58B7840AD9A259EE130BF8C02" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL DUST BRUSHES" data-key="C21C63B58B7840AD9A259EE130BF8C02"><span class="cat-nm">1-1/2'' COMMERCIAL DUST BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C60F92D9E6B44E1AB3DE560F09E56473" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=C60F92D9E6B44E1AB3DE560F09E56473" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL HARD FLOOR TOOLS/SQUEEGEES" data-key="C60F92D9E6B44E1AB3DE560F09E56473"><span class="cat-nm">1-1/2'' COMMERCIAL HARD FLOOR TOOLS/SQUEEGEES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=740A3C4F4E2E4F308BD90658E94B3FCB" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=740A3C4F4E2E4F308BD90658E94B3FCB" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL RUG TOOLS" data-key="740A3C4F4E2E4F308BD90658E94B3FCB"><span class="cat-nm">1-1/2'' COMMERCIAL RUG TOOLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BE70714F54464980BAB8C5DD2ED55BDD" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=BE70714F54464980BAB8C5DD2ED55BDD" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL TOOL SETS" data-key="BE70714F54464980BAB8C5DD2ED55BDD"><span class="cat-nm">1-1/2'' COMMERCIAL TOOL SETS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B0C0750D059D487CB122AA500654A664" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=B0C0750D059D487CB122AA500654A664" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|1-1/2'' COMMERCIAL UPHOLSTERY TOOLS" data-key="B0C0750D059D487CB122AA500654A664"><span class="cat-nm">1-1/2'' COMMERCIAL UPHOLSTERY TOOLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1B0B1F74B0F94964A83DC9060E1F390F" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=1B0B1F74B0F94964A83DC9060E1F390F" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|HI-REACH COMMERCIAL TOOLS, TOOL KITS" data-key="1B0B1F74B0F94964A83DC9060E1F390F"><span class="cat-nm">HI-REACH COMMERCIAL TOOLS, TOOL KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=52A502B0A0AD42CC87A1E8FAD8C27F9C" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=24B22B1CBDB845E6906DA11198982000|pc_combined_results.asp?pc_id=52A502B0A0AD42CC87A1E8FAD8C27F9C" data-parent-name="Attachments &amp; Tools-Repl|1-1/2'' (&amp; 1-1/4'') NECK COMMERCIAL ATTACHMENTS|WESSEL CLICK BRUSH ATTACHMENTS" data-key="52A502B0A0AD42CC87A1E8FAD8C27F9C"><span class="cat-nm">WESSEL CLICK BRUSH ATTACHMENTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS" data-key="D663133AED9141A0A19746C34E119C75"><span class="cat-nm">1-1/4'' CLEANING TOOLS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=481C99E39416494983182A4F2D076305" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=481C99E39416494983182A4F2D076305" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' COMBO RUG/FLR, DUST/UPHOL" data-key="481C99E39416494983182A4F2D076305"><span class="cat-nm">1-1/4'' COMBO RUG/FLR, DUST/UPHOL</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D0FC28F510DD46CD80344721D36AB334" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=D0FC28F510DD46CD80344721D36AB334" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' CREVICE TOOLS" data-key="D0FC28F510DD46CD80344721D36AB334"><span class="cat-nm">1-1/4'' CREVICE TOOLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F95B25A3809C4A1BA05326B509D35300" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=F95B25A3809C4A1BA05326B509D35300" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' DUST BRUSHES, DUSTERS" data-key="F95B25A3809C4A1BA05326B509D35300"><span class="cat-nm">1-1/4'' DUST BRUSHES, DUSTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=96C2161C6B5644B495A97A76EAC925C6" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=96C2161C6B5644B495A97A76EAC925C6" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' FLOOR BRUSHES / SQUEEGEES" data-key="96C2161C6B5644B495A97A76EAC925C6"><span class="cat-nm">1-1/4'' FLOOR BRUSHES / SQUEEGEES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=41D8800E04554682853F002A39069D02" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=41D8800E04554682853F002A39069D02" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' RUG/CARPET TOOLS" data-key="41D8800E04554682853F002A39069D02"><span class="cat-nm">1-1/4'' RUG/CARPET TOOLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=353BAEE0346E4BD48CE4250A137F46B2" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=D663133AED9141A0A19746C34E119C75|pc_combined_results.asp?pc_id=353BAEE0346E4BD48CE4250A137F46B2" data-parent-name="Attachments &amp; Tools-Repl|1-1/4'' CLEANING TOOLS|1-1/4'' UPHOLSTERY TOOLS" data-key="353BAEE0346E4BD48CE4250A137F46B2"><span class="cat-nm">1-1/4'' UPHOLSTERY TOOLS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=B35E28B98E85415FA293F579E1766414" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=B35E28B98E85415FA293F579E1766414" data-parent-name="Attachments &amp; Tools-Repl|35MM REPL ATTACHMENTS (MIELE)" data-key="B35E28B98E85415FA293F579E1766414"><span class="cat-nm">35MM REPL ATTACHMENTS (MIELE)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=77E0C2F2D49D4696ABD418875A58B502" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=77E0C2F2D49D4696ABD418875A58B502" data-parent-name="Attachments &amp; Tools-Repl|DYSON NON-GENUINE TOOLS / ATTACHMENTS" data-key="77E0C2F2D49D4696ABD418875A58B502"><span class="cat-nm">DYSON NON-GENUINE TOOLS / ATTACHMENTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=60EFFE92442140549266190C567A7364" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=60EFFE92442140549266190C567A7364" data-parent-name="Attachments &amp; Tools-Repl|KENMORE REP'L ATTACHMENTS / TOOLS" data-key="60EFFE92442140549266190C567A7364"><span class="cat-nm">KENMORE REP'L ATTACHMENTS / TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=417B72D1ACE5427599B98EEE65C3E479" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=417B72D1ACE5427599B98EEE65C3E479" data-parent-name="Attachments &amp; Tools-Repl|LUX (AERUS) REPLACEMENT ATT/TOOLS" data-key="417B72D1ACE5427599B98EEE65C3E479"><span class="cat-nm">LUX (AERUS) REPLACEMENT ATT/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=BABB3B3ACB6644C68EF17BC0138FB67E" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=BABB3B3ACB6644C68EF17BC0138FB67E" data-parent-name="Attachments &amp; Tools-Repl|MAGNETIC BAR ATTACHMENTS" data-key="BABB3B3ACB6644C68EF17BC0138FB67E"><span class="cat-nm">MAGNETIC BAR ATTACHMENTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7E5BEA8C1B9142D0AD0C8E40AF2A5D04" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=7E5BEA8C1B9142D0AD0C8E40AF2A5D04" data-parent-name="Attachments &amp; Tools-Repl|MISCELLANEOUS ATT/TOOLS/SPECIALTY" data-key="7E5BEA8C1B9142D0AD0C8E40AF2A5D04"><span class="cat-nm">MISCELLANEOUS ATT/TOOLS/SPECIALTY</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=32A1471D21414BC183373DB9DA4BC3BC" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=32A1471D21414BC183373DB9DA4BC3BC" data-parent-name="Attachments &amp; Tools-Repl|PANASONIC REPL ATT / TOOLS / SETS" data-key="32A1471D21414BC183373DB9DA4BC3BC"><span class="cat-nm">PANASONIC REPL ATT / TOOLS / SETS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=C04B3A1ACAC04DE795ACD05702D132AA" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=C04B3A1ACAC04DE795ACD05702D132AA" data-parent-name="Attachments &amp; Tools-Repl|PET ATTACHMENTS/TOOLS" data-key="C04B3A1ACAC04DE795ACD05702D132AA"><span class="cat-nm">PET ATTACHMENTS/TOOLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=42ED84DC32774B3CBC33E4BAA083904C" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=42ED84DC32774B3CBC33E4BAA083904C" data-parent-name="Attachments &amp; Tools-Repl|SHOP VAC REPL ATTACHMENTS" data-key="42ED84DC32774B3CBC33E4BAA083904C"><span class="cat-nm">SHOP VAC REPL ATTACHMENTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7A4301A3BD0843529E4A4786AE953A36" data-parent-href="pc_combined_results.asp?pc_id=45EAA8BB70EF4B0D925DCAD8AE360481|pc_combined_results.asp?pc_id=7A4301A3BD0843529E4A4786AE953A36" data-parent-name="Attachments &amp; Tools-Repl|WESSEL ELECTRIC PORTABLE ATT KITS" data-key="7A4301A3BD0843529E4A4786AE953A36"><span class="cat-nm">WESSEL ELECTRIC PORTABLE ATT KITS</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50" data-parent-name="Bags (Paper/Hepa/Etc.)" data-key="2821F3BB891943D3BB20CDBAAD78EE50"><span class="cat-nm">Bags (Paper/Hepa/Etc.)</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)" data-key="167E9B607B334D968948F4C1295ED8E1"><span class="cat-nm">GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6F8A089636D84F8A9112E620E74F52BE" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=6F8A089636D84F8A9112E620E74F52BE" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|BISSELL GEN PAPER BAGS (STD/MCRN/HEPA)" data-key="6F8A089636D84F8A9112E620E74F52BE"><span class="cat-nm">BISSELL GEN PAPER BAGS (STD/MCRN/HEPA)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7D37DF7463764C60B560AA22BCDA947C" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=7D37DF7463764C60B560AA22BCDA947C" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|MISC COMMERCIAL PAPER BAGS" data-key="7D37DF7463764C60B560AA22BCDA947C"><span class="cat-nm">MISC COMMERCIAL PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7C12646D5326460A9C4A4E95C8DD6305" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=7C12646D5326460A9C4A4E95C8DD6305" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|CLEAN OBSESSED GENUINE PAPER BAGS" data-key="7C12646D5326460A9C4A4E95C8DD6305"><span class="cat-nm">CLEAN OBSESSED GENUINE PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C40913B8F0F14337AEEB0F2372C6226A" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=C40913B8F0F14337AEEB0F2372C6226A" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|DUSTCARE GEN PAPER BAGS" data-key="C40913B8F0F14337AEEB0F2372C6226A"><span class="cat-nm">DUSTCARE GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=83603B07DB9E44CEB22E41EDE3483235" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=83603B07DB9E44CEB22E41EDE3483235" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|EUREKA / SANITAIRE GEN PAPER BAGS (ALL STYLES)" data-key="83603B07DB9E44CEB22E41EDE3483235"><span class="cat-nm">EUREKA / SANITAIRE GEN PAPER BAGS (ALL STYLES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9778AED6F4B3453DAA46048A216DE0F1" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=9778AED6F4B3453DAA46048A216DE0F1" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|FILTER QUEEN GEN PAPER BAGS/CONES" data-key="9778AED6F4B3453DAA46048A216DE0F1"><span class="cat-nm">FILTER QUEEN GEN PAPER BAGS/CONES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6E12A7AA53334202B58E1971BEB0A8A3" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=6E12A7AA53334202B58E1971BEB0A8A3" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|HOOVER GEN PAPER BAGS (ALL TYPES)" data-key="6E12A7AA53334202B58E1971BEB0A8A3"><span class="cat-nm">HOOVER GEN PAPER BAGS (ALL TYPES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C419C6BADDB447E3A15DE8C91C680EA0" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=C419C6BADDB447E3A15DE8C91C680EA0" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|JOHNNY VAC GEN PAPER BAGS" data-key="C419C6BADDB447E3A15DE8C91C680EA0"><span class="cat-nm">JOHNNY VAC GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4B89256180564CD2AA3B67BC514C5B30" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=4B89256180564CD2AA3B67BC514C5B30" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|KOBLENZ GEN PAPER BAGS" data-key="4B89256180564CD2AA3B67BC514C5B30"><span class="cat-nm">KOBLENZ GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5AA01BD2A51B43049D0331BE975E051E" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=5AA01BD2A51B43049D0331BE975E051E" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|KIRBY GEN PAPER BAGS" data-key="5AA01BD2A51B43049D0331BE975E051E"><span class="cat-nm">KIRBY GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59C8F762B9BE4E4BA4A4BB729A8666B9" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=59C8F762B9BE4E4BA4A4BB729A8666B9" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|MISCELLANEOUS GEN PAPER BAGS" data-key="59C8F762B9BE4E4BA4A4BB729A8666B9"><span class="cat-nm">MISCELLANEOUS GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=145DFFAF9D3B40F79DB26AA1E349A6FD" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=145DFFAF9D3B40F79DB26AA1E349A6FD" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|NUMATIC/NACECARE GEN PAPER BAGS" data-key="145DFFAF9D3B40F79DB26AA1E349A6FD"><span class="cat-nm">NUMATIC/NACECARE GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7CF4359A08054ABDA87AB8E437301CF4" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=7CF4359A08054ABDA87AB8E437301CF4" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|ORECK GEN PAPER BAGS" data-key="7CF4359A08054ABDA87AB8E437301CF4"><span class="cat-nm">ORECK GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8817D0BEE5AF434AAF687C8BAE6087DD" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=8817D0BEE5AF434AAF687C8BAE6087DD" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|PANASONIC GEN PAPER BAGS" data-key="8817D0BEE5AF434AAF687C8BAE6087DD"><span class="cat-nm">PANASONIC GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1401DBBAB99042149E39EA284C8F8639" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=1401DBBAB99042149E39EA284C8F8639" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|PERFECT PRODUCTS GEN PAPER BAGS" data-key="1401DBBAB99042149E39EA284C8F8639"><span class="cat-nm">PERFECT PRODUCTS GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EF373D2C34FC4373BB8FBA3FF4786EED" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=EF373D2C34FC4373BB8FBA3FF4786EED" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|PROTEAM GENUINE PAPER BAGS ALL TYPES" data-key="EF373D2C34FC4373BB8FBA3FF4786EED"><span class="cat-nm">PROTEAM GENUINE PAPER BAGS ALL TYPES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=65E7B3D13BBB4D02BB558F3432468C04" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=65E7B3D13BBB4D02BB558F3432468C04" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|RICCAR / SIMPLICITY GENUINE PAPER BAGS" data-key="65E7B3D13BBB4D02BB558F3432468C04"><span class="cat-nm">RICCAR / SIMPLICITY GENUINE PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AFFCE07D457F466CAAB1BE22D9D99B1D" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=AFFCE07D457F466CAAB1BE22D9D99B1D" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|ROYAL/DIRT DEVIL GEN PAPER BAGS" data-key="AFFCE07D457F466CAAB1BE22D9D99B1D"><span class="cat-nm">ROYAL/DIRT DEVIL GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5779DE28874E4F7ABAA686C8E480F3C5" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=5779DE28874E4F7ABAA686C8E480F3C5" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|SEBO GENUINE BAGS (ALL TYPES)" data-key="5779DE28874E4F7ABAA686C8E480F3C5"><span class="cat-nm">SEBO GENUINE BAGS (ALL TYPES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9980EBEA0B9943B1A3A6DDFE40F0418E" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=9980EBEA0B9943B1A3A6DDFE40F0418E" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|SHOP VAC GEN PAPER BAGS" data-key="9980EBEA0B9943B1A3A6DDFE40F0418E"><span class="cat-nm">SHOP VAC GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DC9D59709EF44F4E8E41787D26B60EAB" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=167E9B607B334D968948F4C1295ED8E1|pc_combined_results.asp?pc_id=DC9D59709EF44F4E8E41787D26B60EAB" data-parent-name="Bags (Paper/Hepa/Etc.)|GENUINE PAPER BAGS (STD/MICRON/HEPA/ETC.)|WINDSOR GENUINE PAPER BAGS" data-key="DC9D59709EF44F4E8E41787D26B60EAB"><span class="cat-nm">WINDSOR GENUINE PAPER BAGS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=BE2C58BFC3FE4E69AEADDAEFACFC1CEC" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=BE2C58BFC3FE4E69AEADDAEFACFC1CEC" data-parent-name="Bags (Paper/Hepa/Etc.)|HVRBAG" data-key="BE2C58BFC3FE4E69AEADDAEFACFC1CEC"><span class="cat-nm">HVRBAG</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)" data-key="172DCB4177254841B3A21A66C25C40BA"><span class="cat-nm">NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C969C23862C84C838D5E7B3A4857406C" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=C969C23862C84C838D5E7B3A4857406C" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|AIRWAY NON-GEN PAPER BAGS (ALL TYPES)" data-key="C969C23862C84C838D5E7B3A4857406C"><span class="cat-nm">AIRWAY NON-GEN PAPER BAGS (ALL TYPES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CCBACA76754141C5B907E5FCA7D213A4" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=CCBACA76754141C5B907E5FCA7D213A4" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|BISSELL NON-GEN PAPER BAGS" data-key="CCBACA76754141C5B907E5FCA7D213A4"><span class="cat-nm">BISSELL NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6B2AB4152FC04C67A8021B6EA1B16BD4" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=6B2AB4152FC04C67A8021B6EA1B16BD4" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|BOSCH NON-GEN PAPER BAGS" data-key="6B2AB4152FC04C67A8021B6EA1B16BD4"><span class="cat-nm">BOSCH NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E5580D3F35394B53BFB611F61E9B440E" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=E5580D3F35394B53BFB611F61E9B440E" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|MISC. COMMERCIAL NON-GEN PAPER BAGS" data-key="E5580D3F35394B53BFB611F61E9B440E"><span class="cat-nm">MISC. COMMERCIAL NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4446472AF66240A9BFA2EB3C6FB56039" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=4446472AF66240A9BFA2EB3C6FB56039" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|COMPACT NON-GEN PAPER BAGS" data-key="4446472AF66240A9BFA2EB3C6FB56039"><span class="cat-nm">COMPACT NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E28B6906B51148CA982F0CBC0E8D50C7" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=E28B6906B51148CA982F0CBC0E8D50C7" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|EUREKA NON-GEN PAPER BAGS (ALL TYPES)" data-key="E28B6906B51148CA982F0CBC0E8D50C7"><span class="cat-nm">EUREKA NON-GEN PAPER BAGS (ALL TYPES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6CAFD2C5CDEB4A73BDB3C21475B7F59D" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=6CAFD2C5CDEB4A73BDB3C21475B7F59D" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|FILTER QUEEN NON-GEN PAPER BAGS" data-key="6CAFD2C5CDEB4A73BDB3C21475B7F59D"><span class="cat-nm">FILTER QUEEN NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7E4297605BF04AD3A18513EBBD4664F7" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=7E4297605BF04AD3A18513EBBD4664F7" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|G.E. NON-GEN PAPER BAGS" data-key="7E4297605BF04AD3A18513EBBD4664F7"><span class="cat-nm">G.E. NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DEAEEFD3B8F7427EAEB238E117EBE514" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=DEAEEFD3B8F7427EAEB238E117EBE514" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|HOOVER NON-GEN PAPER BAGS (ALL TYPES)" data-key="DEAEEFD3B8F7427EAEB238E117EBE514"><span class="cat-nm">HOOVER NON-GEN PAPER BAGS (ALL TYPES)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F10314DF30E94F25981BBA83EF3DCECD" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=F10314DF30E94F25981BBA83EF3DCECD" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|KENMORE/SEARS NON-GEN PAPER BAGS" data-key="F10314DF30E94F25981BBA83EF3DCECD"><span class="cat-nm">KENMORE/SEARS NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3FC0ED4D815B40D4908ECD4CA9709AAC" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=3FC0ED4D815B40D4908ECD4CA9709AAC" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|ELECTROLUX/AERUS NON-GEN PAPER BAGS" data-key="3FC0ED4D815B40D4908ECD4CA9709AAC"><span class="cat-nm">ELECTROLUX/AERUS NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C45F2088B0D24A9CA2AB3AC6F7D32C1D" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=C45F2088B0D24A9CA2AB3AC6F7D32C1D" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|MIELE NON-GEN PAPER BAGS" data-key="C45F2088B0D24A9CA2AB3AC6F7D32C1D"><span class="cat-nm">MIELE NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D1EC40E0AEAC4EF2861DFBB8CC32AFAC" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=D1EC40E0AEAC4EF2861DFBB8CC32AFAC" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|MISCELLANEOUS NON-GEN PAPER BAGS" data-key="D1EC40E0AEAC4EF2861DFBB8CC32AFAC"><span class="cat-nm">MISCELLANEOUS NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=793AA66125BA43DF88CDDB02F4623B75" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=793AA66125BA43DF88CDDB02F4623B75" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|NUMATIC/NACECARE NON-GEN PAPER BAGS" data-key="793AA66125BA43DF88CDDB02F4623B75"><span class="cat-nm">NUMATIC/NACECARE NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D6FF9422AB004FCA85B93B2F1F0FDBCC" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=D6FF9422AB004FCA85B93B2F1F0FDBCC" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|ORECK NON-GEN PAPER BAGS" data-key="D6FF9422AB004FCA85B93B2F1F0FDBCC"><span class="cat-nm">ORECK NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7FCA926E5D654BAD88584EBB39667CF0" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=7FCA926E5D654BAD88584EBB39667CF0" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|PANASONIC NON-GEN PAPER BAGS" data-key="7FCA926E5D654BAD88584EBB39667CF0"><span class="cat-nm">PANASONIC NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=935995817428426EA3CF05B2D3F7CFA6" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=935995817428426EA3CF05B2D3F7CFA6" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|PROTEAM NON-GENUINE PAPER BAGS" data-key="935995817428426EA3CF05B2D3F7CFA6"><span class="cat-nm">PROTEAM NON-GENUINE PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=05C008DC41584B1CA571C47C4C244609" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=05C008DC41584B1CA571C47C4C244609" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|RICCAR/SIMPLICITY NON-GEN PAPER BAGS" data-key="05C008DC41584B1CA571C47C4C244609"><span class="cat-nm">RICCAR/SIMPLICITY NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4BD0ECFD46274B91856991250583F0F3" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=4BD0ECFD46274B91856991250583F0F3" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|ROYAL/DIRT DEVIL NON-GEN PAPER BAGS" data-key="4BD0ECFD46274B91856991250583F0F3"><span class="cat-nm">ROYAL/DIRT DEVIL NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1F9E261E7F8F4F13A856810589A97B31" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=1F9E261E7F8F4F13A856810589A97B31" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|SAMSUNG NON-GEN PAPER BAGS" data-key="1F9E261E7F8F4F13A856810589A97B31"><span class="cat-nm">SAMSUNG NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=698E968F5D73484299D9858E6F6A6CEE" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=698E968F5D73484299D9858E6F6A6CEE" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|SANYO NON-GEN PAPER BAGS" data-key="698E968F5D73484299D9858E6F6A6CEE"><span class="cat-nm">SANYO NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=71EB1C2EC292454FAD77D4D910729FF2" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=71EB1C2EC292454FAD77D4D910729FF2" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|SHOP VAC NON-GEN PAPER BAGS" data-key="71EB1C2EC292454FAD77D4D910729FF2"><span class="cat-nm">SHOP VAC NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0181DB7A693A468AAE9D8539D0ADCA3A" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=0181DB7A693A468AAE9D8539D0ADCA3A" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|SHARP NON-GEN PAPER BAGS" data-key="0181DB7A693A468AAE9D8539D0ADCA3A"><span class="cat-nm">SHARP NON-GEN PAPER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F11F7C1515E24482B60B9BEBAEDC4E18" data-parent-href="pc_combined_results.asp?pc_id=2821F3BB891943D3BB20CDBAAD78EE50|pc_combined_results.asp?pc_id=172DCB4177254841B3A21A66C25C40BA|pc_combined_results.asp?pc_id=F11F7C1515E24482B60B9BEBAEDC4E18" data-parent-name="Bags (Paper/Hepa/Etc.)|NON-GEN PAPER BAGS(STD/MCRN/HEPA/ETC)|WINDSOR NON-GEN PAPER BAGS" data-key="F11F7C1515E24482B60B9BEBAEDC4E18"><span class="cat-nm">WINDSOR NON-GEN PAPER BAGS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869" data-parent-name="Belts (All Types)" data-key="DCF73DDD0C774995A0A3C9A035EC3869"><span class="cat-nm">Belts (All Types)</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=54340A13592A45A7AAE70413C181484B" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=54340A13592A45A7AAE70413C181484B" data-parent-name="Belts (All Types)|ARM &amp; HAMMER DURABELT PREMIUM PACKAGED BELTS" data-key="54340A13592A45A7AAE70413C181484B"><span class="cat-nm">ARM &amp; HAMMER DURABELT PREMIUM PACKAGED BELTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND" data-key="C4221AD09BA246E7ADC3E7383BC8FB44"><span class="cat-nm">GENUINE BELTS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7B19C9406F0E4919909127E7E88073A8" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=7B19C9406F0E4919909127E7E88073A8" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|BEAM/ELECTROLUX CV GENUINE BELTS" data-key="7B19C9406F0E4919909127E7E88073A8"><span class="cat-nm">BEAM/ELECTROLUX CV GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=450882C522514120A7594714E2634779" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=450882C522514120A7594714E2634779" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|BISSELL GENUINE BELTS" data-key="450882C522514120A7594714E2634779"><span class="cat-nm">BISSELL GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B5E4187DB352473898B3C47BE5C9CA55" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=B5E4187DB352473898B3C47BE5C9CA55" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|BOSCH GENUINE BELTS" data-key="B5E4187DB352473898B3C47BE5C9CA55"><span class="cat-nm">BOSCH GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B82625F6B71A4509A501BF37902E581B" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=B82625F6B71A4509A501BF37902E581B" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|COMMERCIAL EQUIPMENT GENUINE BELTS" data-key="B82625F6B71A4509A501BF37902E581B"><span class="cat-nm">COMMERCIAL EQUIPMENT GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E08246E2178441C6BF2E995BC0ECC3D2" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=E08246E2178441C6BF2E995BC0ECC3D2" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|CLEAN OBSESSED BELTS" data-key="E08246E2178441C6BF2E995BC0ECC3D2"><span class="cat-nm">CLEAN OBSESSED BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5E279DA74939498B9106B14202B866BC" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=5E279DA74939498B9106B14202B866BC" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|DYSON GENUINE BELTS" data-key="5E279DA74939498B9106B14202B866BC"><span class="cat-nm">DYSON GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FB8D06E21D5B457094F1EB53D82E1A1B" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=FB8D06E21D5B457094F1EB53D82E1A1B" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|EUREKA/ELECTROLUX GENUINE BELTS" data-key="FB8D06E21D5B457094F1EB53D82E1A1B"><span class="cat-nm">EUREKA/ELECTROLUX GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=413CB24B460F4FEFB7B90BBD99DD189D" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=413CB24B460F4FEFB7B90BBD99DD189D" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|H-P PRODUCTS GENUINE TURBINE BELTS" data-key="413CB24B460F4FEFB7B90BBD99DD189D"><span class="cat-nm">H-P PRODUCTS GENUINE TURBINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E35683F5A1CB487BB8552FF83848790F" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=E35683F5A1CB487BB8552FF83848790F" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|HOOVER GENUINE BELTS" data-key="E35683F5A1CB487BB8552FF83848790F"><span class="cat-nm">HOOVER GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BA8ADAED98FA49A89C4BC0760D818EEA" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=BA8ADAED98FA49A89C4BC0760D818EEA" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|JOHNNY VAC GENUINE BELTS" data-key="BA8ADAED98FA49A89C4BC0760D818EEA"><span class="cat-nm">JOHNNY VAC GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A2883450AD0C4B9FA8BC03A00C942E74" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=A2883450AD0C4B9FA8BC03A00C942E74" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|KIRBY GENUINE BELTS" data-key="A2883450AD0C4B9FA8BC03A00C942E74"><span class="cat-nm">KIRBY GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2811AB000AFA444FB632E09B48FE5103" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=2811AB000AFA444FB632E09B48FE5103" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|MISCELLANEOUS GENUINE BELTS" data-key="2811AB000AFA444FB632E09B48FE5103"><span class="cat-nm">MISCELLANEOUS GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8993C4ECB7E446CEB1F28241E8A34EFB" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=8993C4ECB7E446CEB1F28241E8A34EFB" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|NUTONE GENUINE BELTS" data-key="8993C4ECB7E446CEB1F28241E8A34EFB"><span class="cat-nm">NUTONE GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=06955EAC90FF42FEAB66C983BBA4041D" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=06955EAC90FF42FEAB66C983BBA4041D" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|ORECK GENUINE BELTS" data-key="06955EAC90FF42FEAB66C983BBA4041D"><span class="cat-nm">ORECK GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AE2E08CF0CA142759ED39E46FD2971D1" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=AE2E08CF0CA142759ED39E46FD2971D1" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|PANASONIC GENUINE BELTS" data-key="AE2E08CF0CA142759ED39E46FD2971D1"><span class="cat-nm">PANASONIC GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E91B97FE94FC4EDE95259981AE70BABE" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=E91B97FE94FC4EDE95259981AE70BABE" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|PERFECT PRODUCTS GENUINE BELTS" data-key="E91B97FE94FC4EDE95259981AE70BABE"><span class="cat-nm">PERFECT PRODUCTS GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1ED7F8ABFED94287AF4528C4A6579C6A" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=1ED7F8ABFED94287AF4528C4A6579C6A" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|PROTEAM GENUINE BELTS" data-key="1ED7F8ABFED94287AF4528C4A6579C6A"><span class="cat-nm">PROTEAM GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8A0B91A403F44B40A5883305285CDA5B" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=8A0B91A403F44B40A5883305285CDA5B" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|READIVAC BELTS" data-key="8A0B91A403F44B40A5883305285CDA5B"><span class="cat-nm">READIVAC BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=071C54AA09F84818809D33EABE859502" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=071C54AA09F84818809D33EABE859502" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|REXAIR GENUINE BELTS" data-key="071C54AA09F84818809D33EABE859502"><span class="cat-nm">REXAIR GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=95D378DBDA7D4955AF6B638602B831B3" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=95D378DBDA7D4955AF6B638602B831B3" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|ROYAL/DIRT DEVIL GENUINE BELTS" data-key="95D378DBDA7D4955AF6B638602B831B3"><span class="cat-nm">ROYAL/DIRT DEVIL GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F29CFC5745564E5A935E92527BAA1CD8" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=F29CFC5745564E5A935E92527BAA1CD8" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|SANITAIRE (BISSELL) ORIGINAL BELTS" data-key="F29CFC5745564E5A935E92527BAA1CD8"><span class="cat-nm">SANITAIRE (BISSELL) ORIGINAL BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E267EDD218B94DBA8D843AE23FAEF1CC" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=E267EDD218B94DBA8D843AE23FAEF1CC" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|SEBO GENUINE BELTS" data-key="E267EDD218B94DBA8D843AE23FAEF1CC"><span class="cat-nm">SEBO GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=ABD788B208F141A1B338549A475B5F6E" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=C4221AD09BA246E7ADC3E7383BC8FB44|pc_combined_results.asp?pc_id=ABD788B208F141A1B338549A475B5F6E" data-parent-name="Belts (All Types)|GENUINE BELTS BY BRAND|WESSEL-WERK GENUINE BELTS" data-key="ABD788B208F141A1B338549A475B5F6E"><span class="cat-nm">WESSEL-WERK GENUINE BELTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS" data-key="B7FD62E5987745769F63B22E3DC24B40"><span class="cat-nm">NON-GENUINE / REPLACEMENT BELTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=594F7232F4B9437EA4B82EA073E011FC" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=594F7232F4B9437EA4B82EA073E011FC" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|COGGED / GEARED REPLACEMENT BELTS" data-key="594F7232F4B9437EA4B82EA073E011FC"><span class="cat-nm">COGGED / GEARED REPLACEMENT BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=591D0B1AE2D94222A30E65B70EC6486D" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=591D0B1AE2D94222A30E65B70EC6486D" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|EURO PRO / SHARK NON-GENUINE BELTS" data-key="591D0B1AE2D94222A30E65B70EC6486D"><span class="cat-nm">EURO PRO / SHARK NON-GENUINE BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D507FA4495C949C7800FFEBE97DDDA6C" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=D507FA4495C949C7800FFEBE97DDDA6C" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|FLAT REPLACEMENT BELTS" data-key="D507FA4495C949C7800FFEBE97DDDA6C"><span class="cat-nm">FLAT REPLACEMENT BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9C7BE42A58444FD2BAF34AA06147C740" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=9C7BE42A58444FD2BAF34AA06147C740" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|MISCELLANEOUS REPLACEMENT BELTS" data-key="9C7BE42A58444FD2BAF34AA06147C740"><span class="cat-nm">MISCELLANEOUS REPLACEMENT BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A66F2E6BB65F4CCD94CA48C433BAAB05" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=A66F2E6BB65F4CCD94CA48C433BAAB05" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|ROUND REPLACEMENT BELTS" data-key="A66F2E6BB65F4CCD94CA48C433BAAB05"><span class="cat-nm">ROUND REPLACEMENT BELTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6AF25CEEB43F41ABB2DB843997ECE4BC" data-parent-href="pc_combined_results.asp?pc_id=DCF73DDD0C774995A0A3C9A035EC3869|pc_combined_results.asp?pc_id=B7FD62E5987745769F63B22E3DC24B40|pc_combined_results.asp?pc_id=6AF25CEEB43F41ABB2DB843997ECE4BC" data-parent-name="Belts (All Types)|NON-GENUINE / REPLACEMENT BELTS|V / POLY V REPLACEMENT BELTS" data-key="6AF25CEEB43F41ABB2DB843997ECE4BC"><span class="cat-nm">V / POLY V REPLACEMENT BELTS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531" data-parent-name="Brush Rolls, Agitators, Dist" data-key="6FCFB671C40947E1BAB0AD96E140E531"><span class="cat-nm">Brush Rolls, Agitators, Dist</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=549BCBC097C645BEA0A62349585A6465" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=549BCBC097C645BEA0A62349585A6465" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLL PARTS" data-key="549BCBC097C645BEA0A62349585A6465"><span class="cat-nm">GENUINE BRUSH ROLL PARTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=277239FF396A46719068E0DDA1C28F68" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=549BCBC097C645BEA0A62349585A6465|pc_combined_results.asp?pc_id=277239FF396A46719068E0DDA1C28F68" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLL PARTS|SEBO GENUINE BRUSH ROLL COMPONENTS" data-key="277239FF396A46719068E0DDA1C28F68"><span class="cat-nm">SEBO GENUINE BRUSH ROLL COMPONENTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND" data-key="6A9C864E43E7489087CA398CD893BB94"><span class="cat-nm">GENUINE BRUSH ROLLS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BE33FAF40F0F4E0B892F407440BD8067" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=BE33FAF40F0F4E0B892F407440BD8067" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|BISSELL GENUINE BRUSH ROLLS" data-key="BE33FAF40F0F4E0B892F407440BD8067"><span class="cat-nm">BISSELL GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EE41E0344BD043ED815D33281FC1B5F2" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=EE41E0344BD043ED815D33281FC1B5F2" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|BOSCH GENUINE BRUSH ROLLS" data-key="EE41E0344BD043ED815D33281FC1B5F2"><span class="cat-nm">BOSCH GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0F63CB357CE64A628B48D6B5FFEBD7EF" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=0F63CB357CE64A628B48D6B5FFEBD7EF" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|COMMERCIAL MISC. GENUINE BRUSH ROLLS" data-key="0F63CB357CE64A628B48D6B5FFEBD7EF"><span class="cat-nm">COMMERCIAL MISC. GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AA20BBE5556D4938B7EBD10CAB5FDCB9" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=AA20BBE5556D4938B7EBD10CAB5FDCB9" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|DYSON GENUINE BRUSH ROLLS" data-key="AA20BBE5556D4938B7EBD10CAB5FDCB9"><span class="cat-nm">DYSON GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=81FF7C7E21D34D1793486FF29D047FBB" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=81FF7C7E21D34D1793486FF29D047FBB" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|EUREKA/ELECTROLUX GENUINE BRUSH ROLLS" data-key="81FF7C7E21D34D1793486FF29D047FBB"><span class="cat-nm">EUREKA/ELECTROLUX GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1FE6A1CE51D044A98EE89AFC7FF75F49" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=1FE6A1CE51D044A98EE89AFC7FF75F49" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|FILTER QUEEN GENUINE BRUSH ROLLS" data-key="1FE6A1CE51D044A98EE89AFC7FF75F49"><span class="cat-nm">FILTER QUEEN GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=656F23961AE24D1A9A48B9E989A38535" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=656F23961AE24D1A9A48B9E989A38535" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|FULLER BRUSH GENUINE BRUSH ROLLS" data-key="656F23961AE24D1A9A48B9E989A38535"><span class="cat-nm">FULLER BRUSH GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1A76AA297E774F26B5D91A7136FD7422" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=1A76AA297E774F26B5D91A7136FD7422" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|HOOVER GENUINE BRUSH ROLLS, BRUSH BLOCKS" data-key="1A76AA297E774F26B5D91A7136FD7422"><span class="cat-nm">HOOVER GENUINE BRUSH ROLLS, BRUSH BLOCKS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=677C39D48E01491E8587BACD211BF94F" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=677C39D48E01491E8587BACD211BF94F" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|JOHNNY VAC GENUINE BRUSH ROLLS" data-key="677C39D48E01491E8587BACD211BF94F"><span class="cat-nm">JOHNNY VAC GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F058674955854A4BA9D5EB2E6F99757D" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=F058674955854A4BA9D5EB2E6F99757D" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|KOBLENZ GENUINE BRUSH ROLLS" data-key="F058674955854A4BA9D5EB2E6F99757D"><span class="cat-nm">KOBLENZ GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=03ABF8F6333B400C9350EC5B7308C25D" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=03ABF8F6333B400C9350EC5B7308C25D" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|KENMORE GENUINE BRUSH ROLLS" data-key="03ABF8F6333B400C9350EC5B7308C25D"><span class="cat-nm">KENMORE GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=405AB6CE09E74A298F47A82493857ADC" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=405AB6CE09E74A298F47A82493857ADC" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|KIRBY GENUINE BRUSH ROLLS" data-key="405AB6CE09E74A298F47A82493857ADC"><span class="cat-nm">KIRBY GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=38F4F6AA0C4C4AFDBBBCB162B7AC3EBD" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=38F4F6AA0C4C4AFDBBBCB162B7AC3EBD" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|MISCELLANEOUS GENUINE BRUSH ROLLS" data-key="38F4F6AA0C4C4AFDBBBCB162B7AC3EBD"><span class="cat-nm">MISCELLANEOUS GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6BE4874E708C4108A52173FAE006B603" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=6BE4874E708C4108A52173FAE006B603" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|ORECK GENUINE BRUSH ROLLS" data-key="6BE4874E708C4108A52173FAE006B603"><span class="cat-nm">ORECK GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C5ACABB12AE74ADCB9C71FCDAC64BCAC" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=C5ACABB12AE74ADCB9C71FCDAC64BCAC" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|PANASONIC GENUINE BRUSH ROLLS" data-key="C5ACABB12AE74ADCB9C71FCDAC64BCAC"><span class="cat-nm">PANASONIC GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=593180841BEE40878FF941CFB9DFF065" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=593180841BEE40878FF941CFB9DFF065" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|PERFECT PRODUCTS GENUINE BRUSH ROLLS" data-key="593180841BEE40878FF941CFB9DFF065"><span class="cat-nm">PERFECT PRODUCTS GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=314FEB758EBE425C8C3D038AF2D33E6E" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=314FEB758EBE425C8C3D038AF2D33E6E" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|ROYAL/DIRT DEVIL GENUINE BRUSH ROLLS" data-key="314FEB758EBE425C8C3D038AF2D33E6E"><span class="cat-nm">ROYAL/DIRT DEVIL GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=16BE5F77F2B24DE8A631DBEE2B233FD8" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=16BE5F77F2B24DE8A631DBEE2B233FD8" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|READIVAC ORIGINAL BRUSH ROLLS" data-key="16BE5F77F2B24DE8A631DBEE2B233FD8"><span class="cat-nm">READIVAC ORIGINAL BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DA0AE9C18E464E568179EF6C2281AC0C" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=DA0AE9C18E464E568179EF6C2281AC0C" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|REXAIR GENUINE BRUSH ROLLS" data-key="DA0AE9C18E464E568179EF6C2281AC0C"><span class="cat-nm">REXAIR GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6F541090B5674428BBAB79D00E280996" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=6F541090B5674428BBAB79D00E280996" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|RICCAR/SIMPLICTY BRUSH ROLLS" data-key="6F541090B5674428BBAB79D00E280996"><span class="cat-nm">RICCAR/SIMPLICTY BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=151465DAEBEF49748AF48A30A3735B37" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=6A9C864E43E7489087CA398CD893BB94|pc_combined_results.asp?pc_id=151465DAEBEF49748AF48A30A3735B37" data-parent-name="Brush Rolls, Agitators, Dist|GENUINE BRUSH ROLLS BY BRAND|SEBO GENUINE BRUSH ROLLS" data-key="151465DAEBEF49748AF48A30A3735B37"><span class="cat-nm">SEBO GENUINE BRUSH ROLLS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=A47902AF63634F51BA068EC4E5A45A77" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=A47902AF63634F51BA068EC4E5A45A77" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLL PARTS" data-key="A47902AF63634F51BA068EC4E5A45A77"><span class="cat-nm">NON-GENUINE BRUSH ROLL PARTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND" data-key="22395A783A8E437D8BDA97824C30CFD2"><span class="cat-nm">NON-GENUINE BRUSH ROLLS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B1A2F9F9511D461288C79AFBE8FD6C96" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=B1A2F9F9511D461288C79AFBE8FD6C96" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|BISSELL NON-GENUINE BRUSH ROLLS" data-key="B1A2F9F9511D461288C79AFBE8FD6C96"><span class="cat-nm">BISSELL NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CA060B9060FF423ABBD9FE88FF5331EB" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=CA060B9060FF423ABBD9FE88FF5331EB" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|DYSON NON-GENUINE BRUSH ROLLS" data-key="CA060B9060FF423ABBD9FE88FF5331EB"><span class="cat-nm">DYSON NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A654BC661E6B4BAAAF07E0BD2E4ECC12" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=A654BC661E6B4BAAAF07E0BD2E4ECC12" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|EUREKA/ELECTROLUX NON-GENUINE BRUSH ROLLS" data-key="A654BC661E6B4BAAAF07E0BD2E4ECC12"><span class="cat-nm">EUREKA/ELECTROLUX NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3F675565CC7F4BB7B8A0F250AA06363E" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=3F675565CC7F4BB7B8A0F250AA06363E" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|HOOVER NON-GENUINE BRUSH ROLLS" data-key="3F675565CC7F4BB7B8A0F250AA06363E"><span class="cat-nm">HOOVER NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=504F3171AEC24AC4ADD53A2C5717B19F" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=504F3171AEC24AC4ADD53A2C5717B19F" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|KENMORE NON-GENUINE BRUSH ROLLS" data-key="504F3171AEC24AC4ADD53A2C5717B19F"><span class="cat-nm">KENMORE NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FC80178C712C4A10836D8075A2C3E8B8" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=FC80178C712C4A10836D8075A2C3E8B8" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|KIRBY NON-GENUINE BRUSH ROLLS" data-key="FC80178C712C4A10836D8075A2C3E8B8"><span class="cat-nm">KIRBY NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=11ADE59550E54F419893EC40C4F34E06" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=11ADE59550E54F419893EC40C4F34E06" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|LUX (AERUS) NON-GENUINE BRUSH ROLLS" data-key="11ADE59550E54F419893EC40C4F34E06"><span class="cat-nm">LUX (AERUS) NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7175EE4E7B6B48CBB725381FCE82CFC6" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=7175EE4E7B6B48CBB725381FCE82CFC6" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|MIELE NON-GENUINE BRUSH ROLL" data-key="7175EE4E7B6B48CBB725381FCE82CFC6"><span class="cat-nm">MIELE NON-GENUINE BRUSH ROLL</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BE7F1100B3EE4DAB89FF71696D55853F" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=BE7F1100B3EE4DAB89FF71696D55853F" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|ORECK NON-GENUINE BRUSH ROLLS" data-key="BE7F1100B3EE4DAB89FF71696D55853F"><span class="cat-nm">ORECK NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BC16F4BE65444F5F873219C2A799F683" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=BC16F4BE65444F5F873219C2A799F683" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|ROYAL/DD NON-GENUINE BRUSH ROLLS" data-key="BC16F4BE65444F5F873219C2A799F683"><span class="cat-nm">ROYAL/DD NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=863A662C821A4DAA9BC2C83991BA3119" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=863A662C821A4DAA9BC2C83991BA3119" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|REXAIR NON-GENUINE BRUSH ROLLS" data-key="863A662C821A4DAA9BC2C83991BA3119"><span class="cat-nm">REXAIR NON-GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9BAA143A56064227991A7E24CF45BAEA" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=9BAA143A56064227991A7E24CF45BAEA" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|RICCAR &amp; SIMPLICITY REPL BRUSH ROLLS" data-key="9BAA143A56064227991A7E24CF45BAEA"><span class="cat-nm">RICCAR &amp; SIMPLICITY REPL BRUSH ROLLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9CADD27888834616B19CFBBDA112E87A" data-parent-href="pc_combined_results.asp?pc_id=6FCFB671C40947E1BAB0AD96E140E531|pc_combined_results.asp?pc_id=22395A783A8E437D8BDA97824C30CFD2|pc_combined_results.asp?pc_id=9CADD27888834616B19CFBBDA112E87A" data-parent-name="Brush Rolls, Agitators, Dist|NON-GENUINE BRUSH ROLLS BY BRAND|WINDSOR/SEBO NON-GENUINE BRUSH ROLLS" data-key="9CADD27888834616B19CFBBDA112E87A"><span class="cat-nm">WINDSOR/SEBO NON-GENUINE BRUSH ROLLS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=B4272259E19041B3A8E3926DE6D6F7D3" data-parent-href="pc_combined_results.asp?pc_id=B4272259E19041B3A8E3926DE6D6F7D3" data-parent-name="Bulbs - All Styles" data-key="B4272259E19041B3A8E3926DE6D6F7D3"><span class="cat-nm">Bulbs - All Styles</span></a></li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE" data-parent-name="Central Vac Products" data-key="389BBBAF29CD478BBC47138C2C58AEEE"><span class="cat-nm">Central Vac Products</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')" data-key="916CE997591F4BAB8AB441F3087A8716"><span class="cat-nm">CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CFF3FEF86E1A43E3BB6C8A858E455685" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=CFF3FEF86E1A43E3BB6C8A858E455685" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - LV HOSE WITH TURBO NOZZLES" data-key="CFF3FEF86E1A43E3BB6C8A858E455685"><span class="cat-nm">CV ATT KITS - LV HOSE WITH TURBO NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DFC27D0A3C5D44DF91AFFFE6C9C8F0D0" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=DFC27D0A3C5D44DF91AFFFE6C9C8F0D0" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - WITH BEAM ELECTRIC P/N'S" data-key="DFC27D0A3C5D44DF91AFFFE6C9C8F0D0"><span class="cat-nm">CV ATT KITS - WITH BEAM ELECTRIC P/N'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=325E1D0D401442F3BF182F73087B142A" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=325E1D0D401442F3BF182F73087B142A" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - WITH ELECTRIC P/N's" data-key="325E1D0D401442F3BF182F73087B142A"><span class="cat-nm">CV ATT KITS - WITH ELECTRIC P/N's</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EFB7F77684AF43BAB49CF22F6AA70299" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=EFB7F77684AF43BAB49CF22F6AA70299" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - GARAGE KITS, WET INTERCEPTOR KITS" data-key="EFB7F77684AF43BAB49CF22F6AA70299"><span class="cat-nm">CV ATT KITS - GARAGE KITS, WET INTERCEPTOR KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=89175026DD6145069D3FF267BC50F98B" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=89175026DD6145069D3FF267BC50F98B" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - HIDE-A-HOSE KITS" data-key="89175026DD6145069D3FF267BC50F98B"><span class="cat-nm">CV ATT KITS - HIDE-A-HOSE KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=935B22F33FB243E18E8956871A39AE98" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=935B22F33FB243E18E8956871A39AE98" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT KITS - STR SUCTION WITH &amp; WITHOUT LV HOSES" data-key="935B22F33FB243E18E8956871A39AE98"><span class="cat-nm">CV ATT KITS - STR SUCTION WITH &amp; WITHOUT LV HOSES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8621C9BCDD924109AC13ED7324A972AF" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=916CE997591F4BAB8AB441F3087A8716|pc_combined_results.asp?pc_id=8621C9BCDD924109AC13ED7324A972AF" data-parent-name="Central Vac Products|CV ATT KITS (ALL TYPES EXCEPT ''CLEAN OBSESSED'')|CV ATT SETS - TOOL ONLY 3/4/5 PC. SETS" data-key="8621C9BCDD924109AC13ED7324A972AF"><span class="cat-nm">CV ATT SETS - TOOL ONLY 3/4/5 PC. SETS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=C0DF31CE08AC49168CC0E781D3FF677E" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=C0DF31CE08AC49168CC0E781D3FF677E" data-parent-name="Central Vac Products|CV BAGS &amp; FILTERS" data-key="C0DF31CE08AC49168CC0E781D3FF677E"><span class="cat-nm">CV BAGS &amp; FILTERS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1D664E7D48FB44D192B270DBA210B77F" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1D664E7D48FB44D192B270DBA210B77F" data-parent-name="Central Vac Products|CV ATT KITS ''CLEAN OBSESSED'' MAP PROGRAMMED" data-key="1D664E7D48FB44D192B270DBA210B77F"><span class="cat-nm">CV ATT KITS ''CLEAN OBSESSED'' MAP PROGRAMMED</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59C94FE7B0DC43519DCC64273CC916E4" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1D664E7D48FB44D192B270DBA210B77F|pc_combined_results.asp?pc_id=59C94FE7B0DC43519DCC64273CC916E4" data-parent-name="Central Vac Products|CV ATT KITS ''CLEAN OBSESSED'' MAP PROGRAMMED|CLEAN OBSESSED COMPLETE DUAL VOLT CV KITS" data-key="59C94FE7B0DC43519DCC64273CC916E4"><span class="cat-nm">CLEAN OBSESSED COMPLETE DUAL VOLT CV KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=267CC4FF44AF4E209E32B98FAB27F218" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1D664E7D48FB44D192B270DBA210B77F|pc_combined_results.asp?pc_id=267CC4FF44AF4E209E32B98FAB27F218" data-parent-name="Central Vac Products|CV ATT KITS ''CLEAN OBSESSED'' MAP PROGRAMMED|CLEAN OBSESSED CV LOW VOLT HOSE KITS" data-key="267CC4FF44AF4E209E32B98FAB27F218"><span class="cat-nm">CLEAN OBSESSED CV LOW VOLT HOSE KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=28B67BA4833E4AACA3274510E7FB7895" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1D664E7D48FB44D192B270DBA210B77F|pc_combined_results.asp?pc_id=28B67BA4833E4AACA3274510E7FB7895" data-parent-name="Central Vac Products|CV ATT KITS ''CLEAN OBSESSED'' MAP PROGRAMMED|CLEAN OBSESSED STRAIGHT SUCTION ATT. KITS" data-key="28B67BA4833E4AACA3274510E7FB7895"><span class="cat-nm">CLEAN OBSESSED STRAIGHT SUCTION ATT. KITS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=0C82B5C9393D46FFA1F706038C766D14" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=0C82B5C9393D46FFA1F706038C766D14" data-parent-name="Central Vac Products|CV ATTACHMENT, WAND, &amp; HOSE STORAGE" data-key="0C82B5C9393D46FFA1F706038C766D14"><span class="cat-nm">CV ATTACHMENT, WAND, &amp; HOSE STORAGE</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D" data-parent-name="Central Vac Products|CV HOSE - DUAL VOLT 110/24v ASS'Y" data-key="016916AE5791452592BBA92F13C3164D"><span class="cat-nm">CV HOSE - DUAL VOLT 110/24v ASS'Y</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=06B04C5A8E8540E89ADCD335DC26C9AB" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D|pc_combined_results.asp?pc_id=06B04C5A8E8540E89ADCD335DC26C9AB" data-parent-name="Central Vac Products|CV HOSE - DUAL VOLT 110/24v ASS'Y|BEAM C.V. DUAL VOLT HOSES" data-key="06B04C5A8E8540E89ADCD335DC26C9AB"><span class="cat-nm">BEAM C.V. DUAL VOLT HOSES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=917F7C0941C24DD89E50E8461A0A8950" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D|pc_combined_results.asp?pc_id=917F7C0941C24DD89E50E8461A0A8950" data-parent-name="Central Vac Products|CV HOSE - DUAL VOLT 110/24v ASS'Y|CEN-TEC DUAL VOLT HOSES 110/24v" data-key="917F7C0941C24DD89E50E8461A0A8950"><span class="cat-nm">CEN-TEC DUAL VOLT HOSES 110/24v</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=881A71CAA764445E868057D2BBA3A2AF" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D|pc_combined_results.asp?pc_id=881A71CAA764445E868057D2BBA3A2AF" data-parent-name="Central Vac Products|CV HOSE - DUAL VOLT 110/24v ASS'Y|XMISC. DUAL VOLT HOSES 110/24v" data-key="881A71CAA764445E868057D2BBA3A2AF"><span class="cat-nm">XMISC. DUAL VOLT HOSES 110/24v</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EC25DE9371E4452A86B38CA07BFF07ED" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=016916AE5791452592BBA92F13C3164D|pc_combined_results.asp?pc_id=EC25DE9371E4452A86B38CA07BFF07ED" data-parent-name="Central Vac Products|CV HOSE - DUAL VOLT 110/24v ASS'Y|PLASTIFLEX DUAL VOLT HOSES 110/24v" data-key="EC25DE9371E4452A86B38CA07BFF07ED"><span class="cat-nm">PLASTIFLEX DUAL VOLT HOSES 110/24v</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC" data-key="F29DB5781052480DAD539BE2DEA7F1AE"><span class="cat-nm">CV HOSE PARTS HNDLS/CUFFS/CORDS ETC</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7CFD3D8886B94D11B2D3416412B38E9D" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE|pc_combined_results.asp?pc_id=7CFD3D8886B94D11B2D3416412B38E9D" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC|CV METAL BANDED WALL END CUFFS" data-key="7CFD3D8886B94D11B2D3416412B38E9D"><span class="cat-nm">CV METAL BANDED WALL END CUFFS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DCCACB7D566D45FD8A96A12B3BCD9ABE" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE|pc_combined_results.asp?pc_id=DCCACB7D566D45FD8A96A12B3BCD9ABE" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC|CV HOSE HANDLES CURV/STR/MTL/PLAS" data-key="DCCACB7D566D45FD8A96A12B3BCD9ABE"><span class="cat-nm">CV HOSE HANDLES CURV/STR/MTL/PLAS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4CE8D12AC7F943F3ABD7D122DDACBCC5" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE|pc_combined_results.asp?pc_id=4CE8D12AC7F943F3ABD7D122DDACBCC5" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC|HIDE-A-HOSE HANDLES,COUPLER, MINI-CUFF" data-key="4CE8D12AC7F943F3ABD7D122DDACBCC5"><span class="cat-nm">HIDE-A-HOSE HANDLES,COUPLER, MINI-CUFF</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9C4EDCAFB5924F34A0473B1F3D47F29C" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE|pc_combined_results.asp?pc_id=9C4EDCAFB5924F34A0473B1F3D47F29C" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC|CV NON-BANDED HOSE &amp; SPECIALTY CUFFS" data-key="9C4EDCAFB5924F34A0473B1F3D47F29C"><span class="cat-nm">CV NON-BANDED HOSE &amp; SPECIALTY CUFFS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B012DF3EE4234FD184A9FC41FD217763" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=F29DB5781052480DAD539BE2DEA7F1AE|pc_combined_results.asp?pc_id=B012DF3EE4234FD184A9FC41FD217763" data-parent-name="Central Vac Products|CV HOSE PARTS HNDLS/CUFFS/CORDS ETC|CV HOSE REPAIR KITS/PIGTAILS/SWTCH" data-key="B012DF3EE4234FD184A9FC41FD217763"><span class="cat-nm">CV HOSE REPAIR KITS/PIGTAILS/SWTCH</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=41B0E9EE6C424D31A5EB6411521BD128" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=41B0E9EE6C424D31A5EB6411521BD128" data-parent-name="Central Vac Products|CV HOSE - LOW VOLT HOSE ASS'Y" data-key="41B0E9EE6C424D31A5EB6411521BD128"><span class="cat-nm">CV HOSE - LOW VOLT HOSE ASS'Y</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F4CD372B4FEB4F259BCECF3BB8FE009B" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=41B0E9EE6C424D31A5EB6411521BD128|pc_combined_results.asp?pc_id=F4CD372B4FEB4F259BCECF3BB8FE009B" data-parent-name="Central Vac Products|CV HOSE - LOW VOLT HOSE ASS'Y|CEN-TEC LV HOSES UNIV &amp; NUTONE FIT" data-key="F4CD372B4FEB4F259BCECF3BB8FE009B"><span class="cat-nm">CEN-TEC LV HOSES UNIV &amp; NUTONE FIT</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=999D5F18266A4F04AF8B1D01769CFDD7" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=41B0E9EE6C424D31A5EB6411521BD128|pc_combined_results.asp?pc_id=999D5F18266A4F04AF8B1D01769CFDD7" data-parent-name="Central Vac Products|CV HOSE - LOW VOLT HOSE ASS'Y|PLASTIFLEX LOW VOLT HOSES UNIV FIT" data-key="999D5F18266A4F04AF8B1D01769CFDD7"><span class="cat-nm">PLASTIFLEX LOW VOLT HOSES UNIV FIT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8B7816974DA146F1B01C95B892A440D4" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=8B7816974DA146F1B01C95B892A440D4" data-parent-name="Central Vac Products|CV HOSE SOCS / COVERS (ALL TYPES)" data-key="8B7816974DA146F1B01C95B892A440D4"><span class="cat-nm">CV HOSE SOCS / COVERS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC" data-key="9F5BA7F550584504B5DC0C419B098D16"><span class="cat-nm">CV HOSE - STR SUCTION ASS'Y NON-ELEC</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B182BC09044B4093A139DC75B55BEA34" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=B182BC09044B4093A139DC75B55BEA34" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|HIDE-A-HOSE HOSES, WITH AND WITHOUT SOCKS" data-key="B182BC09044B4093A139DC75B55BEA34"><span class="cat-nm">HIDE-A-HOSE HOSES, WITH AND WITHOUT SOCKS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3460ADD461B745FF9173C1D2EB6E7766" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=3460ADD461B745FF9173C1D2EB6E7766" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|NON-RETRACTION HOSES w/HAH RF HANDLE" data-key="3460ADD461B745FF9173C1D2EB6E7766"><span class="cat-nm">NON-RETRACTION HOSES w/HAH RF HANDLE</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=30880665C9B64B6BA3E1C66C69BD5EEB" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=30880665C9B64B6BA3E1C66C69BD5EEB" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|REP'L BUDD STR SUCTION HOSE ASS'Ys" data-key="30880665C9B64B6BA3E1C66C69BD5EEB"><span class="cat-nm">REP'L BUDD STR SUCTION HOSE ASS'Ys</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B075C160D1ED435BA4BD6FD2333E0882" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=B075C160D1ED435BA4BD6FD2333E0882" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|CV MISC. STR SUCTION HOSE ASS'Ys" data-key="B075C160D1ED435BA4BD6FD2333E0882"><span class="cat-nm">CV MISC. STR SUCTION HOSE ASS'Ys</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B90C60C300A74BEEB64F2EA6AABC7CBC" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=B90C60C300A74BEEB64F2EA6AABC7CBC" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|REP'L NUTONE STR SUCTION HOSE ASS'Ys" data-key="B90C60C300A74BEEB64F2EA6AABC7CBC"><span class="cat-nm">REP'L NUTONE STR SUCTION HOSE ASS'Ys</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=735C716A7CB3403286322BB3E7B85BD6" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=735C716A7CB3403286322BB3E7B85BD6" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|CV STR SUCTION UNIV FIT HOSE ASS'Y" data-key="735C716A7CB3403286322BB3E7B85BD6"><span class="cat-nm">CV STR SUCTION UNIV FIT HOSE ASS'Y</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7DD529BC0E204B9581E7E72BD0DFD5F5" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=7DD529BC0E204B9581E7E72BD0DFD5F5" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|VROOM RETRACTABLE HOSES" data-key="7DD529BC0E204B9581E7E72BD0DFD5F5"><span class="cat-nm">VROOM RETRACTABLE HOSES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0F34201DEC044D94A6C9A4BDDF1C6DEE" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=9F5BA7F550584504B5DC0C419B098D16|pc_combined_results.asp?pc_id=0F34201DEC044D94A6C9A4BDDF1C6DEE" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION ASS'Y NON-ELEC|WALLY STRETCH HOSE ASSY'S" data-key="0F34201DEC044D94A6C9A4BDDF1C6DEE"><span class="cat-nm">WALLY STRETCH HOSE ASSY'S</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS" data-key="3A36C919B7E84BEB9E9CE6F50AE99854"><span class="cat-nm">CV POWER UNITS &amp; INTERNAL PARTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9D79D4F693534AFF8819A5DCBAE1E77F" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=9D79D4F693534AFF8819A5DCBAE1E77F" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|BEAM C.V. UNIT MISC. PARTS" data-key="9D79D4F693534AFF8819A5DCBAE1E77F"><span class="cat-nm">BEAM C.V. UNIT MISC. PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=810DF189DD6C44D39FA1B4232B53D111" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=810DF189DD6C44D39FA1B4232B53D111" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|BEAM CENTRAL VACUUM POWER UNITS" data-key="810DF189DD6C44D39FA1B4232B53D111"><span class="cat-nm">BEAM CENTRAL VACUUM POWER UNITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=83D72D76C4CD48809FA1E7BC1BC7E1D0" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=83D72D76C4CD48809FA1E7BC1BC7E1D0" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|CANA-VAC CENTRAL SYSTEMS &amp; PARTS" data-key="83D72D76C4CD48809FA1E7BC1BC7E1D0"><span class="cat-nm">CANA-VAC CENTRAL SYSTEMS &amp; PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=83034E06DCFA474BB653A8A85711C2F3" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=83034E06DCFA474BB653A8A85711C2F3" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|CV CIRC BOARDS/RELAYS/TRANSMITTERS" data-key="83034E06DCFA474BB653A8A85711C2F3"><span class="cat-nm">CV CIRC BOARDS/RELAYS/TRANSMITTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=903671B603724C5B88A1D56E893CA7E2" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=903671B603724C5B88A1D56E893CA7E2" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|DUOVAC POWER UNITS &amp; INTERNAL PARTS" data-key="903671B603724C5B88A1D56E893CA7E2"><span class="cat-nm">DUOVAC POWER UNITS &amp; INTERNAL PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=87B8E2D0923D4869B10F7EA3BCD978DF" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=87B8E2D0923D4869B10F7EA3BCD978DF" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|ELECTROLUX CENTRAL SYSTEMS &amp; PARTS" data-key="87B8E2D0923D4869B10F7EA3BCD978DF"><span class="cat-nm">ELECTROLUX CENTRAL SYSTEMS &amp; PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F15811B374A54AE5BE688D8B3D91C721" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=F15811B374A54AE5BE688D8B3D91C721" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|HAYDEN CENTRAL SYSTEMS &amp; PARTS" data-key="F15811B374A54AE5BE688D8B3D91C721"><span class="cat-nm">HAYDEN CENTRAL SYSTEMS &amp; PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8E96F46977B94BF2AB50805B48795843" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=8E96F46977B94BF2AB50805B48795843" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|HONEYWELL CENTRAL SYSTEMS &amp; PARTS" data-key="8E96F46977B94BF2AB50805B48795843"><span class="cat-nm">HONEYWELL CENTRAL SYSTEMS &amp; PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AC83B6FF014A4F7CBF1E080AD288F9FC" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=AC83B6FF014A4F7CBF1E080AD288F9FC" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|INTERVAC DESIGN GARAGE, RV, &amp; CONDO VACS" data-key="AC83B6FF014A4F7CBF1E080AD288F9FC"><span class="cat-nm">INTERVAC DESIGN GARAGE, RV, &amp; CONDO VACS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=187C0996DF544B9781EC5FFECA4D8093" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=187C0996DF544B9781EC5FFECA4D8093" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|JOHNNY VAC CENTRAL SYSTEMS &amp; PARTS" data-key="187C0996DF544B9781EC5FFECA4D8093"><span class="cat-nm">JOHNNY VAC CENTRAL SYSTEMS &amp; PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8975B08DBDEF4511B4230E44AE766C9B" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=8975B08DBDEF4511B4230E44AE766C9B" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|CV POWER UNIT MISC. COMPONENTS" data-key="8975B08DBDEF4511B4230E44AE766C9B"><span class="cat-nm">CV POWER UNIT MISC. COMPONENTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D04BD9E0932343A08033B9696898FFB7" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=D04BD9E0932343A08033B9696898FFB7" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|SMART CENTRAL VAC POWER UNITS" data-key="D04BD9E0932343A08033B9696898FFB7"><span class="cat-nm">SMART CENTRAL VAC POWER UNITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FFCCC42248504B608C42C817EEFE03FB" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=3A36C919B7E84BEB9E9CE6F50AE99854|pc_combined_results.asp?pc_id=FFCCC42248504B608C42C817EEFE03FB" data-parent-name="Central Vac Products|CV POWER UNITS &amp; INTERNAL PARTS|VACUMAID SYSTEMS &amp; INTERNAL PARTS" data-key="FFCCC42248504B608C42C817EEFE03FB"><span class="cat-nm">VACUMAID SYSTEMS &amp; INTERNAL PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=E2E1471E51664C27BA40F43B723ABF29" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=E2E1471E51664C27BA40F43B723ABF29" data-parent-name="Central Vac Products|CIRBRD" data-key="E2E1471E51664C27BA40F43B723ABF29"><span class="cat-nm">CIRBRD</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D01E73F2A39740D29F7FAD3C30E2171D" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D01E73F2A39740D29F7FAD3C30E2171D" data-parent-name="Central Vac Products|CV WANDS / WAND CORDS" data-key="D01E73F2A39740D29F7FAD3C30E2171D"><span class="cat-nm">CV WANDS / WAND CORDS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DE94FD06351848859940C2937091CA1C" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D01E73F2A39740D29F7FAD3C30E2171D|pc_combined_results.asp?pc_id=DE94FD06351848859940C2937091CA1C" data-parent-name="Central Vac Products|CV WANDS / WAND CORDS|CV CORD MGMT WANDS TELE/UPR/LOWER" data-key="DE94FD06351848859940C2937091CA1C"><span class="cat-nm">CV CORD MGMT WANDS TELE/UPR/LOWER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B03A0DFA446245A3B7AC2C911F204FF3" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D01E73F2A39740D29F7FAD3C30E2171D|pc_combined_results.asp?pc_id=B03A0DFA446245A3B7AC2C911F204FF3" data-parent-name="Central Vac Products|CV WANDS / WAND CORDS|CV NON-ELECT WANDS TELE/UPR/LOWER" data-key="B03A0DFA446245A3B7AC2C911F204FF3"><span class="cat-nm">CV NON-ELECT WANDS TELE/UPR/LOWER</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=52453F2CD3314573AC3B2DAC573809D8" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=52453F2CD3314573AC3B2DAC573809D8" data-parent-name="Central Vac Products|DOC-IT ROUGH-IN &amp; FINISH KITS/PARTS" data-key="52453F2CD3314573AC3B2DAC573809D8"><span class="cat-nm">DOC-IT ROUGH-IN &amp; FINISH KITS/PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1490B7CEFAA74AA5BFFABE2B2C273AA7" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1490B7CEFAA74AA5BFFABE2B2C273AA7" data-parent-name="Central Vac Products|CV FITTINGS 90's/45's/Tee's ETC." data-key="1490B7CEFAA74AA5BFFABE2B2C273AA7"><span class="cat-nm">CV FITTINGS 90's/45's/Tee's ETC.</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465" data-parent-name="Central Vac Products|CV INSTALL PIPE/WIRE/CEMENT/TOOLS" data-key="D142F5D0B8FC479192E83B8CCD9AD465"><span class="cat-nm">CV INSTALL PIPE/WIRE/CEMENT/TOOLS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A0B38C95424E497798355D3FBA6D313A" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465|pc_combined_results.asp?pc_id=A0B38C95424E497798355D3FBA6D313A" data-parent-name="Central Vac Products|CV INSTALL PIPE/WIRE/CEMENT/TOOLS|CV PIPE CEMENT / ADHESIVES" data-key="A0B38C95424E497798355D3FBA6D313A"><span class="cat-nm">CV PIPE CEMENT / ADHESIVES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9AAE35E6722F4DE9950AE4F12EF7D6D7" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465|pc_combined_results.asp?pc_id=9AAE35E6722F4DE9950AE4F12EF7D6D7" data-parent-name="Central Vac Products|CV INSTALL PIPE/WIRE/CEMENT/TOOLS|CV PIPE, PVC &amp; MTL, FIRESTOP,STRAPS" data-key="9AAE35E6722F4DE9950AE4F12EF7D6D7"><span class="cat-nm">CV PIPE, PVC &amp; MTL, FIRESTOP,STRAPS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=590F797D9A0941688B12E7230F27E603" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465|pc_combined_results.asp?pc_id=590F797D9A0941688B12E7230F27E603" data-parent-name="Central Vac Products|CV INSTALL PIPE/WIRE/CEMENT/TOOLS|CV TOOLS/NAIL GRDS/GAUGES/CUTTERS" data-key="590F797D9A0941688B12E7230F27E603"><span class="cat-nm">CV TOOLS/NAIL GRDS/GAUGES/CUTTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1CA5D2B99EC348CA9A3F63A5DFDB6A6E" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=D142F5D0B8FC479192E83B8CCD9AD465|pc_combined_results.asp?pc_id=1CA5D2B99EC348CA9A3F63A5DFDB6A6E" data-parent-name="Central Vac Products|CV INSTALL PIPE/WIRE/CEMENT/TOOLS|CV LOW VOLT WIRE, TIES, NUTS" data-key="1CA5D2B99EC348CA9A3F63A5DFDB6A6E"><span class="cat-nm">CV LOW VOLT WIRE, TIES, NUTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=A14D35B787BD42F0BA83B2B42F2F7EC3" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=A14D35B787BD42F0BA83B2B42F2F7EC3" data-parent-name="Central Vac Products|CV MUFFLERS &amp; EXHAUST COMPONENTS" data-key="A14D35B787BD42F0BA83B2B42F2F7EC3"><span class="cat-nm">CV MUFFLERS &amp; EXHAUST COMPONENTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT" data-key="FB1B43CCFDF1496992ECF86625DED2C7"><span class="cat-nm">CV HOSE - STR SUCTION LENGTHS NON-ELECT</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C5ABCF30FD5B468290AC38FF7DABDAC3" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7|pc_combined_results.asp?pc_id=C5ABCF30FD5B468290AC38FF7DABDAC3" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT|1-1/4'' CRUSHPROOF HOSE LENGTHS" data-key="C5ABCF30FD5B468290AC38FF7DABDAC3"><span class="cat-nm">1-1/4'' CRUSHPROOF HOSE LENGTHS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1164F5249FE644B0A8ACD913337D172E" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7|pc_combined_results.asp?pc_id=1164F5249FE644B0A8ACD913337D172E" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT|1-1/4'' WIRE REINFORCED HOSE LENGTHS" data-key="1164F5249FE644B0A8ACD913337D172E"><span class="cat-nm">1-1/4'' WIRE REINFORCED HOSE LENGTHS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=716806B075F946E0B4D8EEB1610368A2" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7|pc_combined_results.asp?pc_id=716806B075F946E0B4D8EEB1610368A2" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT|1-3/8'' CRUSHPROOF HOSE LENGTHS" data-key="716806B075F946E0B4D8EEB1610368A2"><span class="cat-nm">1-3/8'' CRUSHPROOF HOSE LENGTHS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0B4D61CB52ED4A21B06414F8B5FFE700" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7|pc_combined_results.asp?pc_id=0B4D61CB52ED4A21B06414F8B5FFE700" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT|1-1/2'' CRUSHPROOF HOSE LENGTHS" data-key="0B4D61CB52ED4A21B06414F8B5FFE700"><span class="cat-nm">1-1/2'' CRUSHPROOF HOSE LENGTHS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9C347852C6A94863A822C217168711AB" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=FB1B43CCFDF1496992ECF86625DED2C7|pc_combined_results.asp?pc_id=9C347852C6A94863A822C217168711AB" data-parent-name="Central Vac Products|CV HOSE - STR SUCTION LENGTHS NON-ELECT|2'' WIRE REINFORCED HOSE LENGTHS" data-key="9C347852C6A94863A822C217168711AB"><span class="cat-nm">2'' WIRE REINFORCED HOSE LENGTHS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC" data-key="1854F2451D0249E5AADBDE70F4399A39"><span class="cat-nm">CV INLET VALVES/MNTG PLATES/ETC</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B5E578B905C94475B76D15B36D22720D" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=B5E578B905C94475B76D15B36D22720D" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|CV FLR INLET VLVS VACPAN / CANSWEEPS, ETC." data-key="B5E578B905C94475B76D15B36D22720D"><span class="cat-nm">CV FLR INLET VLVS VACPAN / CANSWEEPS, ETC.</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B14E5C17CCD9429C8DFEB79485DBD526" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=B14E5C17CCD9429C8DFEB79485DBD526" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|DECO INLET VALVES" data-key="B14E5C17CCD9429C8DFEB79485DBD526"><span class="cat-nm">DECO INLET VALVES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B0AAE8A006B24C628062BA744C1D6196" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=B0AAE8A006B24C628062BA744C1D6196" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|HIDE A HOSE VALVES &amp; ROUGH KITS" data-key="B0AAE8A006B24C628062BA744C1D6196"><span class="cat-nm">HIDE A HOSE VALVES &amp; ROUGH KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5947D6A4F0CA4571AE036A24CDE23C6A" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=5947D6A4F0CA4571AE036A24CDE23C6A" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|HAYDEN VALVES/MNTG PLATES/TRIM/PARTS, ETC" data-key="5947D6A4F0CA4571AE036A24CDE23C6A"><span class="cat-nm">HAYDEN VALVES/MNTG PLATES/TRIM/PARTS, ETC</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=970995928CC14F668C4A830910CE089D" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=970995928CC14F668C4A830910CE089D" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|MISCELLANEOUS INLET VALVES/TRIM/PLTS ETC" data-key="970995928CC14F668C4A830910CE089D"><span class="cat-nm">MISCELLANEOUS INLET VALVES/TRIM/PLTS ETC</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0E47F7EAAEF9422C946B5754C03D416C" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=0E47F7EAAEF9422C946B5754C03D416C" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|PLASTIFLEX VALVES/MNTG PLATES/TRIM" data-key="0E47F7EAAEF9422C946B5754C03D416C"><span class="cat-nm">PLASTIFLEX VALVES/MNTG PLATES/TRIM</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=985F327AEBFB4977866579BDBF387999" data-parent-href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE|pc_combined_results.asp?pc_id=1854F2451D0249E5AADBDE70F4399A39|pc_combined_results.asp?pc_id=985F327AEBFB4977866579BDBF387999" data-parent-name="Central Vac Products|CV INLET VALVES/MNTG PLATES/ETC|VACULINE VALVES/MNTG PLTS/TRIM ETC." data-key="985F327AEBFB4977866579BDBF387999"><span class="cat-nm">VACULINE VALVES/MNTG PLTS/TRIM ETC.</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB" data-parent-name="Chemicals Shmp/Deodor/Scnts" data-key="50834E1068154712A7F544EAA048BCCB"><span class="cat-nm">Chemicals Shmp/Deodor/Scnts</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=0B6FC025BA6B427796C460CE7BBAD91B" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=0B6FC025BA6B427796C460CE7BBAD91B" data-parent-name="Chemicals Shmp/Deodor/Scnts|BARE/HARD FLOOR CLNR,WAX,POLISH,GROUT CLNR, ETC." data-key="0B6FC025BA6B427796C460CE7BBAD91B"><span class="cat-nm">BARE/HARD FLOOR CLNR,WAX,POLISH,GROUT CLNR, ETC.</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=68D8FFDEF15D43B49D07A8611F17CB51" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=0B6FC025BA6B427796C460CE7BBAD91B|pc_combined_results.asp?pc_id=68D8FFDEF15D43B49D07A8611F17CB51" data-parent-name="Chemicals Shmp/Deodor/Scnts|BARE/HARD FLOOR CLNR,WAX,POLISH,GROUT CLNR, ETC.|HOOVER BARE FLOOR CHEMICALS" data-key="68D8FFDEF15D43B49D07A8611F17CB51"><span class="cat-nm">HOOVER BARE FLOOR CHEMICALS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=20D3370BA1914B86B1575DA297A36772" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=0B6FC025BA6B427796C460CE7BBAD91B|pc_combined_results.asp?pc_id=20D3370BA1914B86B1575DA297A36772" data-parent-name="Chemicals Shmp/Deodor/Scnts|BARE/HARD FLOOR CLNR,WAX,POLISH,GROUT CLNR, ETC.|REXAIR BARE FLOOR CLEANER" data-key="20D3370BA1914B86B1575DA297A36772"><span class="cat-nm">REXAIR BARE FLOOR CLEANER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0E00C800553F4B1F9749F4C9F8E8B5A6" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=0B6FC025BA6B427796C460CE7BBAD91B|pc_combined_results.asp?pc_id=0E00C800553F4B1F9749F4C9F8E8B5A6" data-parent-name="Chemicals Shmp/Deodor/Scnts|BARE/HARD FLOOR CLNR,WAX,POLISH,GROUT CLNR, ETC.|STAIN-X BARE FLOOR CHEMICALS" data-key="0E00C800553F4B1F9749F4C9F8E8B5A6"><span class="cat-nm">STAIN-X BARE FLOOR CHEMICALS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES" data-key="EDEF11C780FB4E7EA4365637ABA8C92D"><span class="cat-nm">CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BAFDC585EC224A40B60F6C67372297AC" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=BAFDC585EC224A40B60F6C67372297AC" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|CALIFORNIA SCENT DEODORIZER PRODS." data-key="BAFDC585EC224A40B60F6C67372297AC"><span class="cat-nm">CALIFORNIA SCENT DEODORIZER PRODS.</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=57CA6FC6080943E4A2C877DD5455885A" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=57CA6FC6080943E4A2C877DD5455885A" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|ENVIROCARE DEODORIZOR BAGS" data-key="57CA6FC6080943E4A2C877DD5455885A"><span class="cat-nm">ENVIROCARE DEODORIZOR BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4DFF1BD6B0C34056B915FCDD6CFBBBBC" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=4DFF1BD6B0C34056B915FCDD6CFBBBBC" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|FRAGRANT SCENT VACUUM &amp; ROOM FRESHENER" data-key="4DFF1BD6B0C34056B915FCDD6CFBBBBC"><span class="cat-nm">FRAGRANT SCENT VACUUM &amp; ROOM FRESHENER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=686ACFFC7ED8477CAB190F2855BBB473" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=686ACFFC7ED8477CAB190F2855BBB473" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|KIRBY DEODORIZER SCENT" data-key="686ACFFC7ED8477CAB190F2855BBB473"><span class="cat-nm">KIRBY DEODORIZER SCENT</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C5A748D748F146FFA5152E891433F024" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=C5A748D748F146FFA5152E891433F024" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|ORECK SCENT TABS" data-key="C5A748D748F146FFA5152E891433F024"><span class="cat-nm">ORECK SCENT TABS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3E94D9C741FA4239A0864CFEDC41A701" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=3E94D9C741FA4239A0864CFEDC41A701" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|PERFECT SCENT PRODUCTS" data-key="3E94D9C741FA4239A0864CFEDC41A701"><span class="cat-nm">PERFECT SCENT PRODUCTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F3FEBAD246DE408D934CC381AA2F7F0C" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=F3FEBAD246DE408D934CC381AA2F7F0C" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|REXAIR SCENT DEODORIZER" data-key="F3FEBAD246DE408D934CC381AA2F7F0C"><span class="cat-nm">REXAIR SCENT DEODORIZER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FC303DF977614ABBABE3858EC208D512" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=FC303DF977614ABBABE3858EC208D512" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|ROGERS REFRESHER SPRAY DEODORIZER" data-key="FC303DF977614ABBABE3858EC208D512"><span class="cat-nm">ROGERS REFRESHER SPRAY DEODORIZER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=05468AED39D94CD181C143D4A89E5E69" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=05468AED39D94CD181C143D4A89E5E69" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|SEBO SCENT DEODORIZER" data-key="05468AED39D94CD181C143D4A89E5E69"><span class="cat-nm">SEBO SCENT DEODORIZER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1254797C9E3C4D349DBAF105EAFB01F0" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=1254797C9E3C4D349DBAF105EAFB01F0" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|SIRENA FRAGRANCE &amp; DEODORIZER" data-key="1254797C9E3C4D349DBAF105EAFB01F0"><span class="cat-nm">SIRENA FRAGRANCE &amp; DEODORIZER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DF79A3EA55954654A8A69512EEE62622" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=DF79A3EA55954654A8A69512EEE62622" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|STAIN-X ODOR NEUTRALIZERS" data-key="DF79A3EA55954654A8A69512EEE62622"><span class="cat-nm">STAIN-X ODOR NEUTRALIZERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5FCC871B3F4C4CCA89F85A055C812384" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=EDEF11C780FB4E7EA4365637ABA8C92D|pc_combined_results.asp?pc_id=5FCC871B3F4C4CCA89F85A055C812384" data-parent-name="Chemicals Shmp/Deodor/Scnts|CARPET/VAC BAG/AIRBORNE DEODORANTS,FRAGRANCES|VACYUM SCENT DEODORIZER" data-key="5FCC871B3F4C4CCA89F85A055C812384"><span class="cat-nm">VACYUM SCENT DEODORIZER</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=49409B0CD84C43B98DE70EAE41FEDCA4" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=49409B0CD84C43B98DE70EAE41FEDCA4" data-parent-name="Chemicals Shmp/Deodor/Scnts|MISCELLANEOUS CHEMICALS" data-key="49409B0CD84C43B98DE70EAE41FEDCA4"><span class="cat-nm">MISCELLANEOUS CHEMICALS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=0FA25D415F1B4DF5A0DADFA9F44A1A56" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=0FA25D415F1B4DF5A0DADFA9F44A1A56" data-parent-name="Chemicals Shmp/Deodor/Scnts|MULTI-PURPOSE CLEANER,NEUTRAL CLEANER" data-key="0FA25D415F1B4DF5A0DADFA9F44A1A56"><span class="cat-nm">MULTI-PURPOSE CLEANER,NEUTRAL CLEANER</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=620CDEADCED84BC19686C296188CD6F7" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=620CDEADCED84BC19686C296188CD6F7" data-parent-name="Chemicals Shmp/Deodor/Scnts|DRY POWDER CARPET CLEANER" data-key="620CDEADCED84BC19686C296188CD6F7"><span class="cat-nm">DRY POWDER CARPET CLEANER</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP." data-key="8EB725B3BB64414D8C0ED06C59BC7682"><span class="cat-nm">LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0128371F4E2D4DDA8B372782A93EFDCF" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682|pc_combined_results.asp?pc_id=0128371F4E2D4DDA8B372782A93EFDCF" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.|CLEVELAND WOOD SHAMPOO" data-key="0128371F4E2D4DDA8B372782A93EFDCF"><span class="cat-nm">CLEVELAND WOOD SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=091F299ABC6C4027B355C3809C292794" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682|pc_combined_results.asp?pc_id=091F299ABC6C4027B355C3809C292794" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.|KOBLENZ NON-EXTRACTION SHAMPOO" data-key="091F299ABC6C4027B355C3809C292794"><span class="cat-nm">KOBLENZ NON-EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=13F2A84BEDBF41C6B395ECD1C7F261F8" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682|pc_combined_results.asp?pc_id=13F2A84BEDBF41C6B395ECD1C7F261F8" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.|KIRBY NON-EXTRACTION SHAMPOO" data-key="13F2A84BEDBF41C6B395ECD1C7F261F8"><span class="cat-nm">KIRBY NON-EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=475A6F186E9B47B08624B8D86B684AC6" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682|pc_combined_results.asp?pc_id=475A6F186E9B47B08624B8D86B684AC6" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.|PERFECT NON-EXTRACTION SHAMPOO" data-key="475A6F186E9B47B08624B8D86B684AC6"><span class="cat-nm">PERFECT NON-EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D4137B7307B1484DB4CD10D4E4B51880" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=8EB725B3BB64414D8C0ED06C59BC7682|pc_combined_results.asp?pc_id=D4137B7307B1484DB4CD10D4E4B51880" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR NON-EXTRACTION EQUIP.|STAIN-X NON-EXTRACTION SHAMPOO" data-key="D4137B7307B1484DB4CD10D4E4B51880"><span class="cat-nm">STAIN-X NON-EXTRACTION SHAMPOO</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP." data-key="523666E12B7649C69DBA93760D963F1D"><span class="cat-nm">LIQUID SHAMPOO FOR EXTRACTION EQUIP.</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=ADEDE3DEB2994AF8A14472AE0BEA0CE8" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D|pc_combined_results.asp?pc_id=ADEDE3DEB2994AF8A14472AE0BEA0CE8" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP.|BISSELL EXTRACTION SHAMPOO" data-key="ADEDE3DEB2994AF8A14472AE0BEA0CE8"><span class="cat-nm">BISSELL EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0A5A5897205447E0AA9E30665B121915" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D|pc_combined_results.asp?pc_id=0A5A5897205447E0AA9E30665B121915" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP.|HOOVER EXTRACTION SHAMPOO" data-key="0A5A5897205447E0AA9E30665B121915"><span class="cat-nm">HOOVER EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=95AFB451A3EC4A74939FC085C04251B2" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D|pc_combined_results.asp?pc_id=95AFB451A3EC4A74939FC085C04251B2" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP.|KIRBY EXTRACTION SHAMPOO" data-key="95AFB451A3EC4A74939FC085C04251B2"><span class="cat-nm">KIRBY EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=ED5C5FA6024A4E92A902BC98C469A16E" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D|pc_combined_results.asp?pc_id=ED5C5FA6024A4E92A902BC98C469A16E" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP.|PERFECT EXTRACTION SHAMPOO" data-key="ED5C5FA6024A4E92A902BC98C469A16E"><span class="cat-nm">PERFECT EXTRACTION SHAMPOO</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F385E09D64D44265994463D5C6EBF113" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=523666E12B7649C69DBA93760D963F1D|pc_combined_results.asp?pc_id=F385E09D64D44265994463D5C6EBF113" data-parent-name="Chemicals Shmp/Deodor/Scnts|LIQUID SHAMPOO FOR EXTRACTION EQUIP.|STAIN-X EXTRACTION SHAMPOO" data-key="F385E09D64D44265994463D5C6EBF113"><span class="cat-nm">STAIN-X EXTRACTION SHAMPOO</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS" data-key="10D8C7EDAD6447E7943C020E9C26BAE0"><span class="cat-nm">STAIN &amp; SPOT REMOVERS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AD2E18B007404227BF177A27350D0DDC" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0|pc_combined_results.asp?pc_id=AD2E18B007404227BF177A27350D0DDC" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS|BISSELL STAIN REMOVERS" data-key="AD2E18B007404227BF177A27350D0DDC"><span class="cat-nm">BISSELL STAIN REMOVERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AA38CEA4D289460BA53B6983545E0555" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0|pc_combined_results.asp?pc_id=AA38CEA4D289460BA53B6983545E0555" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS|FEBREZE STAIN REMOVER" data-key="AA38CEA4D289460BA53B6983545E0555"><span class="cat-nm">FEBREZE STAIN REMOVER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1C2D0937B9C2444DAF9179F474E75B21" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0|pc_combined_results.asp?pc_id=1C2D0937B9C2444DAF9179F474E75B21" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS|HOOVER STAIN REMOVER" data-key="1C2D0937B9C2444DAF9179F474E75B21"><span class="cat-nm">HOOVER STAIN REMOVER</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B6513723D54448C0887AAD849C19FD12" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0|pc_combined_results.asp?pc_id=B6513723D54448C0887AAD849C19FD12" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS|KIRBY STAIN REMOVERS" data-key="B6513723D54448C0887AAD849C19FD12"><span class="cat-nm">KIRBY STAIN REMOVERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7A4E17EBD0E94F769F59FF895DFC9CEF" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=10D8C7EDAD6447E7943C020E9C26BAE0|pc_combined_results.asp?pc_id=7A4E17EBD0E94F769F59FF895DFC9CEF" data-parent-name="Chemicals Shmp/Deodor/Scnts|STAIN &amp; SPOT REMOVERS|STAIN-X STAIN REMOVERS" data-key="7A4E17EBD0E94F769F59FF895DFC9CEF"><span class="cat-nm">STAIN-X STAIN REMOVERS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=642FD8CD87804C33AE9736C87F52EEBE" data-parent-href="pc_combined_results.asp?pc_id=50834E1068154712A7F544EAA048BCCB|pc_combined_results.asp?pc_id=642FD8CD87804C33AE9736C87F52EEBE" data-parent-name="Chemicals Shmp/Deodor/Scnts|UPHOL/CARPET PROTECTOR, POLISH, WAX, STRIPPER" data-key="642FD8CD87804C33AE9736C87F52EEBE"><span class="cat-nm">UPHOL/CARPET PROTECTOR, POLISH, WAX, STRIPPER</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557" data-parent-name="Cords Of All Types, &amp; Plugs" data-key="3900C93813374259BE2C94D5207F5557"><span class="cat-nm">Cords Of All Types, &amp; Plugs</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D27B36BB32774D4E9AB49F975FF03C84" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D27B36BB32774D4E9AB49F975FF03C84" data-parent-name="Cords Of All Types, &amp; Plugs|CORD HOOKS/RETAINERS/MISC CORD PARTS" data-key="D27B36BB32774D4E9AB49F975FF03C84"><span class="cat-nm">CORD HOOKS/RETAINERS/MISC CORD PARTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)" data-key="D7E1C31281CD4430A99BA8D992A500CA"><span class="cat-nm">CORDS (GENUINE - BY BRAND)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F6D339C7E9FF41DA9C7D3312260E01F7" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=F6D339C7E9FF41DA9C7D3312260E01F7" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|BISSELL GENUINE CORDS" data-key="F6D339C7E9FF41DA9C7D3312260E01F7"><span class="cat-nm">BISSELL GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FC225BF36AD746FBB502F4EDF3914B08" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=FC225BF36AD746FBB502F4EDF3914B08" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|COMMERCIAL MISC GENUINE CORDS" data-key="FC225BF36AD746FBB502F4EDF3914B08"><span class="cat-nm">COMMERCIAL MISC GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AA4431000D47415292EC549E54EE93B7" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=AA4431000D47415292EC549E54EE93B7" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|CLEAN OBSESSED CORDS" data-key="AA4431000D47415292EC549E54EE93B7"><span class="cat-nm">CLEAN OBSESSED CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=66C4D97B355F41A88CB5ECA07CEC199A" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=66C4D97B355F41A88CB5ECA07CEC199A" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|MISCELLANEOUS GENUINE CORDS/CORD PARTS" data-key="66C4D97B355F41A88CB5ECA07CEC199A"><span class="cat-nm">MISCELLANEOUS GENUINE CORDS/CORD PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8E29569E6E514ED7AD53A3FDAC4CED89" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=8E29569E6E514ED7AD53A3FDAC4CED89" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|DYSON GENUINE CORDS" data-key="8E29569E6E514ED7AD53A3FDAC4CED89"><span class="cat-nm">DYSON GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BE42630029E34924B6BBCBAF2493B28A" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=BE42630029E34924B6BBCBAF2493B28A" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|EUREKA/ELECTROLUX CANISTER CORDS/PIGTAILS" data-key="BE42630029E34924B6BBCBAF2493B28A"><span class="cat-nm">EUREKA/ELECTROLUX CANISTER CORDS/PIGTAILS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3254FA02C17C409C818FA27320F7022D" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=3254FA02C17C409C818FA27320F7022D" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|EUREKA/ELECTROLUX/SANITAIRE MISC CORDS" data-key="3254FA02C17C409C818FA27320F7022D"><span class="cat-nm">EUREKA/ELECTROLUX/SANITAIRE MISC CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FC58E5EEDEB0469597E86D377C8B29F6" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=FC58E5EEDEB0469597E86D377C8B29F6" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|EUREKA/ELECTROLUX GEN. UPRIGHT CORDS" data-key="FC58E5EEDEB0469597E86D377C8B29F6"><span class="cat-nm">EUREKA/ELECTROLUX GEN. UPRIGHT CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0D020EB35DA14AF7BE11FA227C0414DA" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=0D020EB35DA14AF7BE11FA227C0414DA" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|HOOVER GENUINE CORDS" data-key="0D020EB35DA14AF7BE11FA227C0414DA"><span class="cat-nm">HOOVER GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9B83104C9E8547DEB32A4E5DB198C948" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=9B83104C9E8547DEB32A4E5DB198C948" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|JOHNNY VAC GENUINE CORDS/CORD PARTS" data-key="9B83104C9E8547DEB32A4E5DB198C948"><span class="cat-nm">JOHNNY VAC GENUINE CORDS/CORD PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8455952C4892430D8EC4F63AC77B265F" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=8455952C4892430D8EC4F63AC77B265F" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|KIRBY GENUINE CORDS" data-key="8455952C4892430D8EC4F63AC77B265F"><span class="cat-nm">KIRBY GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D172C825E9624BBC82D4957A971F135E" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=D172C825E9624BBC82D4957A971F135E" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|NUMATIC/NACECARE GENUINE CORDS" data-key="D172C825E9624BBC82D4957A971F135E"><span class="cat-nm">NUMATIC/NACECARE GENUINE CORDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2592FA666B1F4E56A5F92DBDE2EEC057" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=2592FA666B1F4E56A5F92DBDE2EEC057" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|ORECK GENUINE CORDS / CORD PARTS" data-key="2592FA666B1F4E56A5F92DBDE2EEC057"><span class="cat-nm">ORECK GENUINE CORDS / CORD PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=52AD000447C047C7B7A58912DA2D693A" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=52AD000447C047C7B7A58912DA2D693A" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|PERFECT PRODUCTS GENUINE CORDS/PIGTAILS" data-key="52AD000447C047C7B7A58912DA2D693A"><span class="cat-nm">PERFECT PRODUCTS GENUINE CORDS/PIGTAILS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FC62687F00774A829B09F5570CF7ED1D" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=FC62687F00774A829B09F5570CF7ED1D" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|PROTEAM GENUINE CORDS/PIGTAILS" data-key="FC62687F00774A829B09F5570CF7ED1D"><span class="cat-nm">PROTEAM GENUINE CORDS/PIGTAILS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=01196A67167B46BF84C23549F394D6BE" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=01196A67167B46BF84C23549F394D6BE" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|REXAIR GENUINE CORDS/PIGTAILS" data-key="01196A67167B46BF84C23549F394D6BE"><span class="cat-nm">REXAIR GENUINE CORDS/PIGTAILS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E39FD961A37E42EF8EACE77B0B2B8085" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=D7E1C31281CD4430A99BA8D992A500CA|pc_combined_results.asp?pc_id=E39FD961A37E42EF8EACE77B0B2B8085" data-parent-name="Cords Of All Types, &amp; Plugs|CORDS (GENUINE - BY BRAND)|SEBO GENUINE CORDS" data-key="E39FD961A37E42EF8EACE77B0B2B8085"><span class="cat-nm">SEBO GENUINE CORDS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=AD1C4073277642BC87F9D186FF38740C" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=AD1C4073277642BC87F9D186FF38740C" data-parent-name="Cords Of All Types, &amp; Plugs|PLUGS, MALE &amp; FEMALE, 2 &amp; 3 WIRE" data-key="AD1C4073277642BC87F9D186FF38740C"><span class="cat-nm">PLUGS, MALE &amp; FEMALE, 2 &amp; 3 WIRE</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS" data-key="FA1DBB48577B4B278062597CF9769F2B"><span class="cat-nm">NON-GENUINE CORDS, PN CORDS, CORD PARTS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AD5C441D346F433895F2EF160E01D49A" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B|pc_combined_results.asp?pc_id=AD5C441D346F433895F2EF160E01D49A" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS|2-WIRE CORDS (REP'L)" data-key="AD5C441D346F433895F2EF160E01D49A"><span class="cat-nm">2-WIRE CORDS (REP'L)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DC4814988B48437F91557B66CB8D9968" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B|pc_combined_results.asp?pc_id=DC4814988B48437F91557B66CB8D9968" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS|3-WIRE &amp; COMMERCIAL CORDS (REP'L)" data-key="DC4814988B48437F91557B66CB8D9968"><span class="cat-nm">3-WIRE &amp; COMMERCIAL CORDS (REP'L)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2257CC8BD4C142359A9315674ABAD893" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B|pc_combined_results.asp?pc_id=2257CC8BD4C142359A9315674ABAD893" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS|MISC REPL CORDS, CORD PARTS" data-key="2257CC8BD4C142359A9315674ABAD893"><span class="cat-nm">MISC REPL CORDS, CORD PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D2435A35AA5B487B8305C3AA8D63F03A" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B|pc_combined_results.asp?pc_id=D2435A35AA5B487B8305C3AA8D63F03A" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS|CORDWINDER CORDS (REP'L)" data-key="D2435A35AA5B487B8305C3AA8D63F03A"><span class="cat-nm">CORDWINDER CORDS (REP'L)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FB3FD77A9407420D9D1452B9751C2AC1" data-parent-href="pc_combined_results.asp?pc_id=3900C93813374259BE2C94D5207F5557|pc_combined_results.asp?pc_id=FA1DBB48577B4B278062597CF9769F2B|pc_combined_results.asp?pc_id=FB3FD77A9407420D9D1452B9751C2AC1" data-parent-name="Cords Of All Types, &amp; Plugs|NON-GENUINE CORDS, PN CORDS, CORD PARTS|POWER NOZZLE/WAND/PIGTAIL CORDS (REP'L)" data-key="FB3FD77A9407420D9D1452B9751C2AC1"><span class="cat-nm">POWER NOZZLE/WAND/PIGTAIL CORDS (REP'L)</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E" data-parent-name="Vacuum/Floor Care Equipment" data-key="ED60158C5F9A47F7A78D858BB0997B6E"><span class="cat-nm">Vacuum/Floor Care Equipment</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=C522089F459D40269ED545F158ADA83B" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=C522089F459D40269ED545F158ADA83B" data-parent-name="Vacuum/Floor Care Equipment|BISSELL EQUIPMENT" data-key="C522089F459D40269ED545F158ADA83B"><span class="cat-nm">BISSELL EQUIPMENT</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=4F28CD3DC29443D7BBA9718F429F27C2" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=4F28CD3DC29443D7BBA9718F429F27C2" data-parent-name="Vacuum/Floor Care Equipment|CLEAN OBSESSED BRAND EQUIPMENT" data-key="4F28CD3DC29443D7BBA9718F429F27C2"><span class="cat-nm">CLEAN OBSESSED BRAND EQUIPMENT</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=13EE240B5D1B4E6F8F31534709BE9C9F" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=4F28CD3DC29443D7BBA9718F429F27C2|pc_combined_results.asp?pc_id=13EE240B5D1B4E6F8F31534709BE9C9F" data-parent-name="Vacuum/Floor Care Equipment|CLEAN OBSESSED BRAND EQUIPMENT|CLEAN OBSESSED DOMESTIC &amp; COMMERCIAL EQUIPMENT" data-key="13EE240B5D1B4E6F8F31534709BE9C9F"><span class="cat-nm">CLEAN OBSESSED DOMESTIC &amp; COMMERCIAL EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=450CDB801C1344E7A6F71E1E5C31733E" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=450CDB801C1344E7A6F71E1E5C31733E" data-parent-name="Vacuum/Floor Care Equipment|EUREKA/ELECTROLUX EQUIPMENT (ALL TYPES)" data-key="450CDB801C1344E7A6F71E1E5C31733E"><span class="cat-nm">EUREKA/ELECTROLUX EQUIPMENT (ALL TYPES)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8426D3D8F129487B8BA36BC408F93BC7" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=450CDB801C1344E7A6F71E1E5C31733E|pc_combined_results.asp?pc_id=8426D3D8F129487B8BA36BC408F93BC7" data-parent-name="Vacuum/Floor Care Equipment|EUREKA/ELECTROLUX EQUIPMENT (ALL TYPES)|EUREKA/ELECTROLUX DOMESTIC EQUIPMENT" data-key="8426D3D8F129487B8BA36BC408F93BC7"><span class="cat-nm">EUREKA/ELECTROLUX DOMESTIC EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=361BA074D27B4C4196F181F32E2B0F0A" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=361BA074D27B4C4196F181F32E2B0F0A" data-parent-name="Vacuum/Floor Care Equipment|JOHNNY VAC EQUIPMENT (ALL TYPES)" data-key="361BA074D27B4C4196F181F32E2B0F0A"><span class="cat-nm">JOHNNY VAC EQUIPMENT (ALL TYPES)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E2806BB50C954CD291465445E5998BFF" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=361BA074D27B4C4196F181F32E2B0F0A|pc_combined_results.asp?pc_id=E2806BB50C954CD291465445E5998BFF" data-parent-name="Vacuum/Floor Care Equipment|JOHNNY VAC EQUIPMENT (ALL TYPES)|JOHNNY VAC COMMERCIAL EQUIPMENT" data-key="E2806BB50C954CD291465445E5998BFF"><span class="cat-nm">JOHNNY VAC COMMERCIAL EQUIPMENT</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=151BEEA9B8794F63BD4AC1308FFF6D35" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=361BA074D27B4C4196F181F32E2B0F0A|pc_combined_results.asp?pc_id=151BEEA9B8794F63BD4AC1308FFF6D35" data-parent-name="Vacuum/Floor Care Equipment|JOHNNY VAC EQUIPMENT (ALL TYPES)|JOHNNY VAC DOMESTIC EQUIPMENT" data-key="151BEEA9B8794F63BD4AC1308FFF6D35"><span class="cat-nm">JOHNNY VAC DOMESTIC EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=4250F30BB19B4A1EBBE9FC39EBEFDB1D" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=4250F30BB19B4A1EBBE9FC39EBEFDB1D" data-parent-name="Vacuum/Floor Care Equipment|KOBLENZ EQUIPMENT (ALL TYPES)" data-key="4250F30BB19B4A1EBBE9FC39EBEFDB1D"><span class="cat-nm">KOBLENZ EQUIPMENT (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=A22E5582834A4A6985E3150DA48DB554" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=A22E5582834A4A6985E3150DA48DB554" data-parent-name="Vacuum/Floor Care Equipment|MASTERCRAFT COMMERCIAL EQUIPMENT" data-key="A22E5582834A4A6985E3150DA48DB554"><span class="cat-nm">MASTERCRAFT COMMERCIAL EQUIPMENT</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=CD2EEE0021524FE48A4DEF11BABA67E1" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=CD2EEE0021524FE48A4DEF11BABA67E1" data-parent-name="Vacuum/Floor Care Equipment|MISCELLANEOUS DOMESTIC EQUIPMENT" data-key="CD2EEE0021524FE48A4DEF11BABA67E1"><span class="cat-nm">MISCELLANEOUS DOMESTIC EQUIPMENT</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=0115143F22B042ACB7597F87651964BB" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=0115143F22B042ACB7597F87651964BB" data-parent-name="Vacuum/Floor Care Equipment|NACECARE/NUMATIC EQUIPMENT (ALL TYPES)" data-key="0115143F22B042ACB7597F87651964BB"><span class="cat-nm">NACECARE/NUMATIC EQUIPMENT (ALL TYPES)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DADDFFD0CE6A431288E7D5945929FB45" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=0115143F22B042ACB7597F87651964BB|pc_combined_results.asp?pc_id=DADDFFD0CE6A431288E7D5945929FB45" data-parent-name="Vacuum/Floor Care Equipment|NACECARE/NUMATIC EQUIPMENT (ALL TYPES)|NUMATIC/NACECARE COMMERCIAL EQUIP" data-key="DADDFFD0CE6A431288E7D5945929FB45"><span class="cat-nm">NUMATIC/NACECARE COMMERCIAL EQUIP</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7986927FCD9C4B118A3EEE7C4F33E7F0" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=0115143F22B042ACB7597F87651964BB|pc_combined_results.asp?pc_id=7986927FCD9C4B118A3EEE7C4F33E7F0" data-parent-name="Vacuum/Floor Care Equipment|NACECARE/NUMATIC EQUIPMENT (ALL TYPES)|NUMATIC/NACECARE 1-1/4'' TOOL EQUIP" data-key="7986927FCD9C4B118A3EEE7C4F33E7F0"><span class="cat-nm">NUMATIC/NACECARE 1-1/4'' TOOL EQUIP</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8FAC3088C39D44F9B42A885E4EA1227C" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=8FAC3088C39D44F9B42A885E4EA1227C" data-parent-name="Vacuum/Floor Care Equipment|ORECK EQUIPMENT (ALL TYPES)" data-key="8FAC3088C39D44F9B42A885E4EA1227C"><span class="cat-nm">ORECK EQUIPMENT (ALL TYPES)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B4D97D98A98B4F69878B6DB2D465992D" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=8FAC3088C39D44F9B42A885E4EA1227C|pc_combined_results.asp?pc_id=B4D97D98A98B4F69878B6DB2D465992D" data-parent-name="Vacuum/Floor Care Equipment|ORECK EQUIPMENT (ALL TYPES)|ORECK COMMERCIAL EQUIPMENT" data-key="B4D97D98A98B4F69878B6DB2D465992D"><span class="cat-nm">ORECK COMMERCIAL EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6E7361579B924BC08A165DE6BED4D7EC" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=6E7361579B924BC08A165DE6BED4D7EC" data-parent-name="Vacuum/Floor Care Equipment|PERFECT PROD. EQUIPMENT (ALL TYPES)" data-key="6E7361579B924BC08A165DE6BED4D7EC"><span class="cat-nm">PERFECT PROD. EQUIPMENT (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=B70D8C2D3B934833B4F9C4FF291E8973" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=B70D8C2D3B934833B4F9C4FF291E8973" data-parent-name="Vacuum/Floor Care Equipment|PROTEAM EQUIPMENT (ALL TYPES)" data-key="B70D8C2D3B934833B4F9C4FF291E8973"><span class="cat-nm">PROTEAM EQUIPMENT (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=09C0380D1EDB49F99843BA3E4D6E45C0" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=09C0380D1EDB49F99843BA3E4D6E45C0" data-parent-name="Vacuum/Floor Care Equipment|READIVAC DOMESTIC EQUIPMENT" data-key="09C0380D1EDB49F99843BA3E4D6E45C0"><span class="cat-nm">READIVAC DOMESTIC EQUIPMENT</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=E13CEF49D4C34D4788F6B043AFAA4EED" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=E13CEF49D4C34D4788F6B043AFAA4EED" data-parent-name="Vacuum/Floor Care Equipment|SANDIA EQUIPMENT - ALL PRODUCTS" data-key="E13CEF49D4C34D4788F6B043AFAA4EED"><span class="cat-nm">SANDIA EQUIPMENT - ALL PRODUCTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=76BAA11D5A714F2B94D1BE33001B3846" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=76BAA11D5A714F2B94D1BE33001B3846" data-parent-name="Vacuum/Floor Care Equipment|SANITAIRE EQUIPMENT" data-key="76BAA11D5A714F2B94D1BE33001B3846"><span class="cat-nm">SANITAIRE EQUIPMENT</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C4AEBA8181AA4231A654CE90B9D5EA6A" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=76BAA11D5A714F2B94D1BE33001B3846|pc_combined_results.asp?pc_id=C4AEBA8181AA4231A654CE90B9D5EA6A" data-parent-name="Vacuum/Floor Care Equipment|SANITAIRE EQUIPMENT|SANITAIRE BLUE LINE EQUIPMENT" data-key="C4AEBA8181AA4231A654CE90B9D5EA6A"><span class="cat-nm">SANITAIRE BLUE LINE EQUIPMENT</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=409A19ED040A436C867003C1CA23AB74" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=76BAA11D5A714F2B94D1BE33001B3846|pc_combined_results.asp?pc_id=409A19ED040A436C867003C1CA23AB74" data-parent-name="Vacuum/Floor Care Equipment|SANITAIRE EQUIPMENT|SANITAIRE RED / BLACK LINE EQUIPMENT" data-key="409A19ED040A436C867003C1CA23AB74"><span class="cat-nm">SANITAIRE RED / BLACK LINE EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=CFA79DBEC0FA4AF4BA5FD53996702330" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=CFA79DBEC0FA4AF4BA5FD53996702330" data-parent-name="Vacuum/Floor Care Equipment|SEBO EQUIPMENT" data-key="CFA79DBEC0FA4AF4BA5FD53996702330"><span class="cat-nm">SEBO EQUIPMENT</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8CEEB0E3BB354EBD8B5329F4B940D394" data-parent-href="pc_combined_results.asp?pc_id=ED60158C5F9A47F7A78D858BB0997B6E|pc_combined_results.asp?pc_id=8CEEB0E3BB354EBD8B5329F4B940D394" data-parent-name="Vacuum/Floor Care Equipment|VAPAMORE STEAM CLEANING EQUIPMENT" data-key="8CEEB0E3BB354EBD8B5329F4B940D394"><span class="cat-nm">VAPAMORE STEAM CLEANING EQUIPMENT</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0" data-parent-name="Filters (All Types)" data-key="2D7A097D8C6343919756F7FCD5E495F0"><span class="cat-nm">Filters (All Types)</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=A5D2A7E091014C2880D9FB401DFB969A" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=A5D2A7E091014C2880D9FB401DFB969A" data-parent-name="Filters (All Types)|3M / ARM &amp; HAMMER REPLACEMENT FILTERS" data-key="A5D2A7E091014C2880D9FB401DFB969A"><span class="cat-nm">3M / ARM &amp; HAMMER REPLACEMENT FILTERS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND" data-key="B8C7676912824D0CB598DFCC82888157"><span class="cat-nm">GENUINE FILTERS (ALL TYPES) BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6C9554BA7A5249D7A390730FD2E2D067" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=6C9554BA7A5249D7A390730FD2E2D067" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|BISSELL GENUINE FILTERS" data-key="6C9554BA7A5249D7A390730FD2E2D067"><span class="cat-nm">BISSELL GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59BB22EF4A544F8582E3DE739EAC3F6C" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=59BB22EF4A544F8582E3DE739EAC3F6C" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|BOSCH GENUINE FILTERS" data-key="59BB22EF4A544F8582E3DE739EAC3F6C"><span class="cat-nm">BOSCH GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8E40E7E500A44485A0AF1F2EA56834F3" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=8E40E7E500A44485A0AF1F2EA56834F3" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|MISC COMMERCIAL EQUIP GENUINE FILTERS" data-key="8E40E7E500A44485A0AF1F2EA56834F3"><span class="cat-nm">MISC COMMERCIAL EQUIP GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59E8A0660F7E4CD4BF0C1DB3407740C4" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=59E8A0660F7E4CD4BF0C1DB3407740C4" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|CLEAN OBSESSED FILTERS" data-key="59E8A0660F7E4CD4BF0C1DB3407740C4"><span class="cat-nm">CLEAN OBSESSED FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=970DCF229102476A9E73B52CF0683403" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=970DCF229102476A9E73B52CF0683403" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|DUSTCARE GENUINE FILTERS" data-key="970DCF229102476A9E73B52CF0683403"><span class="cat-nm">DUSTCARE GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=81F812D7D4384D77B4B0E50427994C4F" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=81F812D7D4384D77B4B0E50427994C4F" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|DYSON GENUINE FILTERS" data-key="81F812D7D4384D77B4B0E50427994C4F"><span class="cat-nm">DYSON GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2DF9E5C52948441DADFE0AF73359A12A" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=2DF9E5C52948441DADFE0AF73359A12A" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|EUREKA/ELECTROLUX CANISTER GENUINE FILTERS" data-key="2DF9E5C52948441DADFE0AF73359A12A"><span class="cat-nm">EUREKA/ELECTROLUX CANISTER GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5483B6C6361C43ED9F8EB097CE3D8923" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=5483B6C6361C43ED9F8EB097CE3D8923" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|EUREKA/ELECTROLUX UPRIGHT GENUINE FILTERS" data-key="5483B6C6361C43ED9F8EB097CE3D8923"><span class="cat-nm">EUREKA/ELECTROLUX UPRIGHT GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C5AE50097D8E46CB8980917E8D8B8BC5" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=C5AE50097D8E46CB8980917E8D8B8BC5" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|EUREKA/ELECTROLUX MISC GENUINE FILTERS" data-key="C5AE50097D8E46CB8980917E8D8B8BC5"><span class="cat-nm">EUREKA/ELECTROLUX MISC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=51B14F332A424058B247F447086A8E12" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=51B14F332A424058B247F447086A8E12" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|FILTER QUEEN GENUINE FILTERS" data-key="51B14F332A424058B247F447086A8E12"><span class="cat-nm">FILTER QUEEN GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1FD5B904D51444FEBCEA777AE586E43C" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=1FD5B904D51444FEBCEA777AE586E43C" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|FULLER GENUINE FILTERS" data-key="1FD5B904D51444FEBCEA777AE586E43C"><span class="cat-nm">FULLER GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=36BC234A4B774EE3911BE3268701584C" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=36BC234A4B774EE3911BE3268701584C" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|HOOVER CANISTER GENUINE FILTERS" data-key="36BC234A4B774EE3911BE3268701584C"><span class="cat-nm">HOOVER CANISTER GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9BD3CA1CF0B347CCB29D6C2FC762D07E" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=9BD3CA1CF0B347CCB29D6C2FC762D07E" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|HOOVER MISC GENUINE FILTERS" data-key="9BD3CA1CF0B347CCB29D6C2FC762D07E"><span class="cat-nm">HOOVER MISC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C4B5A731663A470B9E437F39E60DF899" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=C4B5A731663A470B9E437F39E60DF899" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|HOOVER UPRIGHT GENUINE FILTERS" data-key="C4B5A731663A470B9E437F39E60DF899"><span class="cat-nm">HOOVER UPRIGHT GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0E1AF41648FB4EC78A98919C28CF63A6" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=0E1AF41648FB4EC78A98919C28CF63A6" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|JOHNNY VAC GENUINE FILTERS" data-key="0E1AF41648FB4EC78A98919C28CF63A6"><span class="cat-nm">JOHNNY VAC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B9557DDD90A441EF9124466C9C25F2D1" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=B9557DDD90A441EF9124466C9C25F2D1" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|KENMORE GENUINE FILTERS" data-key="B9557DDD90A441EF9124466C9C25F2D1"><span class="cat-nm">KENMORE GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=99FE9C57F3284E48824613B94499E41A" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=99FE9C57F3284E48824613B94499E41A" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|KIRBY GENUINE FILTERS" data-key="99FE9C57F3284E48824613B94499E41A"><span class="cat-nm">KIRBY GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3E811BD4E9EB46EE86B367D29578A75C" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=3E811BD4E9EB46EE86B367D29578A75C" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|MISCELLANEOUS GENUINE FILTERS" data-key="3E811BD4E9EB46EE86B367D29578A75C"><span class="cat-nm">MISCELLANEOUS GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0F715E617DE74801893FF3A64BD024FF" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=0F715E617DE74801893FF3A64BD024FF" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|NUMATIC/NACECARE GENUINE FILTERS" data-key="0F715E617DE74801893FF3A64BD024FF"><span class="cat-nm">NUMATIC/NACECARE GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=57433CECA00D49ED8CEF207C74EDDB3C" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=57433CECA00D49ED8CEF207C74EDDB3C" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|ORECK GENUINE FILTERS" data-key="57433CECA00D49ED8CEF207C74EDDB3C"><span class="cat-nm">ORECK GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7D31A31221714BBEB8494FCB4BF43913" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=7D31A31221714BBEB8494FCB4BF43913" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|PANASONIC CANISTER GENUINE FILTERS" data-key="7D31A31221714BBEB8494FCB4BF43913"><span class="cat-nm">PANASONIC CANISTER GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E371159D7CF84DC98EB995BA510A5F9E" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=E371159D7CF84DC98EB995BA510A5F9E" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|PANASONIC MISC GENUINE FILTERS" data-key="E371159D7CF84DC98EB995BA510A5F9E"><span class="cat-nm">PANASONIC MISC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AA9D46291CCD4204B82C10BF97093D2D" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=AA9D46291CCD4204B82C10BF97093D2D" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|PANASONIC UPRIGHT GENUINE FILTERS" data-key="AA9D46291CCD4204B82C10BF97093D2D"><span class="cat-nm">PANASONIC UPRIGHT GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C365E4F52819474FBC2AF0FE62040336" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=C365E4F52819474FBC2AF0FE62040336" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|PERFECT GENUINE FILTERS" data-key="C365E4F52819474FBC2AF0FE62040336"><span class="cat-nm">PERFECT GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3711C47FE4494A2EABF062DEA70F1C29" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=3711C47FE4494A2EABF062DEA70F1C29" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|PROTEAM GENUINE FILTERS" data-key="3711C47FE4494A2EABF062DEA70F1C29"><span class="cat-nm">PROTEAM GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EE06A895A1944D0A9F55B14E37835165" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=EE06A895A1944D0A9F55B14E37835165" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|REXAIR GENUINE FILTERS" data-key="EE06A895A1944D0A9F55B14E37835165"><span class="cat-nm">REXAIR GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=30DA4EC2F32C47A6B5F2CA39D6B5968D" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=30DA4EC2F32C47A6B5F2CA39D6B5968D" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|RICCAR GENUINE FILTERS" data-key="30DA4EC2F32C47A6B5F2CA39D6B5968D"><span class="cat-nm">RICCAR GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=27EEC71190C2403893A4F602833CB512" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=27EEC71190C2403893A4F602833CB512" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|ROYAL/DD CANISTER GENUINE FILTERS" data-key="27EEC71190C2403893A4F602833CB512"><span class="cat-nm">ROYAL/DD CANISTER GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4E88CA95A7A3408B9E4A9894E2988E0F" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=4E88CA95A7A3408B9E4A9894E2988E0F" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|ROYAL/DD UPRIGHT GENUINE FILTERS" data-key="4E88CA95A7A3408B9E4A9894E2988E0F"><span class="cat-nm">ROYAL/DD UPRIGHT GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CF4C59B5BE8D4550B0570A627B310BF1" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=CF4C59B5BE8D4550B0570A627B310BF1" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|ROYAL/DD MISC. GENUINE FILTERS" data-key="CF4C59B5BE8D4550B0570A627B310BF1"><span class="cat-nm">ROYAL/DD MISC. GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9F28BD1D11204F56BEC855F198086BA1" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=9F28BD1D11204F56BEC855F198086BA1" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|READIVAC GENUINE FILTERS" data-key="9F28BD1D11204F56BEC855F198086BA1"><span class="cat-nm">READIVAC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7A3B28115AD545468EC95727EA469C80" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=7A3B28115AD545468EC95727EA469C80" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SAMSUNG GENUINE FILTERS" data-key="7A3B28115AD545468EC95727EA469C80"><span class="cat-nm">SAMSUNG GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EDD62EB733FF4353913670F602A507D8" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=EDD62EB733FF4353913670F602A507D8" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SANYO GENUINE FILTERS" data-key="EDD62EB733FF4353913670F602A507D8"><span class="cat-nm">SANYO GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0E31C5C32F8F402581C6B99DFEB80684" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=0E31C5C32F8F402581C6B99DFEB80684" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SEBO GENUINE FILTERS" data-key="0E31C5C32F8F402581C6B99DFEB80684"><span class="cat-nm">SEBO GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6E180DEFD89F480FB5B36C1B221192FD" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=6E180DEFD89F480FB5B36C1B221192FD" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SHOP VAC GENUINE FILTERS" data-key="6E180DEFD89F480FB5B36C1B221192FD"><span class="cat-nm">SHOP VAC GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=04F3FECCE570461EA5027A73569AF413" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=04F3FECCE570461EA5027A73569AF413" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SIMPLICITY GENUINE FILTERS" data-key="04F3FECCE570461EA5027A73569AF413"><span class="cat-nm">SIMPLICITY GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4A5DBEF2EC0E406F8D09ED5EB90F92C7" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=4A5DBEF2EC0E406F8D09ED5EB90F92C7" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SANDIA GENUINE FILTERS" data-key="4A5DBEF2EC0E406F8D09ED5EB90F92C7"><span class="cat-nm">SANDIA GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3F3C422E80CC410085FE24797F2EF894" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=B8C7676912824D0CB598DFCC82888157|pc_combined_results.asp?pc_id=3F3C422E80CC410085FE24797F2EF894" data-parent-name="Filters (All Types)|GENUINE FILTERS (ALL TYPES) BY BRAND|SHARP GENUINE FILTERS" data-key="3F3C422E80CC410085FE24797F2EF894"><span class="cat-nm">SHARP GENUINE FILTERS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS" data-key="6FE57C6D655A439CB68EDF9A5163D170"><span class="cat-nm">NON-GENUINE / REPLACEMENT FILTERS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8711E7F15ACE4649AF31D05368E3EAD5" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=8711E7F15ACE4649AF31D05368E3EAD5" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|BLACK &amp; DECKER NON-GENUINE FILTERS" data-key="8711E7F15ACE4649AF31D05368E3EAD5"><span class="cat-nm">BLACK &amp; DECKER NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=88B6E7245F5E4D23889270BFCEBE5502" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=88B6E7245F5E4D23889270BFCEBE5502" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|BISSELL NON-GENUINE FILTERS" data-key="88B6E7245F5E4D23889270BFCEBE5502"><span class="cat-nm">BISSELL NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0808B4549254457BB589A3470C1F2C26" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=0808B4549254457BB589A3470C1F2C26" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|COMPACT NON-GENUINE FILTERS" data-key="0808B4549254457BB589A3470C1F2C26"><span class="cat-nm">COMPACT NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7EC2AB82B2C94B80BE00F665F73BE369" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=7EC2AB82B2C94B80BE00F665F73BE369" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|DYSON NON-GENUINE FILTERS" data-key="7EC2AB82B2C94B80BE00F665F73BE369"><span class="cat-nm">DYSON NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=991CD2667A46474AAB27F97416B8B720" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=991CD2667A46474AAB27F97416B8B720" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|EUREKA/ELECTROLUX NON-GENUINE FILTERS" data-key="991CD2667A46474AAB27F97416B8B720"><span class="cat-nm">EUREKA/ELECTROLUX NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C818811594464B81A1820805058624F6" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=C818811594464B81A1820805058624F6" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|FILTER QUEEN NON-GENUINE FILTERS" data-key="C818811594464B81A1820805058624F6"><span class="cat-nm">FILTER QUEEN NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=570D8359498D4031AB4676E95130D9BA" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=570D8359498D4031AB4676E95130D9BA" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|HOOVER NON-GENUINE FILTERS" data-key="570D8359498D4031AB4676E95130D9BA"><span class="cat-nm">HOOVER NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=938886EB1EF14D5B9756B79E6DC2C332" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=938886EB1EF14D5B9756B79E6DC2C332" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|KENMORE/SEARS NON-GENUINE FILTERS" data-key="938886EB1EF14D5B9756B79E6DC2C332"><span class="cat-nm">KENMORE/SEARS NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2AC91739E2004536A3CE34F2E96E9FF4" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=2AC91739E2004536A3CE34F2E96E9FF4" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|LAMB MOTOR NON-GENUINE FILTERS" data-key="2AC91739E2004536A3CE34F2E96E9FF4"><span class="cat-nm">LAMB MOTOR NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7452D5A4D618451B88701498992BB738" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=7452D5A4D618451B88701498992BB738" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|ELECTROLUX/AERUS NON-GENUINE FILTERS" data-key="7452D5A4D618451B88701498992BB738"><span class="cat-nm">ELECTROLUX/AERUS NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=26CB20C2C7B54789B326A8B17A336B23" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=26CB20C2C7B54789B326A8B17A336B23" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|MIELE NON-GENUINE FILTERS" data-key="26CB20C2C7B54789B326A8B17A336B23"><span class="cat-nm">MIELE NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=34A1D9025D70407687E70C49AB026E38" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=34A1D9025D70407687E70C49AB026E38" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|MISCELLANEOUS NON-GENUINE FILTERS" data-key="34A1D9025D70407687E70C49AB026E38"><span class="cat-nm">MISCELLANEOUS NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F7B3F8542A4C44FC9B1F0205152D6669" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=F7B3F8542A4C44FC9B1F0205152D6669" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|ORECK NON-GENUINE FILTERS" data-key="F7B3F8542A4C44FC9B1F0205152D6669"><span class="cat-nm">ORECK NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=ACCF929496F34D09BCBDCF22B5E01511" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=ACCF929496F34D09BCBDCF22B5E01511" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|PANASONIC NON-GENUINE FILTERS" data-key="ACCF929496F34D09BCBDCF22B5E01511"><span class="cat-nm">PANASONIC NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=84779148982148499798065AF3A6B23F" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=84779148982148499798065AF3A6B23F" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|REXAIR NON-GENUNE FILTERS" data-key="84779148982148499798065AF3A6B23F"><span class="cat-nm">REXAIR NON-GENUNE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=251209157412418B98F39DA00DF1D4A5" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=251209157412418B98F39DA00DF1D4A5" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|ROYAL/DD NON-GENUINE FILTERS" data-key="251209157412418B98F39DA00DF1D4A5"><span class="cat-nm">ROYAL/DD NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6A4450FB6AC34E14A81DDABF9E0121F3" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=6A4450FB6AC34E14A81DDABF9E0121F3" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|SHARK NON-GENUINE FILTERS" data-key="6A4450FB6AC34E14A81DDABF9E0121F3"><span class="cat-nm">SHARK NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DAD46925B70B495A8530EDCADB9E3730" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=DAD46925B70B495A8530EDCADB9E3730" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|SHOP VAC NON-GENUINE FILTERS" data-key="DAD46925B70B495A8530EDCADB9E3730"><span class="cat-nm">SHOP VAC NON-GENUINE FILTERS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=90C64D4E491B45CCA1D5E5611C63EEFF" data-parent-href="pc_combined_results.asp?pc_id=2D7A097D8C6343919756F7FCD5E495F0|pc_combined_results.asp?pc_id=6FE57C6D655A439CB68EDF9A5163D170|pc_combined_results.asp?pc_id=90C64D4E491B45CCA1D5E5611C63EEFF" data-parent-name="Filters (All Types)|NON-GENUINE / REPLACEMENT FILTERS|WINDSOR NON-GENUINE FILTERS" data-key="90C64D4E491B45CCA1D5E5611C63EEFF"><span class="cat-nm">WINDSOR NON-GENUINE FILTERS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78" data-parent-name="Electrolux/Aerus Repl Parts" data-key="144A44835081409EA17CA6BC40849D78"><span class="cat-nm">Electrolux/Aerus Repl Parts</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6F05AEEF229347AF9647CE0B064E4B7B" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=6F05AEEF229347AF9647CE0B064E4B7B" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE BEARINGS" data-key="6F05AEEF229347AF9647CE0B064E4B7B"><span class="cat-nm">LUX NON-GENUINE BEARINGS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=8B2DA3B77BCE4556A4D0C2A90D654B60" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=8B2DA3B77BCE4556A4D0C2A90D654B60" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON GENUINE BRUSH ROLLS" data-key="8B2DA3B77BCE4556A4D0C2A90D654B60"><span class="cat-nm">LUX NON GENUINE BRUSH ROLLS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=FB16B3461DAB4560A204FAAFE7BEA053" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=FB16B3461DAB4560A204FAAFE7BEA053" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE CARBON/MOTOR BRUSHES" data-key="FB16B3461DAB4560A204FAAFE7BEA053"><span class="cat-nm">LUX NON-GENUINE CARBON/MOTOR BRUSHES</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7C165E419AB24F64AF95B1287D2F4B54" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=7C165E419AB24F64AF95B1287D2F4B54" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE CORDS/PIGTAILS" data-key="7C165E419AB24F64AF95B1287D2F4B54"><span class="cat-nm">LUX NON-GENUINE CORDS/PIGTAILS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=FB6D34B5876E400B8590F666755A9389" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=FB6D34B5876E400B8590F666755A9389" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE HANDLE PARTS" data-key="FB6D34B5876E400B8590F666755A9389"><span class="cat-nm">LUX NON-GENUINE HANDLE PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7F41EDD5DEFC4B2B8E1334696AB5C9F0" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=7F41EDD5DEFC4B2B8E1334696AB5C9F0" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE HOSES/HOSE PARTS" data-key="7F41EDD5DEFC4B2B8E1334696AB5C9F0"><span class="cat-nm">LUX NON-GENUINE HOSES/HOSE PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=9D0EE217BBB049B6B5F03D013F9B1762" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=9D0EE217BBB049B6B5F03D013F9B1762" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE MOTORS/MTR PARTS" data-key="9D0EE217BBB049B6B5F03D013F9B1762"><span class="cat-nm">LUX NON-GENUINE MOTORS/MTR PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=129942F5FC9147A48984633D83CFB51D" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=129942F5FC9147A48984633D83CFB51D" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE POWER NOZZLE PARTS" data-key="129942F5FC9147A48984633D83CFB51D"><span class="cat-nm">LUX NON-GENUINE POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=32D8DAC81C354C6CAF3188944F686EDD" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=32D8DAC81C354C6CAF3188944F686EDD" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE SWITCHES" data-key="32D8DAC81C354C6CAF3188944F686EDD"><span class="cat-nm">LUX NON-GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7CC58C2FAEC643DC95AF1D652FBA562C" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=7CC58C2FAEC643DC95AF1D652FBA562C" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE WHEELS" data-key="7CC58C2FAEC643DC95AF1D652FBA562C"><span class="cat-nm">LUX NON-GENUINE WHEELS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D8E4B8BB6D5D46CEBF51528DCEE3A5AE" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=D8E4B8BB6D5D46CEBF51528DCEE3A5AE" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE WANDS/WAND PARTS" data-key="D8E4B8BB6D5D46CEBF51528DCEE3A5AE"><span class="cat-nm">LUX NON-GENUINE WANDS/WAND PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=135A5F68A07640B5AED1007066CD2104" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=135A5F68A07640B5AED1007066CD2104" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE MISC CAN/TANK PARTS" data-key="135A5F68A07640B5AED1007066CD2104"><span class="cat-nm">LUX NON-GENUINE MISC CAN/TANK PARTS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=06DC1CF2305C450DAB87BEBA8BBA9D6D" data-parent-href="pc_combined_results.asp?pc_id=144A44835081409EA17CA6BC40849D78|pc_combined_results.asp?pc_id=06DC1CF2305C450DAB87BEBA8BBA9D6D" data-parent-name="Electrolux/Aerus Repl Parts|LUX NON-GENUINE MISC. FLOOR MACH PTS" data-key="06DC1CF2305C450DAB87BEBA8BBA9D6D"><span class="cat-nm">LUX NON-GENUINE MISC. FLOOR MACH PTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799" data-parent-name="Motors &amp; Motor Components" data-key="BC59F831400F4E95BA5C65E19D029799"><span class="cat-nm">Motors &amp; Motor Components</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES" data-key="92A89CD1A3EB41EF9A406BCA09654955"><span class="cat-nm">CARBON BRUSHES</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7CC4BA9D5C654DEA9BE2EEDA4554CA29" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=7CC4BA9D5C654DEA9BE2EEDA4554CA29" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|MISC. COMMERCIAL CARBON BRUSHES" data-key="7CC4BA9D5C654DEA9BE2EEDA4554CA29"><span class="cat-nm">MISC. COMMERCIAL CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=758A28DB080E4BC587D3A55401E7230F" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=758A28DB080E4BC587D3A55401E7230F" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|DYSON CARBON BRUSHES" data-key="758A28DB080E4BC587D3A55401E7230F"><span class="cat-nm">DYSON CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B7862E04C51F4842AC3A060149123935" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=B7862E04C51F4842AC3A060149123935" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|EUREKA/ELECTROLUX CARBON BRUSHES" data-key="B7862E04C51F4842AC3A060149123935"><span class="cat-nm">EUREKA/ELECTROLUX CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D49BEF3E9F6642D9BA48129686C8D373" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=D49BEF3E9F6642D9BA48129686C8D373" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|HOOVER CARBON BRUSHES" data-key="D49BEF3E9F6642D9BA48129686C8D373"><span class="cat-nm">HOOVER CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B0E9908F63C64574A44AAA78049B2F51" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=B0E9908F63C64574A44AAA78049B2F51" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|JOHNNY VAC CARBON BRUSHES" data-key="B0E9908F63C64574A44AAA78049B2F51"><span class="cat-nm">JOHNNY VAC CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F7F845D999BF4BA5B23FFB7CCE8423C7" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=F7F845D999BF4BA5B23FFB7CCE8423C7" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|KIRBY CARBON BRUSHES" data-key="F7F845D999BF4BA5B23FFB7CCE8423C7"><span class="cat-nm">KIRBY CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=76C88D5960E54F05976565BCDC24268C" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=76C88D5960E54F05976565BCDC24268C" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|LAMB MOTOR CARBON BRUSHES" data-key="76C88D5960E54F05976565BCDC24268C"><span class="cat-nm">LAMB MOTOR CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=140B1D9A0E88488D9D0C823D6B14285B" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=140B1D9A0E88488D9D0C823D6B14285B" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|ORECK CARBON BRUSHES" data-key="140B1D9A0E88488D9D0C823D6B14285B"><span class="cat-nm">ORECK CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=80CC90BB61EC4A5F9ADBB91260A4DE81" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=80CC90BB61EC4A5F9ADBB91260A4DE81" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|PROTEAM CARBON BRUSHES" data-key="80CC90BB61EC4A5F9ADBB91260A4DE81"><span class="cat-nm">PROTEAM CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=090CED953E4C400F9E431793EC0AD281" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=090CED953E4C400F9E431793EC0AD281" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|REXAIR CARBON BRUSHES" data-key="090CED953E4C400F9E431793EC0AD281"><span class="cat-nm">REXAIR CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E9517D29095442F1BF36151ACC32E57B" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=E9517D29095442F1BF36151ACC32E57B" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|ROYAL/DIRT DEVIL CARBON BRUSHES" data-key="E9517D29095442F1BF36151ACC32E57B"><span class="cat-nm">ROYAL/DIRT DEVIL CARBON BRUSHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2B731F8441BF410CB6568827A3F6F2AA" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=92A89CD1A3EB41EF9A406BCA09654955|pc_combined_results.asp?pc_id=2B731F8441BF410CB6568827A3F6F2AA" data-parent-name="Motors &amp; Motor Components|CARBON BRUSHES|SEBO CARBON BRUSHES" data-key="2B731F8441BF410CB6568827A3F6F2AA"><span class="cat-nm">SEBO CARBON BRUSHES</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS" data-key="7ACEF0E000F842B691D891463E960723"><span class="cat-nm">CV MODEL SPECIFIC MOTORS</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CC1EBB76B2F14FD0923258F78896FDF9" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=CC1EBB76B2F14FD0923258F78896FDF9" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|BEAM ELECTROLUX, HONEYWELL MOTORS" data-key="CC1EBB76B2F14FD0923258F78896FDF9"><span class="cat-nm">BEAM ELECTROLUX, HONEYWELL MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A7B218A64DA04386ACB47CBA70D5DD77" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=A7B218A64DA04386ACB47CBA70D5DD77" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|CYCLOVAC MOTOR / MOTOR PARTS" data-key="A7B218A64DA04386ACB47CBA70D5DD77"><span class="cat-nm">CYCLOVAC MOTOR / MOTOR PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EF2A57DB5F954859A920F34461039799" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=EF2A57DB5F954859A920F34461039799" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|DUOVAC CENTRAL VAC MOTORS" data-key="EF2A57DB5F954859A920F34461039799"><span class="cat-nm">DUOVAC CENTRAL VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9FE945577D8F452CB513913C36299ECA" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=9FE945577D8F452CB513913C36299ECA" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|HAYDEN CENTRAL VAC MOTORS" data-key="9FE945577D8F452CB513913C36299ECA"><span class="cat-nm">HAYDEN CENTRAL VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=49E3AC7BE33242E182E8781ADDDA2243" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=49E3AC7BE33242E182E8781ADDDA2243" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|JOHNNY VAC CENTRAL VAC MOTORS" data-key="49E3AC7BE33242E182E8781ADDDA2243"><span class="cat-nm">JOHNNY VAC CENTRAL VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A3514FC83A6944AB876CF0E02B17C999" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=A3514FC83A6944AB876CF0E02B17C999" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|LUX/AERUS REPL CV MOTORS" data-key="A3514FC83A6944AB876CF0E02B17C999"><span class="cat-nm">LUX/AERUS REPL CV MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BA1126F962544D678055CBDC13DD5779" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=BA1126F962544D678055CBDC13DD5779" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|NUTONE GENUINE MOTORS" data-key="BA1126F962544D678055CBDC13DD5779"><span class="cat-nm">NUTONE GENUINE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D896F2C275EB475284129D7BFCB6D5D1" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=7ACEF0E000F842B691D891463E960723|pc_combined_results.asp?pc_id=D896F2C275EB475284129D7BFCB6D5D1" data-parent-name="Motors &amp; Motor Components|CV MODEL SPECIFIC MOTORS|VACUFLO MOTORS" data-key="D896F2C275EB475284129D7BFCB6D5D1"><span class="cat-nm">VACUFLO MOTORS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1A61FF45DAAD4E2FA4C43A5D03C2E635" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=1A61FF45DAAD4E2FA4C43A5D03C2E635" data-parent-name="Motors &amp; Motor Components|DOMEL MOTORS" data-key="1A61FF45DAAD4E2FA4C43A5D03C2E635"><span class="cat-nm">DOMEL MOTORS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND" data-key="975458E1821D401B9C99D0FA356F8B33"><span class="cat-nm">MOTORS - GENUINE BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B15F3322838D495E9AA848D16DC1B607" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=B15F3322838D495E9AA848D16DC1B607" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|BISSELL MOTORS, PUMPS &amp; COMPONENTS PTS." data-key="B15F3322838D495E9AA848D16DC1B607"><span class="cat-nm">BISSELL MOTORS, PUMPS &amp; COMPONENTS PTS.</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AD0CF6FAEC1C47D5AD550F31E9E23391" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=AD0CF6FAEC1C47D5AD550F31E9E23391" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|CLEAN OBSESSED MOTORS" data-key="AD0CF6FAEC1C47D5AD550F31E9E23391"><span class="cat-nm">CLEAN OBSESSED MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EFB44C58A6FD49E298E95704E09465A8" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=EFB44C58A6FD49E298E95704E09465A8" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|MISC COMMERCIAL EQUIP MOTORS" data-key="EFB44C58A6FD49E298E95704E09465A8"><span class="cat-nm">MISC COMMERCIAL EQUIP MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9BA9F804E0CF48778FD208E2949DFAF7" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=9BA9F804E0CF48778FD208E2949DFAF7" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|DYSON GENUINE MOTORS / MTR PARTS" data-key="9BA9F804E0CF48778FD208E2949DFAF7"><span class="cat-nm">DYSON GENUINE MOTORS / MTR PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2B911B64915C463BBB5397AFCEA0946C" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=2B911B64915C463BBB5397AFCEA0946C" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|EUREKA/ELECTROLUX MOTOR ASSY'S" data-key="2B911B64915C463BBB5397AFCEA0946C"><span class="cat-nm">EUREKA/ELECTROLUX MOTOR ASSY'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59C1D3E195214392A03FE4C7657E86D7" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=59C1D3E195214392A03FE4C7657E86D7" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|FILTER QUEEN MOTORS" data-key="59C1D3E195214392A03FE4C7657E86D7"><span class="cat-nm">FILTER QUEEN MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=70DCFA5FBC284EE086EB68EA14979CE3" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=70DCFA5FBC284EE086EB68EA14979CE3" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|HOOVER MOTOR ASSY'S (DOMESTIC/CMRCL)" data-key="70DCFA5FBC284EE086EB68EA14979CE3"><span class="cat-nm">HOOVER MOTOR ASSY'S (DOMESTIC/CMRCL)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A92E20E4595B4AABA75F299D0B04AC70" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=A92E20E4595B4AABA75F299D0B04AC70" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|HOOVER CENTRAL VAC MOTORS" data-key="A92E20E4595B4AABA75F299D0B04AC70"><span class="cat-nm">HOOVER CENTRAL VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=79994A3F0A1545A880839CE47C93D3AF" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=79994A3F0A1545A880839CE47C93D3AF" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|JOHNNY VAC MOTORS" data-key="79994A3F0A1545A880839CE47C93D3AF"><span class="cat-nm">JOHNNY VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F12D831500C34FA6A5E237C8992E64FF" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=F12D831500C34FA6A5E237C8992E64FF" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|KOBLENZ MOTORS" data-key="F12D831500C34FA6A5E237C8992E64FF"><span class="cat-nm">KOBLENZ MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=94D052E806BB401B93C3F5D6C4FE1785" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=94D052E806BB401B93C3F5D6C4FE1785" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|KIRBY GENUINE MOTORS" data-key="94D052E806BB401B93C3F5D6C4FE1785"><span class="cat-nm">KIRBY GENUINE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=87279E503ADD4877BEC9E16788F7A5ED" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=87279E503ADD4877BEC9E16788F7A5ED" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|LOVELESS ASH VAC MOTORS" data-key="87279E503ADD4877BEC9E16788F7A5ED"><span class="cat-nm">LOVELESS ASH VAC MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E8AA5F81EDDF405484F87279E1861F21" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=E8AA5F81EDDF405484F87279E1861F21" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|NUMATIC/NACECARE MOTORS / MOTOR PARTS" data-key="E8AA5F81EDDF405484F87279E1861F21"><span class="cat-nm">NUMATIC/NACECARE MOTORS / MOTOR PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=42DBC0356E0E43C5BD7FB5BD74EACC82" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=42DBC0356E0E43C5BD7FB5BD74EACC82" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|ORECK MOTOR ASSY'S" data-key="42DBC0356E0E43C5BD7FB5BD74EACC82"><span class="cat-nm">ORECK MOTOR ASSY'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C0CA2B13B8204F6E9007CEB98D59CBC7" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=C0CA2B13B8204F6E9007CEB98D59CBC7" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|PANASONIC MOTOR ASSY'S" data-key="C0CA2B13B8204F6E9007CEB98D59CBC7"><span class="cat-nm">PANASONIC MOTOR ASSY'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A6329988FF1B4702BD3D14B2ACF9AA46" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=A6329988FF1B4702BD3D14B2ACF9AA46" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|PERFECT MOTORS / MOTOR PARTS" data-key="A6329988FF1B4702BD3D14B2ACF9AA46"><span class="cat-nm">PERFECT MOTORS / MOTOR PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=393A389B71F746E39794C75C38177CE3" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=393A389B71F746E39794C75C38177CE3" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|PROTEAM MOTORS" data-key="393A389B71F746E39794C75C38177CE3"><span class="cat-nm">PROTEAM MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AED544B205224C9FA0EC0A5B73FC391F" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=AED544B205224C9FA0EC0A5B73FC391F" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|ROYAL/DIRT DEVIL MOTOR ASSY'S" data-key="AED544B205224C9FA0EC0A5B73FC391F"><span class="cat-nm">ROYAL/DIRT DEVIL MOTOR ASSY'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C3E89E17EDF84624A80168EFB79BEF3F" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|pc_combined_results.asp?pc_id=C3E89E17EDF84624A80168EFB79BEF3F" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|REXAIR MOTOR ASSY'S" data-key="C3E89E17EDF84624A80168EFB79BEF3F"><span class="cat-nm">REXAIR MOTOR ASSY'S</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="Products/SEBMTR" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=975458E1821D401B9C99D0FA356F8B33|/Products/SEBMTR" data-parent-name="Motors &amp; Motor Components|MOTORS - GENUINE BY BRAND|SEBO GENUINE MOTORS" data-key="00CB1F1C6E884F4D8BB5D3A37EEDF854"><span class="cat-nm">SEBO GENUINE MOTORS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)" data-key="06E44D2651BA4874A986892F6DAA7A41"><span class="cat-nm">LAMB (AMETEK) MOTORS (ALL TYPES)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3995ACAF011A4230971E5AD9A1CF051C" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=3995ACAF011A4230971E5AD9A1CF051C" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB 1-STAGE MOTORS" data-key="3995ACAF011A4230971E5AD9A1CF051C"><span class="cat-nm">LAMB 1-STAGE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=63C7AE745927455892C574B5E502ECC1" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=63C7AE745927455892C574B5E502ECC1" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB 2-STAGE MOTORS" data-key="63C7AE745927455892C574B5E502ECC1"><span class="cat-nm">LAMB 2-STAGE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F848905037CD433DAC835F6132CAA32A" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=F848905037CD433DAC835F6132CAA32A" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB 3-STAGE MOTORS" data-key="F848905037CD433DAC835F6132CAA32A"><span class="cat-nm">LAMB 3-STAGE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7197345BE0534F25A068EFC8BEA81648" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=7197345BE0534F25A068EFC8BEA81648" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB MOTOR GASKETS" data-key="7197345BE0534F25A068EFC8BEA81648"><span class="cat-nm">LAMB MOTOR GASKETS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4A1E517005F848C3A92EF84FBD55D458" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=4A1E517005F848C3A92EF84FBD55D458" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB MISCELLANEOUS MOTORS" data-key="4A1E517005F848C3A92EF84FBD55D458"><span class="cat-nm">LAMB MISCELLANEOUS MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D06AA05B7EB248679ACB5E61FCCCF1BC" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=06E44D2651BA4874A986892F6DAA7A41|pc_combined_results.asp?pc_id=D06AA05B7EB248679ACB5E61FCCCF1BC" data-parent-name="Motors &amp; Motor Components|LAMB (AMETEK) MOTORS (ALL TYPES)|LAMB MOTOR COMPONENT PARTS" data-key="D06AA05B7EB248679ACB5E61FCCCF1BC"><span class="cat-nm">LAMB MOTOR COMPONENT PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND" data-key="2E183864D9E74BEDB0914763525B5AA1"><span class="cat-nm">POWER NOZZLE MOTORS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2F9A32F7BACD4CE7852497F4E386D476" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=2F9A32F7BACD4CE7852497F4E386D476" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|COMPACT TRI-STAR POW NOZ MOTORS" data-key="2F9A32F7BACD4CE7852497F4E386D476"><span class="cat-nm">COMPACT TRI-STAR POW NOZ MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=06E5F958A24E4FC082E0EE53FE9DF41A" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=06E5F958A24E4FC082E0EE53FE9DF41A" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|BEAM/EUREKA/ELECTROLUX POWER NOZZLE MTRS" data-key="06E5F958A24E4FC082E0EE53FE9DF41A"><span class="cat-nm">BEAM/EUREKA/ELECTROLUX POWER NOZZLE MTRS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BC3C4955AD5C41279167B4166B881F56" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=BC3C4955AD5C41279167B4166B881F56" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|HOOVER POWER NOZZLE MOTORS" data-key="BC3C4955AD5C41279167B4166B881F56"><span class="cat-nm">HOOVER POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=967AE22FCF8E4626B1325E01DCB715A3" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=967AE22FCF8E4626B1325E01DCB715A3" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|JOHNNY VAC POWER NOZZLE MOTORS" data-key="967AE22FCF8E4626B1325E01DCB715A3"><span class="cat-nm">JOHNNY VAC POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=523C83F7A02C4250848F59FEA691959D" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=523C83F7A02C4250848F59FEA691959D" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|KENMORE POWER NOZZLE MOTORS" data-key="523C83F7A02C4250848F59FEA691959D"><span class="cat-nm">KENMORE POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=27C141AA0B794904B0D8A0F98B9D7A73" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=27C141AA0B794904B0D8A0F98B9D7A73" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|LAMB MISC POWER NOZZLE MOTORS" data-key="27C141AA0B794904B0D8A0F98B9D7A73"><span class="cat-nm">LAMB MISC POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8EA0765F23254759A30D411A139FFAD9" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=8EA0765F23254759A30D411A139FFAD9" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|PANASONIC POWER NOZZLE MOTORS" data-key="8EA0765F23254759A30D411A139FFAD9"><span class="cat-nm">PANASONIC POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=13866DEF9E7D405D820453848A4F44CF" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=13866DEF9E7D405D820453848A4F44CF" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|READIVAC POWER NOZZLE MOTORS" data-key="13866DEF9E7D405D820453848A4F44CF"><span class="cat-nm">READIVAC POWER NOZZLE MOTORS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7BBECC4053FF4EEC8813187096844CF9" data-parent-href="pc_combined_results.asp?pc_id=BC59F831400F4E95BA5C65E19D029799|pc_combined_results.asp?pc_id=2E183864D9E74BEDB0914763525B5AA1|pc_combined_results.asp?pc_id=7BBECC4053FF4EEC8813187096844CF9" data-parent-name="Motors &amp; Motor Components|POWER NOZZLE MOTORS BY BRAND|REXAIR POWER NOZZLE MOTORS" data-key="7BBECC4053FF4EEC8813187096844CF9"><span class="cat-nm">REXAIR POWER NOZZLE MOTORS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7" data-parent-name="Outer Bags (All Styles)" data-key="96F13AA3665A4323A8E0BF233C5566F7"><span class="cat-nm">Outer Bags (All Styles)</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)" data-key="BE6BFE81352F4F0C9C32590F1C21CFC7"><span class="cat-nm">OUTER BAGS GENUINE (S/O + ZIP)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=80A7F44373734EF8910A975AB602F2D6" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=80A7F44373734EF8910A975AB602F2D6" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|CLEAN OBSESSED OUTER BAGS" data-key="80A7F44373734EF8910A975AB602F2D6"><span class="cat-nm">CLEAN OBSESSED OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=52286B84A96D48B7998B6F484F796634" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=52286B84A96D48B7998B6F484F796634" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|EUREKA/SANITAIRE GENUINE OUTER BAGS" data-key="52286B84A96D48B7998B6F484F796634"><span class="cat-nm">EUREKA/SANITAIRE GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B026A9F2AC1D45709F06AB4D35D2F9D1" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=B026A9F2AC1D45709F06AB4D35D2F9D1" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|HOOVER GENUINE OUTER BAGS" data-key="B026A9F2AC1D45709F06AB4D35D2F9D1"><span class="cat-nm">HOOVER GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=40E91E71FCC04B3DAAAF3DB1CD680168" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=40E91E71FCC04B3DAAAF3DB1CD680168" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|KIRBY GENUINE OUTER BAGS" data-key="40E91E71FCC04B3DAAAF3DB1CD680168"><span class="cat-nm">KIRBY GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F8F002C344B8438DBC8724FE5067CF53" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=F8F002C344B8438DBC8724FE5067CF53" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|ORECK GENUINE OUTER BAGS" data-key="F8F002C344B8438DBC8724FE5067CF53"><span class="cat-nm">ORECK GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8C4B43625ADC4B1FACBEE90D69F03F8E" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=8C4B43625ADC4B1FACBEE90D69F03F8E" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|PERFECT PRODUCTS GENUINE OUTER BAGS" data-key="8C4B43625ADC4B1FACBEE90D69F03F8E"><span class="cat-nm">PERFECT PRODUCTS GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F000A08DBFB74CDBAA6939BDDA776F70" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=BE6BFE81352F4F0C9C32590F1C21CFC7|pc_combined_results.asp?pc_id=F000A08DBFB74CDBAA6939BDDA776F70" data-parent-name="Outer Bags (All Styles)|OUTER BAGS GENUINE (S/O + ZIP)|ROYAL/DIRT DEVIL GENUINE OUTER BAGS" data-key="F000A08DBFB74CDBAA6939BDDA776F70"><span class="cat-nm">ROYAL/DIRT DEVIL GENUINE OUTER BAGS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=46FE467859C243C897B7F0AF0D9B39FA" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=46FE467859C243C897B7F0AF0D9B39FA" data-parent-name="Outer Bags (All Styles)|OUTER BAG COMPONENT PARTS" data-key="46FE467859C243C897B7F0AF0D9B39FA"><span class="cat-nm">OUTER BAG COMPONENT PARTS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=1BFA252C9936472CA8ED11E134D4B081" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=1BFA252C9936472CA8ED11E134D4B081" data-parent-name="Outer Bags (All Styles)|OUTER BAGS NON-GENUINE (S/O + ZIP)" data-key="1BFA252C9936472CA8ED11E134D4B081"><span class="cat-nm">OUTER BAGS NON-GENUINE (S/O + ZIP)</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D63C72D7042D4F5B9E549D90CAB71647" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=1BFA252C9936472CA8ED11E134D4B081|pc_combined_results.asp?pc_id=D63C72D7042D4F5B9E549D90CAB71647" data-parent-name="Outer Bags (All Styles)|OUTER BAGS NON-GENUINE (S/O + ZIP)|EUREKA/SANITAIRE NON GENUINE OUTER BAGS" data-key="D63C72D7042D4F5B9E549D90CAB71647"><span class="cat-nm">EUREKA/SANITAIRE NON GENUINE OUTER BAGS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=1C1E07671E7D4B64A6D526636A6ED41C" data-parent-href="pc_combined_results.asp?pc_id=96F13AA3665A4323A8E0BF233C5566F7|pc_combined_results.asp?pc_id=1BFA252C9936472CA8ED11E134D4B081|pc_combined_results.asp?pc_id=1C1E07671E7D4B64A6D526636A6ED41C" data-parent-name="Outer Bags (All Styles)|OUTER BAGS NON-GENUINE (S/O + ZIP)|ORECK NON GENUINE OUTER BAGS" data-key="1C1E07671E7D4B64A6D526636A6ED41C"><span class="cat-nm">ORECK NON GENUINE OUTER BAGS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539" data-parent-name="Floor Mach Pads/Brushes" data-key="367AC813CBA94A90AB319F475696A539"><span class="cat-nm">Floor Mach Pads/Brushes</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=EFE72C2DF1A34D0B9837E9C90891664D" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=EFE72C2DF1A34D0B9837E9C90891664D" data-parent-name="Floor Mach Pads/Brushes|BISSELL FLOOR PADS (ALL TYPES)" data-key="EFE72C2DF1A34D0B9837E9C90891664D"><span class="cat-nm">BISSELL FLOOR PADS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=4491C588B3FB44B78B5D592BF111C114" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=4491C588B3FB44B78B5D592BF111C114" data-parent-name="Floor Mach Pads/Brushes|COMMERCIAL FLOOR PADS (ALL TYPES)" data-key="4491C588B3FB44B78B5D592BF111C114"><span class="cat-nm">COMMERCIAL FLOOR PADS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=C8383C78B9EF4D0E82338A9273A1E125" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=C8383C78B9EF4D0E82338A9273A1E125" data-parent-name="Floor Mach Pads/Brushes|FIT ALL FLOOR PADS (ALL TYPES)" data-key="C8383C78B9EF4D0E82338A9273A1E125"><span class="cat-nm">FIT ALL FLOOR PADS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D1889E78CFC34EE98634B8C2D1EA1C7A" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=D1889E78CFC34EE98634B8C2D1EA1C7A" data-parent-name="Floor Mach Pads/Brushes|HOOVER FLOOR PADS (ALL TYPES)" data-key="D1889E78CFC34EE98634B8C2D1EA1C7A"><span class="cat-nm">HOOVER FLOOR PADS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=E1B8E26EED9E4B8E892EFD004C9E3993" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=E1B8E26EED9E4B8E892EFD004C9E3993" data-parent-name="Floor Mach Pads/Brushes|KOBLENZ FLOOR PADS/BRUSHES ALL TYPES)" data-key="E1B8E26EED9E4B8E892EFD004C9E3993"><span class="cat-nm">KOBLENZ FLOOR PADS/BRUSHES ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=952BE8521ABB4CFF876BAC1A98E6F491" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=952BE8521ABB4CFF876BAC1A98E6F491" data-parent-name="Floor Mach Pads/Brushes|LUX FLOOR MACH PADS/BRUSHES (ALL TYPES)" data-key="952BE8521ABB4CFF876BAC1A98E6F491"><span class="cat-nm">LUX FLOOR MACH PADS/BRUSHES (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=81376D85A608400CBAC2A035DACF851E" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=81376D85A608400CBAC2A035DACF851E" data-parent-name="Floor Mach Pads/Brushes|ORECK FLOOR PADS (ALL TYPES)" data-key="81376D85A608400CBAC2A035DACF851E"><span class="cat-nm">ORECK FLOOR PADS (ALL TYPES)</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=F87F5AAA94784BC4AC510D3F5B7F6F8E" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=F87F5AAA94784BC4AC510D3F5B7F6F8E" data-parent-name="Floor Mach Pads/Brushes|SEBO DISCO FLOOR PADS" data-key="F87F5AAA94784BC4AC510D3F5B7F6F8E"><span class="cat-nm">SEBO DISCO FLOOR PADS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=154C7C55EB254731AAAA3EE8217D06FC" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=154C7C55EB254731AAAA3EE8217D06FC" data-parent-name="Floor Mach Pads/Brushes|SHARK REPLACEMENT FLOOR PADS" data-key="154C7C55EB254731AAAA3EE8217D06FC"><span class="cat-nm">SHARK REPLACEMENT FLOOR PADS</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=E7071DFBA65D47FE8F75506356B3DF85" data-parent-href="pc_combined_results.asp?pc_id=367AC813CBA94A90AB319F475696A539|pc_combined_results.asp?pc_id=E7071DFBA65D47FE8F75506356B3DF85" data-parent-name="Floor Mach Pads/Brushes|SWIFFER PADS, DUSTER REFILLS" data-key="E7071DFBA65D47FE8F75506356B3DF85"><span class="cat-nm">SWIFFER PADS, DUSTER REFILLS</span></a></li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503" data-parent-name="Pwr Noz's/Component Parts" data-key="7A0920C465A74735A0EAF7B5E9DF0503"><span class="cat-nm">Pwr Noz's/Component Parts</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE" data-key="374D038964054B9EB2E9C180AC2FAB93"><span class="cat-nm">ELECTRIC POWER NOZZLES COMPLETE</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2C7B2698C69946E08DCCBA870F98D539" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=2C7B2698C69946E08DCCBA870F98D539" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|ASCENDANT BATTERY POWER NOZZLE" data-key="2C7B2698C69946E08DCCBA870F98D539"><span class="cat-nm">ASCENDANT BATTERY POWER NOZZLE</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D246D454877343D3B2BBC9465BB257B9" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=D246D454877343D3B2BBC9465BB257B9" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|NUERA / BEAM ELECTRIC POWER NOZZLES" data-key="D246D454877343D3B2BBC9465BB257B9"><span class="cat-nm">NUERA / BEAM ELECTRIC POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4B7F4CCBD7154E198654F7B4B9B627A9" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=4B7F4CCBD7154E198654F7B4B9B627A9" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|CEN-TEC ELECTRIC POWER NOZZLES" data-key="4B7F4CCBD7154E198654F7B4B9B627A9"><span class="cat-nm">CEN-TEC ELECTRIC POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C6B282CF76B44547A699D698162D2BF4" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=C6B282CF76B44547A699D698162D2BF4" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|JOHNNY VAC ELECT POWER NOZZLES" data-key="C6B282CF76B44547A699D698162D2BF4"><span class="cat-nm">JOHNNY VAC ELECT POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=4E1A45C854BE46F8B31892980C3D4256" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=4E1A45C854BE46F8B31892980C3D4256" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|MISCELLANEOUS ELECTRIC POWER NOZZLES" data-key="4E1A45C854BE46F8B31892980C3D4256"><span class="cat-nm">MISCELLANEOUS ELECTRIC POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=296A3A64839642C9B8D15BD97D84DE21" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=296A3A64839642C9B8D15BD97D84DE21" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|NUTONE ELECTRIC POWER NOZZLES" data-key="296A3A64839642C9B8D15BD97D84DE21"><span class="cat-nm">NUTONE ELECTRIC POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=79ADAA4CE5ED448989AAEDB02406A9AD" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=79ADAA4CE5ED448989AAEDB02406A9AD" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|PERFECT PRODUCTS ELECT POWER NOZZLES" data-key="79ADAA4CE5ED448989AAEDB02406A9AD"><span class="cat-nm">PERFECT PRODUCTS ELECT POWER NOZZLES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=17CEED0D71F647CBBF9BD37B477E7B60" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=17CEED0D71F647CBBF9BD37B477E7B60" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|SEBO ELECT POWER NOZZLES FOR CV KITS" data-key="17CEED0D71F647CBBF9BD37B477E7B60"><span class="cat-nm">SEBO ELECT POWER NOZZLES FOR CV KITS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6D4616E8EB254711A2845AE062AD588B" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=6D4616E8EB254711A2845AE062AD588B" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|SILVER ELEVEN ELECTRIC POWER NOZZLE" data-key="6D4616E8EB254711A2845AE062AD588B"><span class="cat-nm">SILVER ELEVEN ELECTRIC POWER NOZZLE</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DC06CF7BB4D74555B21419E362B1B7EE" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=374D038964054B9EB2E9C180AC2FAB93|pc_combined_results.asp?pc_id=DC06CF7BB4D74555B21419E362B1B7EE" data-parent-name="Pwr Noz's/Component Parts|ELECTRIC POWER NOZZLES COMPLETE|WESSEL ELECTRIC POWER NOZZLES" data-key="DC06CF7BB4D74555B21419E362B1B7EE"><span class="cat-nm">WESSEL ELECTRIC POWER NOZZLES</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND" data-key="D166D12A8F2E47E79A7A80713363D148"><span class="cat-nm">ELECT P/N MISC PARTS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8ED7DD6D8D9B4F9BB52C1D0472E10B9F" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=8ED7DD6D8D9B4F9BB52C1D0472E10B9F" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|BEAM POWER NOZZLE PARTS" data-key="8ED7DD6D8D9B4F9BB52C1D0472E10B9F"><span class="cat-nm">BEAM POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C88F09E2D95F463A9A04E1A38C4D6132" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=C88F09E2D95F463A9A04E1A38C4D6132" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|CEN-TEC POW/NOZ MISC PARTS (see Kenmore &amp; Hayden)" data-key="C88F09E2D95F463A9A04E1A38C4D6132"><span class="cat-nm">CEN-TEC POW/NOZ MISC PARTS (see Kenmore &amp; Hayden)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8A491B49B61C482BB4B6111AD7D14D47" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=8A491B49B61C482BB4B6111AD7D14D47" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|ELECTROLUX CV QUIET CLEAN POWER NOZZLE PARTS" data-key="8A491B49B61C482BB4B6111AD7D14D47"><span class="cat-nm">ELECTROLUX CV QUIET CLEAN POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=868724DD10CB4B13BCA5653C96A7B131" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=868724DD10CB4B13BCA5653C96A7B131" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|EUREKA/ELECTROLUX POW/NOZ MISC PARTS" data-key="868724DD10CB4B13BCA5653C96A7B131"><span class="cat-nm">EUREKA/ELECTROLUX POW/NOZ MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=51E83392C5DB48C3840F40C0C32391D2" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=51E83392C5DB48C3840F40C0C32391D2" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|FILTER QUEEN POW NOZ PARTS" data-key="51E83392C5DB48C3840F40C0C32391D2"><span class="cat-nm">FILTER QUEEN POW NOZ PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BF0CEB4F50E14999AED38CE119C70386" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=BF0CEB4F50E14999AED38CE119C70386" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|HAYDEN POW/NOZ MISC PARTS (See Cen-Tec &amp; Kenmore P/N Parts)" data-key="BF0CEB4F50E14999AED38CE119C70386"><span class="cat-nm">HAYDEN POW/NOZ MISC PARTS (See Cen-Tec &amp; Kenmore P/N Parts)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=63C55E20418A428AAE8129D630AA6981" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=63C55E20418A428AAE8129D630AA6981" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|HOOVER POW/NOZ MISC PARTS" data-key="63C55E20418A428AAE8129D630AA6981"><span class="cat-nm">HOOVER POW/NOZ MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F846EC043AC8485B97E6425BF9ECB608" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=F846EC043AC8485B97E6425BF9ECB608" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|JOHNNY VAC POW NOZ PARTS" data-key="F846EC043AC8485B97E6425BF9ECB608"><span class="cat-nm">JOHNNY VAC POW NOZ PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=06FDB4CBA5574A75BA362F9E8B2232D2" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=06FDB4CBA5574A75BA362F9E8B2232D2" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|KENMORE POWER NOZZLE PARTS (See Cen-Tec, Hayden, P/N Parts)" data-key="06FDB4CBA5574A75BA362F9E8B2232D2"><span class="cat-nm">KENMORE POWER NOZZLE PARTS (See Cen-Tec, Hayden, P/N Parts)</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F7B98A59A290455D9B6C414BDB0E6499" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=F7B98A59A290455D9B6C414BDB0E6499" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|LINDHAUS ELECT POWER NOZZLE PARTS" data-key="F7B98A59A290455D9B6C414BDB0E6499"><span class="cat-nm">LINDHAUS ELECT POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=97E70FFD168845D59A4E1603A8BB63D3" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=97E70FFD168845D59A4E1603A8BB63D3" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|MISCELLANEOUS POWER NOZZLE PARTS" data-key="97E70FFD168845D59A4E1603A8BB63D3"><span class="cat-nm">MISCELLANEOUS POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=07AB031E64514869B2FE66A39CB431A0" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=07AB031E64514869B2FE66A39CB431A0" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|NUTONE POWER NOZZLE PARTS" data-key="07AB031E64514869B2FE66A39CB431A0"><span class="cat-nm">NUTONE POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=349B2AA87B144167AD7FE10ECC8B2BFF" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=349B2AA87B144167AD7FE10ECC8B2BFF" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|PANASONIC POWER NOZZLE MISC PARTS" data-key="349B2AA87B144167AD7FE10ECC8B2BFF"><span class="cat-nm">PANASONIC POWER NOZZLE MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=059BE1FFC5394005BDD51A6F5E31575B" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=059BE1FFC5394005BDD51A6F5E31575B" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|PERFECT POWER NOZZLE PARTS" data-key="059BE1FFC5394005BDD51A6F5E31575B"><span class="cat-nm">PERFECT POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=B3E2C3C149864690A8272BC11541E1D6" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=B3E2C3C149864690A8272BC11541E1D6" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|REXAIR ELECTRIC POWER NOZZLE PARTS" data-key="B3E2C3C149864690A8272BC11541E1D6"><span class="cat-nm">REXAIR ELECTRIC POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=55D36663237146EAA818F8027F920F45" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=55D36663237146EAA818F8027F920F45" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|RICCAR / SIMPLICITY POWER NOZZLE PARTS" data-key="55D36663237146EAA818F8027F920F45"><span class="cat-nm">RICCAR / SIMPLICITY POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2772F1BB2D6B45DE9DDF944CD50AF7DE" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=2772F1BB2D6B45DE9DDF944CD50AF7DE" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|SILVER 11 POW/NOZ MISC PARTS" data-key="2772F1BB2D6B45DE9DDF944CD50AF7DE"><span class="cat-nm">SILVER 11 POW/NOZ MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A1A2BA7EAECC4863AAD0DEEBC43E9F74" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=A1A2BA7EAECC4863AAD0DEEBC43E9F74" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|SEBO ET-1, ET-2 POW NOZ PARTS" data-key="A1A2BA7EAECC4863AAD0DEEBC43E9F74"><span class="cat-nm">SEBO ET-1, ET-2 POW NOZ PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=344621511C2C41928F0BADD8B570F9F6" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=344621511C2C41928F0BADD8B570F9F6" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|SEBO ET-H POWER NOZZLE PARTS" data-key="344621511C2C41928F0BADD8B570F9F6"><span class="cat-nm">SEBO ET-H POWER NOZZLE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=55296812909A47EFA1C9DB864809D6A3" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=55296812909A47EFA1C9DB864809D6A3" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|SEBO ELECTRIC POWER NOZZLE MISC PARTS" data-key="55296812909A47EFA1C9DB864809D6A3"><span class="cat-nm">SEBO ELECTRIC POWER NOZZLE MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=AF601114F0C54CD8B74E876D613D33D5" data-parent-href="pc_combined_results.asp?pc_id=7A0920C465A74735A0EAF7B5E9DF0503|pc_combined_results.asp?pc_id=D166D12A8F2E47E79A7A80713363D148|pc_combined_results.asp?pc_id=AF601114F0C54CD8B74E876D613D33D5" data-parent-name="Pwr Noz's/Component Parts|ELECT P/N MISC PARTS BY BRAND|WESSEL POW/NOZ MISC PARTS" data-key="AF601114F0C54CD8B74E876D613D33D5"><span class="cat-nm">WESSEL POW/NOZ MISC PARTS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092" data-parent-name="Switches (Except CVAC)" data-key="9697E0CF62614A74915EE8747BF43092"><span class="cat-nm">Switches (Except CVAC)</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND" data-key="D97F762763C8470D80235FB21D294882"><span class="cat-nm">SWITCHES, GENUINE BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0EE238EF5A624FDEB23F181096025ADF" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=0EE238EF5A624FDEB23F181096025ADF" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|BISSELL GENUINE SWITCHES" data-key="0EE238EF5A624FDEB23F181096025ADF"><span class="cat-nm">BISSELL GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=F58DB1762F294A04BD5ACAC972903725" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=F58DB1762F294A04BD5ACAC972903725" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|MISC COMMERCIAL PRODUCT SWITCHES" data-key="F58DB1762F294A04BD5ACAC972903725"><span class="cat-nm">MISC COMMERCIAL PRODUCT SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A131C062013C4D3ABEDD12010D59FDA3" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=A131C062013C4D3ABEDD12010D59FDA3" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|CLEAN OBSESSED SWITCHES" data-key="A131C062013C4D3ABEDD12010D59FDA3"><span class="cat-nm">CLEAN OBSESSED SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=411E6384536E4AF3925C695056CDF7A7" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=411E6384536E4AF3925C695056CDF7A7" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|DYSON GENUINE SWITCHES" data-key="411E6384536E4AF3925C695056CDF7A7"><span class="cat-nm">DYSON GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=879C6F1E3A624F3C95C7E8C264DF8436" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=879C6F1E3A624F3C95C7E8C264DF8436" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|EUREKA/ELECTROLUX/SANITAIRE GENUINE SWITCHES" data-key="879C6F1E3A624F3C95C7E8C264DF8436"><span class="cat-nm">EUREKA/ELECTROLUX/SANITAIRE GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6D067EE72B2A4EFF91E43E3E5E216CB5" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=6D067EE72B2A4EFF91E43E3E5E216CB5" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|HOOVER GENUINE SWITCHES" data-key="6D067EE72B2A4EFF91E43E3E5E216CB5"><span class="cat-nm">HOOVER GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=947230128D6A4D5684729AEEA44F5D78" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=947230128D6A4D5684729AEEA44F5D78" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|JOHNNY VAC GENUINE SWITCHES" data-key="947230128D6A4D5684729AEEA44F5D78"><span class="cat-nm">JOHNNY VAC GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=92504886CBFC4433B153C542C8A36511" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=92504886CBFC4433B153C542C8A36511" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|KOBLENZ GENUINE SWITCHES" data-key="92504886CBFC4433B153C542C8A36511"><span class="cat-nm">KOBLENZ GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BB6A3C312F5F41C58BA61E8C9179B04D" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=BB6A3C312F5F41C58BA61E8C9179B04D" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|KIRBY GENUINE SWITCHES" data-key="BB6A3C312F5F41C58BA61E8C9179B04D"><span class="cat-nm">KIRBY GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=26A85DB85E7C4815AF62294459E96227" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=26A85DB85E7C4815AF62294459E96227" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|MISCELLANEOUS GENUINE SWITCHES" data-key="26A85DB85E7C4815AF62294459E96227"><span class="cat-nm">MISCELLANEOUS GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7BF685289AAD4963B9933C6EA7611634" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=7BF685289AAD4963B9933C6EA7611634" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|NUMATIC/NACECARE GENUINE SWITCHES" data-key="7BF685289AAD4963B9933C6EA7611634"><span class="cat-nm">NUMATIC/NACECARE GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D848B56ECB594D628A4E3BAB5DE1F022" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=D848B56ECB594D628A4E3BAB5DE1F022" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|ORECK GENUINE SWITCHES" data-key="D848B56ECB594D628A4E3BAB5DE1F022"><span class="cat-nm">ORECK GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=572CB5F4BC0E4A0AAFE27E66AF334C67" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=572CB5F4BC0E4A0AAFE27E66AF334C67" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|PANASONIC GENUINE SWITCHES" data-key="572CB5F4BC0E4A0AAFE27E66AF334C67"><span class="cat-nm">PANASONIC GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FD59328065C0413DA3D28E3980CA739A" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=FD59328065C0413DA3D28E3980CA739A" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|PERFECT PRODUCTS GENUINE SWITCHES" data-key="FD59328065C0413DA3D28E3980CA739A"><span class="cat-nm">PERFECT PRODUCTS GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=84601EA41B3D4B318650261F8D41D67B" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=84601EA41B3D4B318650261F8D41D67B" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|PROTEAM GENUINE SWITCHES" data-key="84601EA41B3D4B318650261F8D41D67B"><span class="cat-nm">PROTEAM GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3184DDD9DB8B4D0E8D6E4A97A004AD2F" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=3184DDD9DB8B4D0E8D6E4A97A004AD2F" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|ROYAL/DIRT DEVIL GENUINE SWITCHES" data-key="3184DDD9DB8B4D0E8D6E4A97A004AD2F"><span class="cat-nm">ROYAL/DIRT DEVIL GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7C5229711B1A4E89B1CA28258106A69A" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=7C5229711B1A4E89B1CA28258106A69A" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|REXAIR GENUINE SWITCHES" data-key="7C5229711B1A4E89B1CA28258106A69A"><span class="cat-nm">REXAIR GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E391ED3F31F64A3390671EB2299E2410" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=E391ED3F31F64A3390671EB2299E2410" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|SEBO GENUINE SWITCHES" data-key="E391ED3F31F64A3390671EB2299E2410"><span class="cat-nm">SEBO GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=32C668916C5B42F7BE4E3490C4D19324" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=D97F762763C8470D80235FB21D294882|pc_combined_results.asp?pc_id=32C668916C5B42F7BE4E3490C4D19324" data-parent-name="Switches (Except CVAC)|SWITCHES, GENUINE BY BRAND|WINDSOR SWITCHES" data-key="32C668916C5B42F7BE4E3490C4D19324"><span class="cat-nm">WINDSOR SWITCHES</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=6008B212DD114A10A4F8D2977762BC98" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=6008B212DD114A10A4F8D2977762BC98" data-parent-name="Switches (Except CVAC)|SWITCHES, NON-GENUINE BY BRAND, FITALL" data-key="6008B212DD114A10A4F8D2977762BC98"><span class="cat-nm">SWITCHES, NON-GENUINE BY BRAND, FITALL</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=55163CED86384F4F9BDC6F9C6F410BB2" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=6008B212DD114A10A4F8D2977762BC98|pc_combined_results.asp?pc_id=55163CED86384F4F9BDC6F9C6F410BB2" data-parent-name="Switches (Except CVAC)|SWITCHES, NON-GENUINE BY BRAND, FITALL|DYSON NON-GENUINE SWITCHES" data-key="55163CED86384F4F9BDC6F9C6F410BB2"><span class="cat-nm">DYSON NON-GENUINE SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=ECD68F40BD67407DA338DC14B2FAAD4B" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=6008B212DD114A10A4F8D2977762BC98|pc_combined_results.asp?pc_id=ECD68F40BD67407DA338DC14B2FAAD4B" data-parent-name="Switches (Except CVAC)|SWITCHES, NON-GENUINE BY BRAND, FITALL|FITALL TYPE REPLACEMENT SWITCHES" data-key="ECD68F40BD67407DA338DC14B2FAAD4B"><span class="cat-nm">FITALL TYPE REPLACEMENT SWITCHES</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A67F449CEA5D4597BE32C5C728A70281" data-parent-href="pc_combined_results.asp?pc_id=9697E0CF62614A74915EE8747BF43092|pc_combined_results.asp?pc_id=6008B212DD114A10A4F8D2977762BC98|pc_combined_results.asp?pc_id=A67F449CEA5D4597BE32C5C728A70281" data-parent-name="Switches (Except CVAC)|SWITCHES, NON-GENUINE BY BRAND, FITALL|REXAIR NON-GENUINE SWITCHES" data-key="A67F449CEA5D4597BE32C5C728A70281"><span class="cat-nm">REXAIR NON-GENUINE SWITCHES</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31" data-parent-name="Wands" data-key="0738A3ADD3E747769778BCBB65C7EB31"><span class="cat-nm">Wands</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=7C5A40F27F814C5599E72D7F0EE63915" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=7C5A40F27F814C5599E72D7F0EE63915" data-parent-name="Wands|1-1/2'' - 1-9/16'' COMMERCIAL WANDS" data-key="7C5A40F27F814C5599E72D7F0EE63915"><span class="cat-nm">1-1/2'' - 1-9/16'' COMMERCIAL WANDS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=98275B8F75CC4355AD5DDFD5BE285A38" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=98275B8F75CC4355AD5DDFD5BE285A38" data-parent-name="Wands|IND STD / F.A 1-1/4'' WANDS/CRVD ENDS (SEE ALSO CVAC CATEGORY" data-key="98275B8F75CC4355AD5DDFD5BE285A38"><span class="cat-nm">IND STD / F.A 1-1/4'' WANDS/CRVD ENDS (SEE ALSO CVAC CATEGORY</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BFF0C358D05044FE8B5464837F822CE8" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=98275B8F75CC4355AD5DDFD5BE285A38|pc_combined_results.asp?pc_id=BFF0C358D05044FE8B5464837F822CE8" data-parent-name="Wands|IND STD / F.A 1-1/4'' WANDS/CRVD ENDS (SEE ALSO CVAC CATEGORY|INDUSTRY STD/F.A. CURVED WANDS/HNDLS" data-key="BFF0C358D05044FE8B5464837F822CE8"><span class="cat-nm">INDUSTRY STD/F.A. CURVED WANDS/HNDLS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=6DA15A3D24FF4407B5D8DDF4F6CA3700" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=98275B8F75CC4355AD5DDFD5BE285A38|pc_combined_results.asp?pc_id=6DA15A3D24FF4407B5D8DDF4F6CA3700" data-parent-name="Wands|IND STD / F.A 1-1/4'' WANDS/CRVD ENDS (SEE ALSO CVAC CATEGORY|INDUSTRY STD/F.A. STRIAGHT WANDS" data-key="6DA15A3D24FF4407B5D8DDF4F6CA3700"><span class="cat-nm">INDUSTRY STD/F.A. STRIAGHT WANDS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443" data-parent-name="Wands|GENUINE WANDS BY BRAND" data-key="2CDEBB5E43EC42678FD89FAB1ECA5443"><span class="cat-nm">GENUINE WANDS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=06DF956901DD4958B7F952D5374C50B6" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=06DF956901DD4958B7F952D5374C50B6" data-parent-name="Wands|GENUINE WANDS BY BRAND|BISSELL GENUINE WANDS" data-key="06DF956901DD4958B7F952D5374C50B6"><span class="cat-nm">BISSELL GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=65B8BF7313B94E30A72810877B03A3B7" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=65B8BF7313B94E30A72810877B03A3B7" data-parent-name="Wands|GENUINE WANDS BY BRAND|BOSCH GENUINE WANDS" data-key="65B8BF7313B94E30A72810877B03A3B7"><span class="cat-nm">BOSCH GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C2412AC2A0B944EE81F61BB49F8940C0" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=C2412AC2A0B944EE81F61BB49F8940C0" data-parent-name="Wands|GENUINE WANDS BY BRAND|CLEAN OBSESSED GENUINE WANDS" data-key="C2412AC2A0B944EE81F61BB49F8940C0"><span class="cat-nm">CLEAN OBSESSED GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=296AFCBA2384466E9CFE1642D962FF8E" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=296AFCBA2384466E9CFE1642D962FF8E" data-parent-name="Wands|GENUINE WANDS BY BRAND|DYSON WANDS" data-key="296AFCBA2384466E9CFE1642D962FF8E"><span class="cat-nm">DYSON WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=13904EA75FD34F41B9B9789A0071CDDC" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=13904EA75FD34F41B9B9789A0071CDDC" data-parent-name="Wands|GENUINE WANDS BY BRAND|EUREKA/ELECTROLUX GEN WANDS/WAND PTS" data-key="13904EA75FD34F41B9B9789A0071CDDC"><span class="cat-nm">EUREKA/ELECTROLUX GEN WANDS/WAND PTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9BA55352B5104D4E9A15E8B15C876987" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=9BA55352B5104D4E9A15E8B15C876987" data-parent-name="Wands|GENUINE WANDS BY BRAND|FILTER QUEEN GENUINE WANDS" data-key="9BA55352B5104D4E9A15E8B15C876987"><span class="cat-nm">FILTER QUEEN GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=247743A2328F431399DEF0A75AA35D52" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=247743A2328F431399DEF0A75AA35D52" data-parent-name="Wands|GENUINE WANDS BY BRAND|HOOVER GENUINE WANDS / WAND PARTS" data-key="247743A2328F431399DEF0A75AA35D52"><span class="cat-nm">HOOVER GENUINE WANDS / WAND PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0BABFA3236264B0A95131BD1B3C3B7D3" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=0BABFA3236264B0A95131BD1B3C3B7D3" data-parent-name="Wands|GENUINE WANDS BY BRAND|JOHNNY VAC GENUINE WANDS" data-key="0BABFA3236264B0A95131BD1B3C3B7D3"><span class="cat-nm">JOHNNY VAC GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A83276169A954771B0958F8266C271A2" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=A83276169A954771B0958F8266C271A2" data-parent-name="Wands|GENUINE WANDS BY BRAND|KIRBY GENUINE WANDS" data-key="A83276169A954771B0958F8266C271A2"><span class="cat-nm">KIRBY GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3034FB2DF7384619B36C4EE2A0992476" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=3034FB2DF7384619B36C4EE2A0992476" data-parent-name="Wands|GENUINE WANDS BY BRAND|NUMATIC/NACECARE WANDS/CURVED ENDS" data-key="3034FB2DF7384619B36C4EE2A0992476"><span class="cat-nm">NUMATIC/NACECARE WANDS/CURVED ENDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=80AF59224E7A4364B5AAB202B33BFB69" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=80AF59224E7A4364B5AAB202B33BFB69" data-parent-name="Wands|GENUINE WANDS BY BRAND|PANASONIC GENUINE WAND/ASSY's" data-key="80AF59224E7A4364B5AAB202B33BFB69"><span class="cat-nm">PANASONIC GENUINE WAND/ASSY's</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D876947C3B604B13B0EA8432246068C4" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=D876947C3B604B13B0EA8432246068C4" data-parent-name="Wands|GENUINE WANDS BY BRAND|PROTEAM GENUINE WANDS / WAND PARTS" data-key="D876947C3B604B13B0EA8432246068C4"><span class="cat-nm">PROTEAM GENUINE WANDS / WAND PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5577E055760A46DBB1DD6C0FA19FBEF6" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=5577E055760A46DBB1DD6C0FA19FBEF6" data-parent-name="Wands|GENUINE WANDS BY BRAND|ROYAL/DIRT DEVIL GENUINE WANDS" data-key="5577E055760A46DBB1DD6C0FA19FBEF6"><span class="cat-nm">ROYAL/DIRT DEVIL GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5E7CFC48550E47D78FDB353B4096D6C8" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=5E7CFC48550E47D78FDB353B4096D6C8" data-parent-name="Wands|GENUINE WANDS BY BRAND|READIVAC WANDS" data-key="5E7CFC48550E47D78FDB353B4096D6C8"><span class="cat-nm">READIVAC WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FE428831E88F4C56923B5A514C2D4B4F" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=FE428831E88F4C56923B5A514C2D4B4F" data-parent-name="Wands|GENUINE WANDS BY BRAND|REXAIR GENUINE WANDS / WAND PARTS" data-key="FE428831E88F4C56923B5A514C2D4B4F"><span class="cat-nm">REXAIR GENUINE WANDS / WAND PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7DF896E185534B3BB758760565B3FAB8" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=7DF896E185534B3BB758760565B3FAB8" data-parent-name="Wands|GENUINE WANDS BY BRAND|RICCAR &amp; SIMPLICITY GENUINE WANDS" data-key="7DF896E185534B3BB758760565B3FAB8"><span class="cat-nm">RICCAR &amp; SIMPLICITY GENUINE WANDS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0EFEE03E29694D4F86E92D760682186E" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=2CDEBB5E43EC42678FD89FAB1ECA5443|pc_combined_results.asp?pc_id=0EFEE03E29694D4F86E92D760682186E" data-parent-name="Wands|GENUINE WANDS BY BRAND|SEBO GENUINE WANDS" data-key="0EFEE03E29694D4F86E92D760682186E"><span class="cat-nm">SEBO GENUINE WANDS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="pc_combined_results.asp?pc_id=527A6249482C46389DE963DD339E27B4" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=527A6249482C46389DE963DD339E27B4" data-parent-name="Wands|NON-GENUINE DOMESTIC WANDS BY BRAND" data-key="527A6249482C46389DE963DD339E27B4"><span class="cat-nm">NON-GENUINE DOMESTIC WANDS BY BRAND</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7C80A759DA1C4307A7EAED08B3BE55C0" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=527A6249482C46389DE963DD339E27B4|pc_combined_results.asp?pc_id=7C80A759DA1C4307A7EAED08B3BE55C0" data-parent-name="Wands|NON-GENUINE DOMESTIC WANDS BY BRAND|KENMORE REPLACEMENT WANDS/SETS" data-key="7C80A759DA1C4307A7EAED08B3BE55C0"><span class="cat-nm">KENMORE REPLACEMENT WANDS/SETS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E54D34B4BF854A629B859D911B8F0559" data-parent-href="pc_combined_results.asp?pc_id=0738A3ADD3E747769778BCBB65C7EB31|pc_combined_results.asp?pc_id=527A6249482C46389DE963DD339E27B4|pc_combined_results.asp?pc_id=E54D34B4BF854A629B859D911B8F0559" data-parent-name="Wands|NON-GENUINE DOMESTIC WANDS BY BRAND|MIELE NON GENUINE WANDS / WAND PARTS" data-key="E54D34B4BF854A629B859D911B8F0559"><span class="cat-nm">MIELE NON GENUINE WANDS / WAND PARTS</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-1  link-parent drop"><a class="prodcat__a-1" href="products/BRANDS" data-parent-href="/products/BRANDS" data-parent-name="Brands" data-key="A4952FF543064E7494CCC0A576E5CFE9"><span class="cat-nm">Brands</span></a>
<ul class="prodcat__ul-2">
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Advance" data-parent-href="/products/BRANDS|/products/BRANDS/Advance" data-parent-name="Brands|ADVANCE" data-key="9C86403906B74B269881A9AA08190D1A"><span class="cat-nm">ADVANCE</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Bissell" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell" data-parent-name="Brands|BISSELL" data-key="2245424EF2C14EF782C33318E0DBD51B"><span class="cat-nm">BISSELL</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E950805DDF4F4EC8993B98B5AA2ACAE2" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=E950805DDF4F4EC8993B98B5AA2ACAE2" data-parent-name="Brands|BISSELL|BISSELL CANISTER MISC PARTS" data-key="E950805DDF4F4EC8993B98B5AA2ACAE2"><span class="cat-nm">BISSELL CANISTER MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D1D82FD07AE34D5188E74BF970946333" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=D1D82FD07AE34D5188E74BF970946333" data-parent-name="Brands|BISSELL|BISSELL COMMERCIAL MISC PARTS" data-key="D1D82FD07AE34D5188E74BF970946333"><span class="cat-nm">BISSELL COMMERCIAL MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=59D384E6C6084FD69EB5D082E974B092" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=59D384E6C6084FD69EB5D082E974B092" data-parent-name="Brands|BISSELL|BISSELL CORDLESS EQUIPMENT MISC PARTS" data-key="59D384E6C6084FD69EB5D082E974B092"><span class="cat-nm">BISSELL CORDLESS EQUIPMENT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D7A32CBA319A4616BDC376907A966E5A" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=D7A32CBA319A4616BDC376907A966E5A" data-parent-name="Brands|BISSELL|BISSELL FLOOR SCRUB/EXTRCTR MISC PTS" data-key="D7A32CBA319A4616BDC376907A966E5A"><span class="cat-nm">BISSELL FLOOR SCRUB/EXTRCTR MISC PTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=144F89307FDF4D65966E60020C78D290" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=144F89307FDF4D65966E60020C78D290" data-parent-name="Brands|BISSELL|BISSELL HAND-HELD MISC PARTS" data-key="144F89307FDF4D65966E60020C78D290"><span class="cat-nm">BISSELL HAND-HELD MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=A65FA857C9BB46608ECDA9CC44A931BF" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=A65FA857C9BB46608ECDA9CC44A931BF" data-parent-name="Brands|BISSELL|BISSELL ROBOT CLEANER PARTS" data-key="A65FA857C9BB46608ECDA9CC44A931BF"><span class="cat-nm">BISSELL ROBOT CLEANER PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=44771A03F5DC404BA79C75EED36C341F" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=44771A03F5DC404BA79C75EED36C341F" data-parent-name="Brands|BISSELL|BISSELL UPRIGHT MISC PARTS" data-key="44771A03F5DC404BA79C75EED36C341F"><span class="cat-nm">BISSELL UPRIGHT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=822B6111D8D2489DA8501FCEA7D84ABE" data-parent-href="/products/BRANDS|/products/BRANDS/Bissell|pc_combined_results.asp?pc_id=822B6111D8D2489DA8501FCEA7D84ABE" data-parent-name="Brands|BISSELL|BISSELL MISCELLANEOUS PARTS" data-key="822B6111D8D2489DA8501FCEA7D84ABE"><span class="cat-nm">BISSELL MISCELLANEOUS PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Bosch" data-parent-href="/products/BRANDS|/products/BRANDS/Bosch" data-parent-name="Brands|BOSCH" data-key="4B4CAC65E20C4A66B1D79806B3E18B0D"><span class="cat-nm">BOSCH</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Cana-Vac" data-parent-href="/products/BRANDS|/products/BRANDS/Cana-Vac" data-parent-name="Brands|CANA-VAC" data-key="D8770389B1F64BD2AA9E81738FB65FFA"><span class="cat-nm">CANA-VAC</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Clean-Obsessed" data-parent-href="/products/BRANDS|/products/BRANDS/Clean-Obsessed" data-parent-name="Brands|CLEAN OBSESSED" data-key="0307E866ACA943E7BFDC6562CDA48B73"><span class="cat-nm">CLEAN OBSESSED</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Compact" data-parent-href="/products/BRANDS|/products/BRANDS/Compact" data-parent-name="Brands|COMPACT" data-key="151C58C9F935481691498C25FA90FB2F"><span class="cat-nm">COMPACT</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Dyson" data-parent-href="/products/BRANDS|/products/BRANDS/Dyson" data-parent-name="Brands|DYSON" data-key="8039F03781704D8B9AF68150EC18B6D4"><span class="cat-nm">DYSON</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3783EE215B6241E490598E94A2214251" data-parent-href="/products/BRANDS|/products/BRANDS/Dyson|pc_combined_results.asp?pc_id=3783EE215B6241E490598E94A2214251" data-parent-name="Brands|DYSON|DYSON GENUINE CANISTER MISC PARTS" data-key="3783EE215B6241E490598E94A2214251"><span class="cat-nm">DYSON GENUINE CANISTER MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=82F15157E2E542878B8C23F9272BC389" data-parent-href="/products/BRANDS|/products/BRANDS/Dyson|pc_combined_results.asp?pc_id=82F15157E2E542878B8C23F9272BC389" data-parent-name="Brands|DYSON|DYSON GENUINE UPRIGHT MISC PARTS" data-key="82F15157E2E542878B8C23F9272BC389"><span class="cat-nm">DYSON GENUINE UPRIGHT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=312C772D71CF467EBA525757BE2FE728" data-parent-href="/products/BRANDS|/products/BRANDS/Dyson|pc_combined_results.asp?pc_id=312C772D71CF467EBA525757BE2FE728" data-parent-name="Brands|DYSON|DYSON NON-GENUINE UPT MISC PARTS" data-key="312C772D71CF467EBA525757BE2FE728"><span class="cat-nm">DYSON NON-GENUINE UPT MISC PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Eureka" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka" data-parent-name="Brands|EUREKA" data-key="33A03B1DF461453D95E0F5A3A55ED137"><span class="cat-nm">EUREKA</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9FFB8C472B5F47008A555D21CDFF0C78" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka|pc_combined_results.asp?pc_id=9FFB8C472B5F47008A555D21CDFF0C78" data-parent-name="Brands|EUREKA|EUR/ELECTROLUX CANISTER MISC. PARTS" data-key="9FFB8C472B5F47008A555D21CDFF0C78"><span class="cat-nm">EUR/ELECTROLUX CANISTER MISC. PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5254A2E4559E4DDE8F6FF4454D69E2F4" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka|pc_combined_results.asp?pc_id=5254A2E4559E4DDE8F6FF4454D69E2F4" data-parent-name="Brands|EUREKA|EUREKA / BISSELL SANITAIRE COMMERCIAL MISC PARTS" data-key="5254A2E4559E4DDE8F6FF4454D69E2F4"><span class="cat-nm">EUREKA / BISSELL SANITAIRE COMMERCIAL MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=3B5BF8DB2AFD4D329EE6BC3D2AC9EE75" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka|pc_combined_results.asp?pc_id=3B5BF8DB2AFD4D329EE6BC3D2AC9EE75" data-parent-name="Brands|EUREKA|EUR/ELECTROLUX FLR MACH MISC PARTS" data-key="3B5BF8DB2AFD4D329EE6BC3D2AC9EE75"><span class="cat-nm">EUR/ELECTROLUX FLR MACH MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=40D520B865184BC5935DBCD1DABB569E" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka|pc_combined_results.asp?pc_id=40D520B865184BC5935DBCD1DABB569E" data-parent-name="Brands|EUREKA|EUR/ELECTROLUX UPRIGHT MISC. PARTS" data-key="40D520B865184BC5935DBCD1DABB569E"><span class="cat-nm">EUR/ELECTROLUX UPRIGHT MISC. PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9CB117DC25D248D2BE69531DB0CC10FB" data-parent-href="/products/BRANDS|/products/BRANDS/Eureka|pc_combined_results.asp?pc_id=9CB117DC25D248D2BE69531DB0CC10FB" data-parent-name="Brands|EUREKA|EUR/ELECTROLUX MISC PARTS" data-key="9CB117DC25D248D2BE69531DB0CC10FB"><span class="cat-nm">EUR/ELECTROLUX MISC PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Fantom" data-parent-href="/products/BRANDS|/products/BRANDS/Fantom" data-parent-name="Brands|FANTOM" data-key="7A5C06B6942A4B42B514116A1A6B9A10"><span class="cat-nm">FANTOM</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Hide-A-Hose" data-parent-href="/products/BRANDS|/products/BRANDS/Hide-A-Hose" data-parent-name="Brands|HIDE-A-HOSE" data-key="C64F91DC889E466E90C516661633BC3D"><span class="cat-nm">HIDE-A-HOSE</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Hoover" data-parent-href="/products/BRANDS|/products/BRANDS/Hoover" data-parent-name="Brands|HOOVER" data-key="8E2CE9EE84B24D4AB7D5D04DA4934779"><span class="cat-nm">HOOVER</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Perfect-Fit-Hoses" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses" data-parent-name="Brands|PERFECT FIT HOSES" data-key="EDC5C8AC506D4FDB9D45E079BB7C79F2"><span class="cat-nm">PERFECT FIT HOSES</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3  link-parent drop"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)" data-key="C63014A712B84100A59A2D806E0C41D7"><span class="cat-nm">HOSE CUFFS (ALL TYPES/SIZES/COLORS)</span></a>
<ul class="prodcat__ul-4">
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=F1F92F2395C34E6E991151ACD6BCE72E" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7|pc_combined_results.asp?pc_id=F1F92F2395C34E6E991151ACD6BCE72E" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)|1-1/4'' HOSE CUFFS" data-key="F1F92F2395C34E6E991151ACD6BCE72E"><span class="cat-nm">1-1/4'' HOSE CUFFS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=DFDE2B1228024363B01BC0B13DCB1A30" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7|pc_combined_results.asp?pc_id=DFDE2B1228024363B01BC0B13DCB1A30" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)|1-3/8'' HOSE CUFFS" data-key="DFDE2B1228024363B01BC0B13DCB1A30"><span class="cat-nm">1-3/8'' HOSE CUFFS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=61F75948D6F14D3E940B5B9FA008EA02" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7|pc_combined_results.asp?pc_id=61F75948D6F14D3E940B5B9FA008EA02" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)|1-1/2'' HOSE CUFFS" data-key="61F75948D6F14D3E940B5B9FA008EA02"><span class="cat-nm">1-1/2'' HOSE CUFFS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=842DE193A4FB4A63BE63E749D8D44927" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7|pc_combined_results.asp?pc_id=842DE193A4FB4A63BE63E749D8D44927" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)|2'' HOSE CUFFS" data-key="842DE193A4FB4A63BE63E749D8D44927"><span class="cat-nm">2'' HOSE CUFFS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=18649FFDCEB7459F81A5C429AEB786E6" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=C63014A712B84100A59A2D806E0C41D7|pc_combined_results.asp?pc_id=18649FFDCEB7459F81A5C429AEB786E6" data-parent-name="Brands|PERFECT FIT HOSES|HOSE CUFFS (ALL TYPES/SIZES/COLORS)|MISC SPECIALTY/OEM/CMRCL CUFFS" data-key="18649FFDCEB7459F81A5C429AEB786E6"><span class="cat-nm">MISC SPECIALTY/OEM/CMRCL CUFFS</span></a></li>
</ul>
</li>
<li class="prodcat__li-3  link-parent drop"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND" data-key="7E422A2C5F754B8EAFA3DE71D07AFCED"><span class="cat-nm">GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND</span></a>
<ul class="prodcat__ul-4">
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=76664E36BFBD45DB8DCB81CC12A59F08" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=76664E36BFBD45DB8DCB81CC12A59F08" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|BISSELL HOSES/ASSEMBLIES" data-key="76664E36BFBD45DB8DCB81CC12A59F08"><span class="cat-nm">BISSELL HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=9E1B60847E0343E49D478A8DFB4B7BD9" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=9E1B60847E0343E49D478A8DFB4B7BD9" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|BOSCH HOSES/ASSEMBLIES" data-key="9E1B60847E0343E49D478A8DFB4B7BD9"><span class="cat-nm">BOSCH HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=CBF1E0C23BFC43E08EC596DECF593964" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=CBF1E0C23BFC43E08EC596DECF593964" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|CLEAN OBSESSED HOSES / ASSYS / PARTS" data-key="CBF1E0C23BFC43E08EC596DECF593964"><span class="cat-nm">CLEAN OBSESSED HOSES / ASSYS / PARTS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=2491547B7424408199B772F32CBB1092" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=2491547B7424408199B772F32CBB1092" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|CLEAN OBSESSED COMM EQUIP HOSE" data-key="2491547B7424408199B772F32CBB1092"><span class="cat-nm">CLEAN OBSESSED COMM EQUIP HOSE</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=85EB3C2149A849338C57A73EA5E565BC" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=85EB3C2149A849338C57A73EA5E565BC" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|DUST CARE HOSES/ASSEMBLIES" data-key="85EB3C2149A849338C57A73EA5E565BC"><span class="cat-nm">DUST CARE HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=4C09B37326AA4CBF8560D1110E6B69D1" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=4C09B37326AA4CBF8560D1110E6B69D1" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|DYSON GENUINE HOSES/ASSEMBLIES" data-key="4C09B37326AA4CBF8560D1110E6B69D1"><span class="cat-nm">DYSON GENUINE HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=2C175D870EEE49E2B288B63F25043028" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=2C175D870EEE49E2B288B63F25043028" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|EUREKA/ELECTROLUX GEN HOSES/ASSY'S" data-key="2C175D870EEE49E2B288B63F25043028"><span class="cat-nm">EUREKA/ELECTROLUX GEN HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=93108FE5DA6040CC8EED3182B367274D" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=93108FE5DA6040CC8EED3182B367274D" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|FILTER QUEEN GEN HOSES/ASSEMBLIES" data-key="93108FE5DA6040CC8EED3182B367274D"><span class="cat-nm">FILTER QUEEN GEN HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=CC74488AEFFE4973BAC8411889D6DB55" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=CC74488AEFFE4973BAC8411889D6DB55" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|HOOVER GENUINE HOSES/ASSEMBLIES" data-key="CC74488AEFFE4973BAC8411889D6DB55"><span class="cat-nm">HOOVER GENUINE HOSES/ASSEMBLIES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=7701A1434F6B429E839D2E4A53BCB47B" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=7701A1434F6B429E839D2E4A53BCB47B" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|HYDROGEN GENUINE HOSE/ASSY'S" data-key="7701A1434F6B429E839D2E4A53BCB47B"><span class="cat-nm">HYDROGEN GENUINE HOSE/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=A80A267FEDDA40238D94BB9787F59D54" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=A80A267FEDDA40238D94BB9787F59D54" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|JOHNNY VAC GENUINE HOSES/ASSY'S" data-key="A80A267FEDDA40238D94BB9787F59D54"><span class="cat-nm">JOHNNY VAC GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=B3893EAA9D3E4507998B9B6A2201BE91" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=B3893EAA9D3E4507998B9B6A2201BE91" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|KIRBY GENUINE HOSES/ASSY'S" data-key="B3893EAA9D3E4507998B9B6A2201BE91"><span class="cat-nm">KIRBY GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=B612B2B31FBE4FD09BC18810B939AB8B" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=B612B2B31FBE4FD09BC18810B939AB8B" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|MISCELLANEOUS GENUINE HOSES/ASSY'S" data-key="B612B2B31FBE4FD09BC18810B939AB8B"><span class="cat-nm">MISCELLANEOUS GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=2FC2DFAB2016431E9C6C55C15F0DE125" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=2FC2DFAB2016431E9C6C55C15F0DE125" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|NUMATIC/NACECARE GEN HOSES/ASSY'S" data-key="2FC2DFAB2016431E9C6C55C15F0DE125"><span class="cat-nm">NUMATIC/NACECARE GEN HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=DEC43E484EC04C3D8FB43DC3DD56BF44" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=DEC43E484EC04C3D8FB43DC3DD56BF44" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|ORECK GENUINE HOSES/ASSY'S" data-key="DEC43E484EC04C3D8FB43DC3DD56BF44"><span class="cat-nm">ORECK GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=FF2C55B99D35454DB7A4C24D742564FB" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=FF2C55B99D35454DB7A4C24D742564FB" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|PANASONIC GENUINE HOSES/ASSY'S (ALSO SEE KENMORE)" data-key="FF2C55B99D35454DB7A4C24D742564FB"><span class="cat-nm">PANASONIC GENUINE HOSES/ASSY'S (ALSO SEE KENMORE)</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=A56EBEF99A56455CA3178206B11A21F8" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=A56EBEF99A56455CA3178206B11A21F8" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|PERFECT GENUINE HOSES/ASSY'S" data-key="A56EBEF99A56455CA3178206B11A21F8"><span class="cat-nm">PERFECT GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=1259CA6295ED405DA9BCE94A3C476A01" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=1259CA6295ED405DA9BCE94A3C476A01" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|PROTEAM GENUINE HOSES/ASSY'S" data-key="1259CA6295ED405DA9BCE94A3C476A01"><span class="cat-nm">PROTEAM GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=26E2B8451C9F4A7E90A3B0B8047ADA77" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=26E2B8451C9F4A7E90A3B0B8047ADA77" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|ROYAL/DIRT DEVIL GEN HOSES/ASSY'S" data-key="26E2B8451C9F4A7E90A3B0B8047ADA77"><span class="cat-nm">ROYAL/DIRT DEVIL GEN HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=05EDF3463AF641F99C3F23CB0F5AA13B" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=05EDF3463AF641F99C3F23CB0F5AA13B" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|REXAIR GENUINE HOSES/ASSY'S" data-key="05EDF3463AF641F99C3F23CB0F5AA13B"><span class="cat-nm">REXAIR GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=81FA62E2513A4B429B01F207838AE27F" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=81FA62E2513A4B429B01F207838AE27F" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|SEBO GENUINE HOSES/HOSE PARTS" data-key="81FA62E2513A4B429B01F207838AE27F"><span class="cat-nm">SEBO GENUINE HOSES/HOSE PARTS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=6CBA69977AC24223BECF06849FA1CA43" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=6CBA69977AC24223BECF06849FA1CA43" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|SHOP VAC GENUINE HOSES/ASSY'S" data-key="6CBA69977AC24223BECF06849FA1CA43"><span class="cat-nm">SHOP VAC GENUINE HOSES/ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=E8D8D2843B0A4BEB8EED769400D2CAEC" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=7E422A2C5F754B8EAFA3DE71D07AFCED|pc_combined_results.asp?pc_id=E8D8D2843B0A4BEB8EED769400D2CAEC" data-parent-name="Brands|PERFECT FIT HOSES|GEN PORTABLE &amp; CMCRL HOSES/ASSYS BY BRAND|WESSEL WERK GENUINE RETRO HOSE" data-key="E8D8D2843B0A4BEB8EED769400D2CAEC"><span class="cat-nm">WESSEL WERK GENUINE RETRO HOSE</span></a></li>
</ul>
</li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=758C42CF0DB54543A97DEF89B75D3C0C" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=758C42CF0DB54543A97DEF89B75D3C0C" data-parent-name="Brands|PERFECT FIT HOSES|MISC HOSE ENDS/ADAPTERS" data-key="758C42CF0DB54543A97DEF89B75D3C0C"><span class="cat-nm">MISC HOSE ENDS/ADAPTERS</span></a></li>
<li class="prodcat__li-3  link-parent drop"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND" data-key="E7ECF0A3225F4AA69550151E39860A99"><span class="cat-nm">NON-GENUINE HOSES/ASSYS BY BRAND</span></a>
<ul class="prodcat__ul-4">
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=3D855B1BFE0E44B29E046FB65C036653" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=3D855B1BFE0E44B29E046FB65C036653" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|COMPACT NON-GENUINE HOSE ASSYS" data-key="3D855B1BFE0E44B29E046FB65C036653"><span class="cat-nm">COMPACT NON-GENUINE HOSE ASSYS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=6029BCD7C6804569B7B51C49AC758625" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=6029BCD7C6804569B7B51C49AC758625" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|DYSON NON-GENUINE HOSE ASSY" data-key="6029BCD7C6804569B7B51C49AC758625"><span class="cat-nm">DYSON NON-GENUINE HOSE ASSY</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=069D9ED2FF674C8B84B29BD49F112F80" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=069D9ED2FF674C8B84B29BD49F112F80" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|EUREKA/ELECTROLUX REPL HOSE ASSY" data-key="069D9ED2FF674C8B84B29BD49F112F80"><span class="cat-nm">EUREKA/ELECTROLUX REPL HOSE ASSY</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=D0B7A575836346EF963C7AE997B17B98" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=D0B7A575836346EF963C7AE997B17B98" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|FILTER QUEEN NON-GENUINE HOSE ASSYS" data-key="D0B7A575836346EF963C7AE997B17B98"><span class="cat-nm">FILTER QUEEN NON-GENUINE HOSE ASSYS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=A020EDBC967C473AB3EDD3E7C025832E" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=A020EDBC967C473AB3EDD3E7C025832E" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|HOOVER NON-GENUINE HOSE ASSY'S" data-key="A020EDBC967C473AB3EDD3E7C025832E"><span class="cat-nm">HOOVER NON-GENUINE HOSE ASSY'S</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=C88D5A01B7A040F49C6C74408987FF9B" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=C88D5A01B7A040F49C6C74408987FF9B" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|MIELE NON GENUINE HOSES / HOSE PARTS" data-key="C88D5A01B7A040F49C6C74408987FF9B"><span class="cat-nm">MIELE NON GENUINE HOSES / HOSE PARTS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=B47FB3EEAF584647B2EEDF0CBD59DEE5" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=B47FB3EEAF584647B2EEDF0CBD59DEE5" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|MISCELLANEOUS NON-GENUINE HOSE ASSYS / PARTS" data-key="B47FB3EEAF584647B2EEDF0CBD59DEE5"><span class="cat-nm">MISCELLANEOUS NON-GENUINE HOSE ASSYS / PARTS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=48BF77CCA0A54121806BA9FE8D820079" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=48BF77CCA0A54121806BA9FE8D820079" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|ORECK NON-GENUINE HOSES" data-key="48BF77CCA0A54121806BA9FE8D820079"><span class="cat-nm">ORECK NON-GENUINE HOSES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=3A1B40E283AA450F828717BD605BDB20" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=3A1B40E283AA450F828717BD605BDB20" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|REXAIR NON-GENUINE HOSE ASSYS / PARTS" data-key="3A1B40E283AA450F828717BD605BDB20"><span class="cat-nm">REXAIR NON-GENUINE HOSE ASSYS / PARTS</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=54A693428E0C48308D1998D7B0A1340B" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=54A693428E0C48308D1998D7B0A1340B" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|SEBO NON-GENUINE HOSES" data-key="54A693428E0C48308D1998D7B0A1340B"><span class="cat-nm">SEBO NON-GENUINE HOSES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=A046FB8D66FC426CBC70FEA1510C0D0A" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=A046FB8D66FC426CBC70FEA1510C0D0A" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|SHARK NON-GENUINE HOSES" data-key="A046FB8D66FC426CBC70FEA1510C0D0A"><span class="cat-nm">SHARK NON-GENUINE HOSES</span></a></li>
<li class="prodcat__li-4"><a class="prodcat__a-4" href="pc_combined_results.asp?pc_id=527C02F5022A4DF99B7AFA65B1202EAF" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect-Fit-Hoses|pc_combined_results.asp?pc_id=E7ECF0A3225F4AA69550151E39860A99|pc_combined_results.asp?pc_id=527C02F5022A4DF99B7AFA65B1202EAF" data-parent-name="Brands|PERFECT FIT HOSES|NON-GENUINE HOSES/ASSYS BY BRAND|SHOP VAC NON-GENUINE HOSE ASS'Y" data-key="527C02F5022A4DF99B7AFA65B1202EAF"><span class="cat-nm">SHOP VAC NON-GENUINE HOSE ASS'Y</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Johnny-Vac" data-parent-href="/products/BRANDS|/products/BRANDS/Johnny-Vac" data-parent-name="Brands|JOHNNY VAC" data-key="568F5CDF3E86491081282898A78DE21D"><span class="cat-nm">JOHNNY VAC</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Kenmore" data-parent-href="/products/BRANDS|/products/BRANDS/Kenmore" data-parent-name="Brands|KENMORE" data-key="A74F9EAD8B114230A7ECA4B63EF7B2EF"><span class="cat-nm">KENMORE</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Kirby" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby" data-parent-name="Brands|KIRBY" data-key="0552A1CB803A4172B045C55AB77451CA"><span class="cat-nm">KIRBY</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=244B9C9789424C39AFCC0C13029610AD" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=244B9C9789424C39AFCC0C13029610AD" data-parent-name="Brands|KIRBY|KIRBY 513 THRU D80 MISC PARTS" data-key="244B9C9789424C39AFCC0C13029610AD"><span class="cat-nm">KIRBY 513 THRU D80 MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E54F2255F643435ABD5509D65B730AAA" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=E54F2255F643435ABD5509D65B730AAA" data-parent-name="Brands|KIRBY|KIRBY CLASSIC MISC PARTS" data-key="E54F2255F643435ABD5509D65B730AAA"><span class="cat-nm">KIRBY CLASSIC MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=EB714CD0F308476DBF0BB1D3A11E681C" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=EB714CD0F308476DBF0BB1D3A11E681C" data-parent-name="Brands|KIRBY|KIRBY GENERATION 3-6 MISC PARTS" data-key="EB714CD0F308476DBF0BB1D3A11E681C"><span class="cat-nm">KIRBY GENERATION 3-6 MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DE6FD1154EDB4AB79858906706D49BB6" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=DE6FD1154EDB4AB79858906706D49BB6" data-parent-name="Brands|KIRBY|KIRBY HERITAGE/II MISC PARTS" data-key="DE6FD1154EDB4AB79858906706D49BB6"><span class="cat-nm">KIRBY HERITAGE/II MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=DD036F7755FA452FA5A3F2CA7AED49B6" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=DD036F7755FA452FA5A3F2CA7AED49B6" data-parent-name="Brands|KIRBY|KIRBY AVALIR MISC PARTS" data-key="DD036F7755FA452FA5A3F2CA7AED49B6"><span class="cat-nm">KIRBY AVALIR MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0FB52D3494564667BC7FF50BF51F73E9" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=0FB52D3494564667BC7FF50BF51F73E9" data-parent-name="Brands|KIRBY|KIRBY LEGEND II MISC PARTS" data-key="0FB52D3494564667BC7FF50BF51F73E9"><span class="cat-nm">KIRBY LEGEND II MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=66134B99000B4E75A1D181CBB836F189" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=66134B99000B4E75A1D181CBB836F189" data-parent-name="Brands|KIRBY|KIRBY SENTRIA / AVILIR MISC PARTS" data-key="66134B99000B4E75A1D181CBB836F189"><span class="cat-nm">KIRBY SENTRIA / AVILIR MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=700181E2945345748BEB0EB37AFED2B9" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=700181E2945345748BEB0EB37AFED2B9" data-parent-name="Brands|KIRBY|KIRBY TRADITION MISC PARTS" data-key="700181E2945345748BEB0EB37AFED2B9"><span class="cat-nm">KIRBY TRADITION MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=5842D64C5B0942DF9607203712D30926" data-parent-href="/products/BRANDS|/products/BRANDS/Kirby|pc_combined_results.asp?pc_id=5842D64C5B0942DF9607203712D30926" data-parent-name="Brands|KIRBY|KIRBY ULTIMATE G/DIAMOND MISC PARTS" data-key="5842D64C5B0942DF9607203712D30926"><span class="cat-nm">KIRBY ULTIMATE G/DIAMOND MISC PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Koblenz" data-parent-href="/products/BRANDS|/products/BRANDS/Koblenz" data-parent-name="Brands|KOBLENZ" data-key="44AF2D92425049A693425DF0EE3F5F9B"><span class="cat-nm">KOBLENZ</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Mastercraft" data-parent-href="/products/BRANDS|/products/BRANDS/Mastercraft" data-parent-name="Brands|MASTERCRAFT" data-key="DD995B9BA6DE41F78405305E1B45E330"><span class="cat-nm">MASTERCRAFT</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Miele" data-parent-href="/products/BRANDS|/products/BRANDS/Miele" data-parent-name="Brands|MIELE" data-key="0682B4B522FF4BDE9AD0EC786A4297BE"><span class="cat-nm">MIELE</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CAA1B0F8DDE544EFA795C6E7A02BBB06" data-parent-href="/products/BRANDS|/products/BRANDS/Miele|pc_combined_results.asp?pc_id=CAA1B0F8DDE544EFA795C6E7A02BBB06" data-parent-name="Brands|MIELE|MIELE NON-GENUINE MISC. PARTS" data-key="CAA1B0F8DDE544EFA795C6E7A02BBB06"><span class="cat-nm">MIELE NON-GENUINE MISC. PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/NSS" data-parent-href="/products/BRANDS|/products/BRANDS/NSS" data-parent-name="Brands|NSS" data-key="853D49E626F44A1FBC61D9BBB64A8ACB"><span class="cat-nm">NSS</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Oreck" data-parent-href="/products/BRANDS|/products/BRANDS/Oreck" data-parent-name="Brands|ORECK" data-key="F6927948873E486BBF11B46C9377CE0C"><span class="cat-nm">ORECK</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=BC2E15731F3F4D51B2745DB3E212AE98" data-parent-href="/products/BRANDS|/products/BRANDS/Oreck|pc_combined_results.asp?pc_id=BC2E15731F3F4D51B2745DB3E212AE98" data-parent-name="Brands|ORECK|ORECK MISC CANISTER PARTS" data-key="BC2E15731F3F4D51B2745DB3E212AE98"><span class="cat-nm">ORECK MISC CANISTER PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0CAF18AE50514780AA8DBD655BA10605" data-parent-href="/products/BRANDS|/products/BRANDS/Oreck|pc_combined_results.asp?pc_id=0CAF18AE50514780AA8DBD655BA10605" data-parent-name="Brands|ORECK|ORECK MISC FLOOR MACH PARTS" data-key="0CAF18AE50514780AA8DBD655BA10605"><span class="cat-nm">ORECK MISC FLOOR MACH PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9611879AFD9A4F56971CC9A2C959902B" data-parent-href="/products/BRANDS|/products/BRANDS/Oreck|pc_combined_results.asp?pc_id=9611879AFD9A4F56971CC9A2C959902B" data-parent-name="Brands|ORECK|ORECK MISC UPRIGHT PARTS" data-key="9611879AFD9A4F56971CC9A2C959902B"><span class="cat-nm">ORECK MISC UPRIGHT PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Panasonic" data-parent-href="/products/BRANDS|/products/BRANDS/Panasonic" data-parent-name="Brands|PANASONIC" data-key="040FFEDAFF2B41D48B0BEF5CBB49F10F"><span class="cat-nm">PANASONIC</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D8F01F10CC564509824FD72FB33BDEB2" data-parent-href="/products/BRANDS|/products/BRANDS/Panasonic|pc_combined_results.asp?pc_id=D8F01F10CC564509824FD72FB33BDEB2" data-parent-name="Brands|PANASONIC|PANASONIC GEN COMMERCIAL MISC PARTS" data-key="D8F01F10CC564509824FD72FB33BDEB2"><span class="cat-nm">PANASONIC GEN COMMERCIAL MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=8004C8F4A0444E9B9C647F8CB0CEE2FF" data-parent-href="/products/BRANDS|/products/BRANDS/Panasonic|pc_combined_results.asp?pc_id=8004C8F4A0444E9B9C647F8CB0CEE2FF" data-parent-name="Brands|PANASONIC|PANASONIC GENUINE MISC CANISTER PARTS" data-key="8004C8F4A0444E9B9C647F8CB0CEE2FF"><span class="cat-nm">PANASONIC GENUINE MISC CANISTER PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E8A1FD5B4534402589F20BFA1F440C47" data-parent-href="/products/BRANDS|/products/BRANDS/Panasonic|pc_combined_results.asp?pc_id=E8A1FD5B4534402589F20BFA1F440C47" data-parent-name="Brands|PANASONIC|PANASONIC GENUINE MISC UPRIGHT PARTS" data-key="E8A1FD5B4534402589F20BFA1F440C47"><span class="cat-nm">PANASONIC GENUINE MISC UPRIGHT PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0E76E41656304FB9A410E406E13E467D" data-parent-href="/products/BRANDS|/products/BRANDS/Panasonic|pc_combined_results.asp?pc_id=0E76E41656304FB9A410E406E13E467D" data-parent-name="Brands|PANASONIC|PANASONIC MISC PARTS" data-key="0E76E41656304FB9A410E406E13E467D"><span class="cat-nm">PANASONIC MISC PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Perfect" data-parent-href="/products/BRANDS|/products/BRANDS/Perfect" data-parent-name="Brands|PERFECT" data-key="36B87A079EBB4D93AED3AB34939F1877"><span class="cat-nm">PERFECT</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Proteam" data-parent-href="/products/BRANDS|/products/BRANDS/Proteam" data-parent-name="Brands|PROTEAM" data-key="6F7C2EB2C455448B92699837905936A4"><span class="cat-nm">PROTEAM</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=206B07F69CA24A669AC174CE29ED08FE" data-parent-href="/products/BRANDS|/products/BRANDS/Proteam|pc_combined_results.asp?pc_id=206B07F69CA24A669AC174CE29ED08FE" data-parent-name="Brands|PROTEAM|PROTEAM MISCELLANEOUS BACKPAK PARTS" data-key="206B07F69CA24A669AC174CE29ED08FE"><span class="cat-nm">PROTEAM MISCELLANEOUS BACKPAK PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=D62C8E4BC7014C3282AC1E0004883A78" data-parent-href="/products/BRANDS|/products/BRANDS/Proteam|pc_combined_results.asp?pc_id=D62C8E4BC7014C3282AC1E0004883A78" data-parent-name="Brands|PROTEAM|PROTEAM MISCELLANEOUS UPRIGHT PARTS" data-key="D62C8E4BC7014C3282AC1E0004883A78"><span class="cat-nm">PROTEAM MISCELLANEOUS UPRIGHT PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=FAC65FCE14754B67971297ADB4BE75F2" data-parent-href="/products/BRANDS|/products/BRANDS/Proteam|pc_combined_results.asp?pc_id=FAC65FCE14754B67971297ADB4BE75F2" data-parent-name="Brands|PROTEAM|PROTEAM WET DRY MISCELLANEOUS PARTS" data-key="FAC65FCE14754B67971297ADB4BE75F2"><span class="cat-nm">PROTEAM WET DRY MISCELLANEOUS PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Rexair" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair" data-parent-name="Brands|REXAIR" data-key="0E5DAB251D634624BE645EB4FAB030EA"><span class="cat-nm">REXAIR</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=947A711B47CF421C83079EB5DB9C4DA6" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair|pc_combined_results.asp?pc_id=947A711B47CF421C83079EB5DB9C4DA6" data-parent-name="Brands|REXAIR|REXAIR AQUAMATE PARTS" data-key="947A711B47CF421C83079EB5DB9C4DA6"><span class="cat-nm">REXAIR AQUAMATE PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2FBC20D3AF2A4DCB81B9491DB82A2D8F" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair|pc_combined_results.asp?pc_id=2FBC20D3AF2A4DCB81B9491DB82A2D8F" data-parent-name="Brands|REXAIR|REXAIR MODEL D4 COMPONENTS" data-key="2FBC20D3AF2A4DCB81B9491DB82A2D8F"><span class="cat-nm">REXAIR MODEL D4 COMPONENTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=77F3874563904203BEBBF96CB7B272DB" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair|pc_combined_results.asp?pc_id=77F3874563904203BEBBF96CB7B272DB" data-parent-name="Brands|REXAIR|REXAIR MODEL E COMPONENTS" data-key="77F3874563904203BEBBF96CB7B272DB"><span class="cat-nm">REXAIR MODEL E COMPONENTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E487CE1398274EC1844A5C7AE96D1966" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair|pc_combined_results.asp?pc_id=E487CE1398274EC1844A5C7AE96D1966" data-parent-name="Brands|REXAIR|REXAIR MODEL E2 COMPONENTS" data-key="E487CE1398274EC1844A5C7AE96D1966"><span class="cat-nm">REXAIR MODEL E2 COMPONENTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=9449A7C191634B8081CE70EA015AFC49" data-parent-href="/products/BRANDS|/products/BRANDS/Rexair|pc_combined_results.asp?pc_id=9449A7C191634B8081CE70EA015AFC49" data-parent-name="Brands|REXAIR|REXAIR NON-GENUINE MISCELLANEOUS PARTS" data-key="9449A7C191634B8081CE70EA015AFC49"><span class="cat-nm">REXAIR NON-GENUINE MISCELLANEOUS PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Riccar" data-parent-href="/products/BRANDS|/products/BRANDS/Riccar" data-parent-name="Brands|RICCAR" data-key="A79248C3D714418EB5C191E58AD2C73F"><span class="cat-nm">RICCAR</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Royal-Hako" data-parent-href="/products/BRANDS|/products/BRANDS/Royal-Hako" data-parent-name="Brands|ROYAL/HAKO" data-key="1AE25472CE214C269F5F38C8BE116A68"><span class="cat-nm">ROYAL/HAKO</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Sanitaire" data-parent-href="/products/BRANDS|/products/BRANDS/Sanitaire" data-parent-name="Brands|SANITAIRE" data-key="AEB18034E5FC4330A30B6653CDDE02A9"><span class="cat-nm">SANITAIRE</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Samsung" data-parent-href="/products/BRANDS|/products/BRANDS/Samsung" data-parent-name="Brands|SAMSUNG" data-key="9D35337134CF48C9B24B8331B6FBE5BF"><span class="cat-nm">SAMSUNG</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Sanyo" data-parent-href="/products/BRANDS|/products/BRANDS/Sanyo" data-parent-name="Brands|SANYO" data-key="1F49B4BB486A4F2A93A4983276374476"><span class="cat-nm">SANYO</span></a></li>
<li class="prodcat__li-2  link-parent drop"><a class="prodcat__a-2" href="products/BRANDS/Sebo" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo" data-parent-name="Brands|SEBO" data-key="549A60BC31DC48A4A55F1F190580E338"><span class="cat-nm">SEBO</span></a>
<ul class="prodcat__ul-3">
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=92DF5BFFF94140798193BD3DD9833202" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=92DF5BFFF94140798193BD3DD9833202" data-parent-name="Brands|SEBO|SEBO 370 COMFORT &amp; ELECTRONIC &amp; 350 MECHANICALUPT MISC PARTS" data-key="92DF5BFFF94140798193BD3DD9833202"><span class="cat-nm">SEBO 370 COMFORT &amp; ELECTRONIC &amp; 350 MECHANICALUPT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=29157CAE9C8C453F8CC4CD65DFB9FD7F" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=29157CAE9C8C453F8CC4CD65DFB9FD7F" data-parent-name="Brands|SEBO|SEBO C2.1 &amp; C3.1 CAN MISC PARTS" data-key="29157CAE9C8C453F8CC4CD65DFB9FD7F"><span class="cat-nm">SEBO C2.1 &amp; C3.1 CAN MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=C1B5EAD5DD99443ABD060319300C2FA3" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=C1B5EAD5DD99443ABD060319300C2FA3" data-parent-name="Brands|SEBO|SEBO D1 &amp; D4 CAN MISC PARTS" data-key="C1B5EAD5DD99443ABD060319300C2FA3"><span class="cat-nm">SEBO D1 &amp; D4 CAN MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=E01980B4CA2B40F4ABF1ED2462187EE9" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=E01980B4CA2B40F4ABF1ED2462187EE9" data-parent-name="Brands|SEBO|SEBO E SERIES CAN MISC PARTS" data-key="E01980B4CA2B40F4ABF1ED2462187EE9"><span class="cat-nm">SEBO E SERIES CAN MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=2F1523CE6DA143B6B824971B8EA0E543" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=2F1523CE6DA143B6B824971B8EA0E543" data-parent-name="Brands|SEBO|SEBO ESSENTIAL G SERIES UPRIGHT MISC PARTS" data-key="2F1523CE6DA143B6B824971B8EA0E543"><span class="cat-nm">SEBO ESSENTIAL G SERIES UPRIGHT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=0829761B6DF34FE3B371DCE5D3D905B3" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=0829761B6DF34FE3B371DCE5D3D905B3" data-parent-name="Brands|SEBO|SEBO FELIX UPT MISC PARTS" data-key="0829761B6DF34FE3B371DCE5D3D905B3"><span class="cat-nm">SEBO FELIX UPT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=64DC2A52EFE74021819828F275B5142B" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=64DC2A52EFE74021819828F275B5142B" data-parent-name="Brands|SEBO|SEBO K2 &amp; K3 CAN MISC PARTS" data-key="64DC2A52EFE74021819828F275B5142B"><span class="cat-nm">SEBO K2 &amp; K3 CAN MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CD4B6305556A449DB1E88E36615AE3CD" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=CD4B6305556A449DB1E88E36615AE3CD" data-parent-name="Brands|SEBO|SEBO X1, X2, X4, X5 UPT MISC PARTS" data-key="CD4B6305556A449DB1E88E36615AE3CD"><span class="cat-nm">SEBO X1, X2, X4, X5 UPT MISC PARTS</span></a></li>
<li class="prodcat__li-3"><a class="prodcat__a-3" href="pc_combined_results.asp?pc_id=CE5B60CE5A6C438CA9615788DDFA9102" data-parent-href="/products/BRANDS|/products/BRANDS/Sebo|pc_combined_results.asp?pc_id=CE5B60CE5A6C438CA9615788DDFA9102" data-parent-name="Brands|SEBO|SEBO DUO MISC PARTS" data-key="CE5B60CE5A6C438CA9615788DDFA9102"><span class="cat-nm">SEBO DUO MISC PARTS</span></a></li>
</ul>
</li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Sharp" data-parent-href="/products/BRANDS|/products/BRANDS/Sharp" data-parent-name="Brands|SHARP" data-key="7FDBA7AAA83A4F6DB86B35CF525C908D"><span class="cat-nm">SHARP</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Simplicity" data-parent-href="/products/BRANDS|/products/BRANDS/Simplicity" data-parent-name="Brands|SIMPLICITY" data-key="193CC3AB8A2140DEA4133A03B5F5E484"><span class="cat-nm">SIMPLICITY</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Vacumaid" data-parent-href="/products/BRANDS|/products/BRANDS/Vacumaid" data-parent-name="Brands|VACUMAID" data-key="56E1F96E50A0481D8F21054C7733AA94"><span class="cat-nm">VACUMAID</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Vapamore" data-parent-href="/products/BRANDS|/products/BRANDS/Vapamore" data-parent-name="Brands|VAPAMORE" data-key="739AECDB582F4F96B5080773450249D1"><span class="cat-nm">VAPAMORE</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Wessel-Werk" data-parent-href="/products/BRANDS|/products/BRANDS/Wessel-Werk" data-parent-name="Brands|WESSEL-WERK" data-key="2EC723DA45CC43CA8725C7504AA2F5B0"><span class="cat-nm">WESSEL-WERK</span></a></li>
<li class="prodcat__li-2"><a class="prodcat__a-2" href="products/BRANDS/Windsor" data-parent-href="/products/BRANDS|/products/BRANDS/Windsor" data-parent-name="Brands|WINDSOR" data-key="40E8B5151DEB4B2F9851990B69A04C6F"><span class="cat-nm">WINDSOR</span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul id="retail-topbar-left-menu-signin" class="header__prodcat linkset click-persist appended-menu-items">
<li class="" data-key="5E0B5889E10E47028CE33AC69C40D3DC"><a class="retail-topbar-left-menu__a-1" href="https://descovacuum.cimstaging.com/pc_combined_results.asp">Product Search</a></li>
<li class="" data-key="97CEF4A5B4A94613996744AA4BAD8B18"><a class="retail-topbar-left-menu__a-1" href="Schematics">Schematics</a></li>
<li class="" data-key="2FA7F2D8797640DC9D47653396A48462"><a class="retail-topbar-left-menu__a-1" href="resourcecenter.asp">Info Center</a></li>
<li class="link-parent drop" data-key="67CD3978D3A5471589F3A40B6C9378C5"><a class="retail-topbar-left-menu__a-1" href="#">About</a>
<ul class="retail-topbar-left-menu__ul-2">
<li class="" data-key="85BAA44D0A1F4D1AB5FE82FCD6BA0FAC"><a class="retail-topbar-left-menu__a-2" href="about">About Us</a></li>
<li class="" data-key="E4ECE02AF2C74516BD78B8A2ECFB6413"><a class="retail-topbar-left-menu__a-2" href="contact_us.asp">Contact</a></li>
</ul>
</li>
</ul>
<ul id="header__user-menu" class="header__user-menu linkset click-persist js-click-outside-to-close">
<li class="link-parent drop"><a id="header__user-menu__toggle" class="header__user-menu__toggle" href="https://descovacuum.cimstaging.com/my_account.asp"> <span class="app-userinfo"> <i class="icon-user"></i> <span class="hidden-xs">My </span>Account </span> </a>
<ul id="retail-user-nav" class="retail-user-nav retail-user-nav__ul-1">
<li class="retail-user-nav__li-1" data-key="EAB56E598E534DE2B6F017BAB8D7F863"><a class="retail-user-nav__a-1" href="favorites_lists.asp">Favorite Lists</a></li>
<li class="retail-user-nav__li-1" data-key="49EB6B14213F432380BAE28976DB5412"><a class="retail-user-nav__a-1" href="bulk_atc.asp">Bulk Order</a></li>
<li class="retail-user-nav__li-1" data-key="7ED849BF026D434680AC70428B20AB97"><a class="retail-user-nav__a-1" href="sales_orders.asp">Order History</a></li>
<li class="retail-user-nav__li-1" data-key="AF00E8131D7B4732A4BD54C4080106E7"><a class="retail-user-nav__a-1" href="shipments.asp">Shipments</a></li>
<li class="retail-user-nav__li-1" data-key="8DECB557F92A40E183475CE88DD6A66E"><a class="retail-user-nav__a-1" href="my_addresses.asp">Address Book</a></li>
<li class="retail-user-nav__li-1" data-key="DD742444537841CE81B907ABA43D88EF"><a class="retail-user-nav__a-1" href="dashboard.asp">Account Overview</a></li>
</ul>
</li>
</ul>
<ul id="header__cart-preview" class="header__cart-preview linkset click-persist js-click-outside-to-close">
<li class="link-parent drop"><a class="header__cart-preview__toggle" href="#0"> <i class="icon-shopping-cart"></i> <span class="hidden-xs hidden-sm">My</span> Cart <span class="cart_window_qty badge" id="cart_window_qty">0</span> </a>
<ul>
<li id="cart_window_incl" class="app-minicart">
<div id="cart_window" class="cart-preview cart_window">
<div class="cart-empty-text muted">Your shopping cart is empty.</div>
<div class="controls"><a class="btn btn-block btn-primary view-cart-button" href="showcart.asp"> <i class="icon-shopping-cart"></i> View &amp; Edit Cart </a></div>
</div>
<!-- /#cart_window --></li>
</ul>
</li>
</ul>
</nav></div>
</div>
<div class="header__hero-search">
<div class="header__hero-search__wrap">
<div class="header__hero-search__container">
<h2 class="header__hero-search__header">Search Our Products</h2>
<form id="frmUnivSearch" class="u-search-form control-group" action="" method="post"><span class="u-search-group u-search-text"> <input id="u_search_text" class="input-search" spellcheck="false" autocomplete="off" name="u_search_text" type="text" value="" placeholder="Search..." aria-label="Search Text" /> </span> <span class="u-search-group u-search-droplist"><select id="u_search_type" class=" hide" name="u_search_type" aria-label="Search Type">
<option value="pc_combined_results.asp?search_prod=((searchlike~p.sku~&lt;keyword&gt;|Or|searchlike~p.nm~&lt;keyword&gt;|Or|searchlike~p.child_skus~&lt;keyword&gt;|Or|searchlike~p.child_nms~&lt;keyword&gt;|Or|searchlike~p.ds~&lt;keyword&gt;|Or|searchlike~p.search_terms~&lt;keyword&gt;|Or|searchlike~p.searchfield1~&lt;keyword&gt;|Or|searchlike~p.searchfield5~&lt;keyword&gt;)|Or|searchlike~p.child_rollup_search_terms~&lt;keyword&gt;|Or|searchlike~p.search_terms~&lt;keyword&gt;)&amp;search_keyword=&lt;keyword&gt;&amp;ddtloaded=1">Products</option>
<option value="sales_orders.asp?search2=(searchlike~order_date~&lt;keyword&gt;|OR|searchlike~eosoh.order_number~&lt;keyword&gt;|OR|searchlike~eosoh.status~&lt;keyword&gt;|OR|searchlike~grand_total~&lt;keyword&gt;|OR|searchlike~po_number~&lt;keyword&gt;|OR|searchlike~expected_ship_date~&lt;keyword&gt;)&amp;s=&lt;keyword&gt;&amp;sfield=searchall&amp;ddtloaded=1">Orders</option>
<option value="backorders.asp?eosoh.order_date_date_from=&amp;eosoh.order_date_date_to=&amp;group=&amp;s=&lt;keyword&gt;&amp;sfield=searchall&amp;rpp=50&amp;ddtloaded=1&amp;pagesize=50&amp;search2=((searchlike~p.nm~&lt;keyword&gt;%7COR%7Csearchlike~p.sku~&lt;keyword&gt;%7COR%7Csearchlike~eosoh.order_number~&lt;keyword&gt;%7COR%7Csearchlike~eosoh.po_number~&lt;keyword&gt;%7COR%7Csearchlike~eosod.qty_backordered~&lt;keyword&gt;%7COR%7Csearchlike~eosod.unit_price~&lt;keyword&gt;))&amp;page=1&amp;ddt=1&amp;ddtloaded=1">Backorders</option>
<option value="shipments.asp?ship_date_date_from=&amp;ship_date_date_to=&amp;group=&amp;s=&lt;keyword&gt;&amp;sfield=searchall&amp;rpp=50&amp;ddtloaded=1&amp;pagesize=50&amp;search2=((searchlike~ship_date~&lt;keyword&gt;%7COR%7Csearchlike~eos.ship_via~&lt;keyword&gt;%7COR%7Csearchlike~eos.tracking_num~&lt;keyword&gt;%7COR%7Csearchlike~eos.sales_order_number~&lt;keyword&gt;%7COR%7Csearchlike~eoih.ref_id~&lt;keyword&gt;%7COR%7Csearchlike~eosoh.po_number~&lt;keyword&gt;%7COR%7Csearchlike~eos.notes~&lt;keyword&gt;))&amp;page=1&amp;ddt=1">Shipments</option>
<option value="invoices.asp?search2=(searchlike~eoih.ref_id~&lt;keyword&gt;|OR|searchlike~invoice_date~&lt;keyword&gt;|OR|searchlike~eoih.status~&lt;keyword&gt;|OR|searchlike~eoih.po_number~&lt;keyword&gt;|OR|searchlike~eoih.sales_order_number~&lt;keyword&gt;|OR|searchlike~invoice_due~&lt;keyword&gt;)&amp;s=&lt;keyword&gt;&amp;sfield=searchall&amp;ddtloaded=1">Invoices</option>
<option value="my_addresses.asp?s=&lt;keyword&gt;&amp;sfield=searchall&amp;rpp=50&amp;ddtloaded=1&amp;pagesize=50&amp;search2=((searchlike~sha.nm~&lt;keyword&gt;%7COR%7Csearchlike~sha.s_add1~&lt;keyword&gt;%7COR%7Csearchlike~sha.s_city~&lt;keyword&gt;%7COR%7Csearchlike~sha.s_state~&lt;keyword&gt;%7COR%7Csearchlike~sha.s_zip~&lt;keyword&gt;%7COR%7Csearchlike~sha.s_country~&lt;keyword&gt;))&amp;page=1&amp;ddt=1&amp;ddtloaded=1">Addresses</option>
<option value="payments.asp?sortby=date_received&amp;sortorder=desc&amp;s=&lt;keyword&gt;&amp;sfield=searchall&amp;pagesize=100&amp;search2=((searchlike~date_received~&lt;keyword&gt;|OR|searchlike~eop.invoice_number~&lt;keyword&gt;|OR|searchlike~amount~&lt;keyword&gt;|OR|searchlike~payment_type~&lt;keyword&gt;|OR|searchlike~reference_info~&lt;keyword&gt;))&amp;ddtloaded=1">Payments</option>
<option value="product_stock_ddt.asp?s=&lt;keyword&gt;&amp;sfield=searchall&amp;search2=((searchlike~p.nm~&lt;keyword&gt;%7COR%7Csearchlike~p.sku~&lt;keyword&gt;%7COR%7Csearchlike~p.retail_price~&lt;keyword&gt;))">Price List</option>
<option value="favorites_lists.asp?s=&lt;keyword&gt;&amp;sfield=searchall&amp;search2=((searchlike~fl.nm~&lt;keyword&gt;))&amp;ddtloaded=1">Favorite Lists</option>
</select></span> <span class="u-search-group u-search-btn"> <button id="u_search_submit" class="btn btn-primary header__search__button" name="u_search_submit" type="submit" aria-label="Search"> <i class="icon-search"></i> </button> </span><input id="search_tip_url" name="search_tip_url" type="hidden" value="" /></form></div>
</div>
</div>
</header>
<div id="home-description" class="home-description">
<div class="container-fluid"><!-- Home Description (Generic) -->
<div class="product-search"><form><label>Popular Parts By Model</label><select name="brand">
<option>Select Brand</option>
</select><select name="model">
<option>Select Model</option>
</select><button id="product_search_submit" class="btn btn-primary submit" name="product_search_submit" type="submit"> Search </button></form></div>
</div>
<div id="landing-page-main">
<div id="home-cat-tiles" class="home-cat-tiles">
<div class="container-fluid">
<div class="row-fluid"><!-- Home Categories (Generic) -->
<div class="home-cat-tiles__wrap">
<div class="home-cat-tiles__col home-cat-tiles__col1">
<div class="home-cat-tiles__tile tile-1">
<div class="tile-bg tile-bg-1" style="background-image: url('images/blue-box-6.jpg');">&nbsp;</div>
<a href="pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE">
<h3>All Things Centralsss Vac</h3>
</a></div>
<div class="home-cat-tiles__2col-wrap">
<div class="home-cat-tiles__tile tile-2">
<div class="tile-bg tile-bg-2" style="background-image: url('images/blue-box-3.jpg');">&nbsp;</div>
<a href="my_account.asp">
<h3>My Account</h3>
</a></div>
<div class="home-cat-tiles__tile tile-3">
<div class="tile-bg tile-bg-3" style="background-image: url('images/blue-box-5.jpg');">&nbsp;</div>
<a href="sales_orders.asp">
<h3>My Orders</h3>
</a></div>
</div>
</div>
<div class="home-cat-tiles__col home-cat-tiles__col2">
<div class="home-cat-tiles__tile tile-4">
<div class="tile-bg tile-bg-4" style="background-image: url('images/blue-box-4.jpg');">&nbsp;</div>
<a href="#">
<h3>Clean Obsessed Branded Products</h3>
</a></div>
<div class="home-cat-tiles__2col-wrap">
<div class="home-cat-tiles__tile tile-5">
<div class="tile-bg tile-bg-5" style="background-image: url('images/blue-box-1.jpg');">&nbsp;</div>
<a href="resourcecenter.asp">
<h3>Information Center</h3>
</a></div>
<div class="home-cat-tiles__tile tile-6">
<div class="tile-bg tile-bg-6" style="background-image: url('images/blue-box-2.jpg');">&nbsp;</div>
<a href="#">
<h3>Schematics</h3>
</a></div>
</div>
</div>
</div>
<div class="manufacturers-wrap">
<h2 class="trending-products__title">Manufacturers</h2>
<div class="manufacturer-logos"><a href="products/BRANDS/Bissell/"><img src="images/logo-bissell.jpg" /></a> <img src="images/logo-cana-vac.jpg" /> <img src="images/logo-CleanObsessed.jpg" /> <a href="products/BRANDS/Eureka/"><img src="images/logo-EurekaMidea.jpg" /></a> <img src="images/logo-hide-a-house.jpg" /> <a href="products/BRANDS/Hoover/"><img src="images/logo-hoover.jpg" /></a> <a href="products/BRANDS/Johnny-Vac/"><img src="images/logo-johnny-vac.jpg" /></a> <a href="products/BRANDS/Kirby/"><img src="images/logo-kirby.jpg" /></a> <a href="products/BRANDS/Miele/"><img src="images/logo-miele.jpg" /></a> <a href="products/BRANDS/Oreck/"><img src="images/logo-oreck.jpg" /></a> <a href="products/BRANDS/Perfect/"><img src="images/logo-perfect.jpg" /></a> <a href="products/BRANDS/Rexair/"><img src="images/logo-Rexair.jpg" /></a> <img src="images/logo-sanitaire.jpg" /> <a href="products/BRANDS/Sebo/"><img src="images/logo-sebo.jpg" /></a> <img src="images/logo-vacumaid.jpg" /> <img src="images/logo-vap.jpg" /> <img src="images/logo-wessel-werk.jpg" /></div>
</div>
<div class="marketing-wrap">
<div class="marketing__well"><a href="#"><img src="images/marketing-well-placeholder-1.png" /></a></div>
<div class="marketing__well"><a href="page.asp?p_key=C931811BC9AF412895079F9FF0290F7C"><img src="images/green-box.jpg" /></a></div>
<div class="marketing__well"><a href="uploads/520FF.pdf"><img src="images/marketing-well-placeholder-3.jpg" /></a></div>
</div>
</div>
</div>
</div>
</div>
<footer id="retail-footer-1" class="retail-footer-1 print-hide">
<div class="container-fluid retail-footer__area">
<div class="retail-footer__col retail-footer__col-1"><a class="retail-footer__logo-wrap" href="default.asp"> <img class="retail-footer__logo" src="images/logo-desco.png" alt="Desco Vacuum Supply" /> </a></div>
<div class="retail-footer__col retail-footer__col-2">
<div class="nav-header"><span class="">Corporate</span></div>
<address class="retail-footer__address"><span class="retail-footer__company-name"> Desco Vacuum Supply </span> <br /><span class="retail-footer__address-text"> 75 Oser Ave Hauppauge, NY 11788 </span> <br /><a class="retail-footer__email" href="mailto:ray@descovacuumsupply.com?subject=Website Customer Service Request"><i class="icon-envelope icon-fixed-width"></i>Customer Service</a> <br /><a class="retail-footer__phone" href="tel:1-800-833-3726"><i class="icon-phone icon-fixed-width"></i>1-800-833-3726</a></address></div>
<div class="retail-footer__col retail-footer__col-3 -hidden-if-empty">
<ul id="retail-footer-nav__social" class="linkset retail-footer-nav__social retail-footer-nav__social__ul-1">
<li class="retail-footer-nav__social__li-1" data-key="B15A0F34D77E427595EDF3035840FEDA">
<div class="nav-header"><a class="" href="#">We Gladly Accept</a></div>
</li>
<li class="retail-footer-nav__social__li-1" data-key="55716C82C33B450EA123A59044367481"><a class="retail-footer-nav__social__a-1">Visa</a></li>
<li class="retail-footer-nav__social__li-1" data-key="59666BA3A984427D8F0EA612549638FC"><a class="retail-footer-nav__social__a-1">MasterCard</a></li>
<li class="retail-footer-nav__social__li-1" data-key="2D89AA77EA814439983E7F66E48C38D0"><a class="retail-footer-nav__social__a-1">American Express</a></li>
</ul>
</div>
<div class="retail-footer__col retail-footer__col-4 -hidden-if-empty">
<ul class="retail-footer__group linkset click">
<li class="retail-footer__link-parent link-parent drop"><a class="nav-header show-mobile">Navigation <i class="icon-plus"></i> <i class="icon-plus"></i> </a>
<ul id="retail-footer-nav__menu" class="linkset retail-footer-nav__menu retail-footer-nav__menu__ul-1">
<li class="retail-footer-nav__menu__li-1" data-key="6274472664B74036B01C84C9410B292C">
<div class="nav-header"><a class="" href="#">Navigation</a></div>
</li>
<li class="active retail-footer-nav__menu__li-1" data-key="5493726A1312435E9D31D487D5904A95"><a class="active retail-footer-nav__menu__a-1" href="https://descovacuum.mycimstaging.com/">Home</a></li>
<li class="retail-footer-nav__menu__li-1" data-key="A4270171CCD040278C810AF3B1BCC994"><a class="retail-footer-nav__menu__a-1" href="about?autopage=https%3A%2F%2Fdescovacuum.cimstaging.com%2F%3F" data-autopage="1">About Us</a></li>
<li class="retail-footer-nav__menu__li-1" data-key="20CCEBB1150642269A4976ECE4898DD7"><a class="retail-footer-nav__menu__a-1" href="pc_combined_results.asp">Product Search</a></li>
<li class="retail-footer-nav__menu__li-1" data-key="1F039DB4FB1849888ED676217F376B51"><a class="retail-footer-nav__menu__a-1" href="contact_us.asp">Contact Us</a></li>
<li class="retail-footer-nav__menu__li-1" data-key="F6DB6D6E97874886A74CE49DC225BC7B"><a class="retail-footer-nav__menu__a-1" href="bulk_atc.asp">Bulk Order</a></li>
<li class="retail-footer-nav__menu__li-1" data-key="774EF1593B4C420D9974F49EFB8001E9"><a class="retail-footer-nav__menu__a-1" href="https://descovacuum.mycimproduction.com/uploads/descosalesflyer.pdf">Latest Sales Flyer</a></li>
</ul>
</li>
</ul>
</div>
<div class="retail-footer__col retail-footer__col-5 -hidden-if-empty">
<ul class="retail-footer__col-group linkset click">
<li class="retail-footer__link-parent link-parent drop"><a class="nav-header show-mobile"> Product Categories <i class="icon-plus"></i> </a>
<ul id="retail-footer-nav__categories" class="linkset retail-footer-nav__categories retail-footer-nav__categories__ul-1">
<li class="retail-footer-nav__categories__li-1" data-key="8F3E2400C0C7480E9D5D51A9FDB8C802">
<div class="nav-header"><a class="" href="#">Product Categories</a></div>
</li>
<li class="retail-footer-nav__categories__li-1" data-key="73F0C9B7AF214DABA3454267C9D9D53D"><a class="retail-footer-nav__categories__a-1" href="https://descovacuum.cimstaging.com/pc_combined_results.asp?pc_id=389BBBAF29CD478BBC47138C2C58AEEE">All Things Central Vac</a></li>
<li class="retail-footer-nav__categories__li-1" data-key="DFF73104A441422B9C956C9E2860D311"><a class="retail-footer-nav__categories__a-1" href="#">Clean Obsessed Branded Products</a></li>
<li class="retail-footer-nav__categories__li-1" data-key="21A54350FC3E454BB504DF31678EBF2B"><a class="retail-footer-nav__categories__a-1" href="https://descovacuum.mycimstaging.com/">My Account</a></li>
<li class="retail-footer-nav__categories__li-1" data-key="8A3C873EB9B8457C9069556C85898BEE"><a class="retail-footer-nav__categories__a-1" href="https://descovacuum.mycimstaging.com/">My Orders</a></li>
<li class="retail-footer-nav__categories__li-1" data-key="2289651CAECF48C6967378D7EB11AB61"><a class="retail-footer-nav__categories__a-1" href="https://descovacuum.mycimstaging.com/">Information Center</a></li>
<li class="retail-footer-nav__categories__li-1" data-key="D5C5B1BB22564719AD3016666E35B0A2"><a class="retail-footer-nav__categories__a-1" href="https://descovacuum.mycimstaging.com/">Schematics</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="bottom-bar" class="bottom-bar">
<div class="container-fluid">
<div class="bottom-bar__copyright">
<p>&copy;2022. Desco Vacuum Supply. All rights reserved.</p>
</div>
<div class="bottom-bar__colophon">
<p>Powered by <a href="https://www.cimcloud.com" target="_blank" rel="nofollow noopener">CIMcloud</a></p>
</div>
</div>
</div>
</footer>
<div id="landing-registration-form" class="landing-registration-form">
<div class="container-fluid">
<div class="reg-form-header span9">
<h2>New Customer Registration Request Form</h2>
<p>In order to complete you Registration you MUST send a copy of you tax resale certificate to Desco Vacuum by: Fax at 631 300 4700 - ATTN: Ray or Email to <a>Erik@descovacuumsupplycom</a> or <a>Ray@descovacuumsupplycom</a></p>
</div>
<div class="reg-form-fields span9 pull-right">
<h3>Subscribe</h3>
<p>* indicates required</p>
<!--form>
	<div class="col"><label>Email Address *</label> <input id="email" name="email" type="text" /> <label>First Name *</label> <input id="fname" name="fname" type="text" /> <label>Last Name *</label> <input id="lname" name="lname" type="text" /> <label>Company Name *</label> <input id="cname" name="cname" type="text" /> <label>Contact *</label> <input id="contact" name="contact" type="text" /> <label>Tax Resale Number *</label> <input id="rnum" name="rnum" type="text" /> <label>Phone Number *</label> <input id="phone" name="phone" type="text" /></div>
	<div class="col"><label>Billing Information *</label> <input id="billing" name="billing" type="text" /> <label>Address Line 2 </label> <input id="baddr2" name="baddr2" type="text" /> <label>City</label> <input id="bcity" name="bcity" type="text" /> <label>State / Providence / Region</label> <input id="bstate" name="bstate" type="text" /> <label>Postal / Zip Code</label> <input id="bzip" name="bzip" type="text" /> <label>Country</label> <input id="bcountry" name="country" type="text" /> <label>Shipping Information</label> <input id="shipping" name="shipping" type="text" /> <label>Address Line 2</label> <input id="saddr2" name="saddr2" type="text" /></div>
	<div class="col"><label>City</label> <input id="scity" name="scity" type="text" /> <label>State / Providence / Region</label> <input id="sstate" name="sstate" type="text" /> <label>Postal / Zip Code</label> <input id="szip" name="szip" type="text" /> <label>Country</label> <input id="scountry" name="scountry" type="text" /> <label>Your website URL (if you have one)</label> <input id="website" name="website" type="text" /> <label>What is you business? What do you do?</label> <input id="business" name="business" type="text" /> <input class="pull-right" name="submit" type="submit" /></div>
</form--><form id="mc-embedded-subscribe-form" class="validate" action="https://descovac.us8.list-manage.com/subscribe/post?u=cb9dd0df6b71bc66351840d49&amp;id=cd024232dc" method="post" name="mc-embedded-subscribe-form" novalidate="" target="_blank">
<div class="col"><label for="mce-EMAIL">Email Address <span class="asterisk">*</span> </label> <input id="mce-EMAIL" class="required email" name="EMAIL" type="email" value="" /> <label for="mce-FNAME">First Name <span class="asterisk">*</span> </label> <input id="mce-FNAME" class="required" name="FNAME" type="text" value="" /> <label for="mce-LNAME">Last Name <span class="asterisk">*</span> </label> <input id="mce-LNAME" class="required" name="LNAME" type="text" value="" /> <label for="mce-COMPNAME">Company Name <span class="asterisk">*</span> </label> <input id="mce-COMPNAME" class="required" name="COMPNAME" type="text" value="" /> <label for="mce-CONTACT">Contact <span class="asterisk">*</span> </label> <input id="mce-CONTACT" class="required" name="CONTACT" type="text" value="" /> <label for="mce-TAXID">Tax Resale Number <span class="asterisk">*</span> </label> <input id="mce-TAXID" class="required" name="TAXID" type="text" value="" /> <label for="mce-PHONE">Phone Number <span class="asterisk">*</span> </label>
<div class="phonefield phonefield-us"><span class="phonearea"><input id="mce-PHONE-area" class="phonepart required" maxlength="3" name="PHONE[area]" pattern="[0-9]*" size="3" type="text" value="" /></span> <span class="phonedetail1"><input id="mce-PHONE-detail1" class="phonepart required" maxlength="3" name="PHONE[detail1]" pattern="[0-9]*" size="3" type="text" value="" /></span><span class="phonedetail2"><input id="mce-PHONE-detail2" class="phonepart required" maxlength="4" name="PHONE[detail2]" pattern="[0-9]*" size="4" type="text" value="" /></span></div>
</div>
<div class="col">
<div class="mc-address-group">
<div class="mc-field-group"><label for="mce-BILLTO-addr1">Billing Information <span class="asterisk">*</span> </label> <input id="mce-BILLTO-addr1" class="required" maxlength="70" name="BILLTO[addr1]" type="text" value="" /></div>
<div class="mc-field-group"><label for="mce-BILLTO-addr2">Address Line 2</label> <input id="mce-BILLTO-addr2" maxlength="70" name="BILLTO[addr2]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-BILLTO-city">City</label> <input id="mce-BILLTO-city" class="required" maxlength="40" name="BILLTO[city]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-BILLTO-state">State/Province/Region</label> <input id="mce-BILLTO-state" class="required" maxlength="20" name="BILLTO[state]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-BILLTO-zip">Postal / Zip Code</label> <input id="mce-BILLTO-zip" class="required" maxlength="10" name="BILLTO[zip]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-BILLTO-country">Country</label><select id="mce-BILLTO-country" class="required" name="BILLTO[country]">
<option selected="selected" value="164">USA</option>
<option value="286">Aaland Islands</option>
<option value="274">Afghanistan</option>
<option value="2">Albania</option>
<option value="3">Algeria</option>
<option value="178">American Samoa</option>
<option value="4">Andorra</option>
<option value="5">Angola</option>
<option value="176">Anguilla</option>
<option value="175">Antigua And Barbuda</option>
<option value="6">Argentina</option>
<option value="7">Armenia</option>
<option value="179">Aruba</option>
<option value="8">Australia</option>
<option value="9">Austria</option>
<option value="10">Azerbaijan</option>
<option value="11">Bahamas</option>
<option value="12">Bahrain</option>
<option value="13">Bangladesh</option>
<option value="14">Barbados</option>
<option value="15">Belarus</option>
<option value="16">Belgium</option>
<option value="17">Belize</option>
<option value="18">Benin</option>
<option value="19">Bermuda</option>
<option value="20">Bhutan</option>
<option value="21">Bolivia</option>
<option value="325">Bonaire, Saint Eustatius and Saba</option>
<option value="22">Bosnia and Herzegovina</option>
<option value="23">Botswana</option>
<option value="181">Bouvet Island</option>
<option value="24">Brazil</option>
<option value="180">Brunei Darussalam</option>
<option value="25">Bulgaria</option>
<option value="26">Burkina Faso</option>
<option value="27">Burundi</option>
<option value="28">Cambodia</option>
<option value="29">Cameroon</option>
<option value="30">Canada</option>
<option value="31">Cape Verde</option>
<option value="32">Cayman Islands</option>
<option value="33">Central African Republic</option>
<option value="34">Chad</option>
<option value="35">Chile</option>
<option value="36">China</option>
<option value="185">Christmas Island</option>
<option value="37">Colombia</option>
<option value="204">Comoros</option>
<option value="38">Congo</option>
<option value="183">Cook Islands</option>
<option value="268">Costa Rica</option>
<option value="275">Cote D'Ivoire</option>
<option value="40">Croatia</option>
<option value="276">Cuba</option>
<option value="298">Curacao</option>
<option value="41">Cyprus</option>
<option value="42">Czech Republic</option>
<option value="318">Democratic Republic of the Congo</option>
<option value="43">Denmark</option>
<option value="44">Djibouti</option>
<option value="289">Dominica</option>
<option value="187">Dominican Republic</option>
<option value="45">Ecuador</option>
<option value="46">Egypt</option>
<option value="47">El Salvador</option>
<option value="48">Equatorial Guinea</option>
<option value="49">Eritrea</option>
<option value="50">Estonia</option>
<option value="51">Ethiopia</option>
<option value="189">Falkland Islands</option>
<option value="191">Faroe Islands</option>
<option value="52">Fiji</option>
<option value="53">Finland</option>
<option value="54">France</option>
<option value="193">French Guiana</option>
<option value="277">French Polynesia</option>
<option value="56">Gabon</option>
<option value="57">Gambia</option>
<option value="58">Georgia</option>
<option value="59">Germany</option>
<option value="60">Ghana</option>
<option value="194">Gibraltar</option>
<option value="61">Greece</option>
<option value="195">Greenland</option>
<option value="192">Grenada</option>
<option value="196">Guadeloupe</option>
<option value="62">Guam</option>
<option value="198">Guatemala</option>
<option value="270">Guernsey</option>
<option value="63">Guinea</option>
<option value="65">Guyana</option>
<option value="200">Haiti</option>
<option value="66">Honduras</option>
<option value="67">Hong Kong</option>
<option value="68">Hungary</option>
<option value="69">Iceland</option>
<option value="70">India</option>
<option value="71">Indonesia</option>
<option value="278">Iran</option>
<option value="279">Iraq</option>
<option value="74">Ireland</option>
<option value="323">Isle of Man</option>
<option value="75">Israel</option>
<option value="76">Italy</option>
<option value="202">Jamaica</option>
<option value="78">Japan</option>
<option value="288">Jersey (Channel Islands)</option>
<option value="79">Jordan</option>
<option value="80">Kazakhstan</option>
<option value="81">Kenya</option>
<option value="203">Kiribati</option>
<option value="82">Kuwait</option>
<option value="83">Kyrgyzstan</option>
<option value="84">Lao People's Democratic Republic</option>
<option value="85">Latvia</option>
<option value="86">Lebanon</option>
<option value="87">Lesotho</option>
<option value="88">Liberia</option>
<option value="281">Libya</option>
<option value="90">Liechtenstein</option>
<option value="91">Lithuania</option>
<option value="92">Luxembourg</option>
<option value="208">Macau</option>
<option value="93">Macedonia</option>
<option value="94">Madagascar</option>
<option value="95">Malawi</option>
<option value="96">Malaysia</option>
<option value="97">Maldives</option>
<option value="98">Mali</option>
<option value="99">Malta</option>
<option value="207">Marshall Islands</option>
<option value="210">Martinique</option>
<option value="100">Mauritania</option>
<option value="212">Mauritius</option>
<option value="241">Mayotte</option>
<option value="101">Mexico</option>
<option value="102">Moldova, Republic of</option>
<option value="103">Monaco</option>
<option value="104">Mongolia</option>
<option value="290">Montenegro</option>
<option value="294">Montserrat</option>
<option value="105">Morocco</option>
<option value="106">Mozambique</option>
<option value="242">Myanmar</option>
<option value="107">Namibia</option>
<option value="108">Nepal</option>
<option value="109">Netherlands</option>
<option value="110">Netherlands Antilles</option>
<option value="213">New Caledonia</option>
<option value="111">New Zealand</option>
<option value="112">Nicaragua</option>
<option value="113">Niger</option>
<option value="114">Nigeria</option>
<option value="217">Niue</option>
<option value="214">Norfolk Island</option>
<option value="272">North Korea</option>
<option value="116">Norway</option>
<option value="117">Oman</option>
<option value="118">Pakistan</option>
<option value="222">Palau</option>
<option value="282">Palestine</option>
<option value="119">Panama</option>
<option value="219">Papua New Guinea</option>
<option value="120">Paraguay</option>
<option value="121">Peru</option>
<option value="122">Philippines</option>
<option value="221">Pitcairn</option>
<option value="123">Poland</option>
<option value="124">Portugal</option>
<option value="126">Qatar</option>
<option value="315">Republic of Kosovo</option>
<option value="127">Reunion</option>
<option value="128">Romania</option>
<option value="129">Russia</option>
<option value="130">Rwanda</option>
<option value="205">Saint Kitts and Nevis</option>
<option value="206">Saint Lucia</option>
<option value="324">Saint Martin</option>
<option value="237">Saint Vincent and the Grenadines</option>
<option value="132">Samoa (Independent)</option>
<option value="227">San Marino</option>
<option value="255">Sao Tome and Principe</option>
<option value="133">Saudi Arabia</option>
<option value="134">Senegal</option>
<option value="326">Serbia</option>
<option value="135">Seychelles</option>
<option value="136">Sierra Leone</option>
<option value="137">Singapore</option>
<option value="302">Sint Maarten</option>
<option value="138">Slovakia</option>
<option value="139">Slovenia</option>
<option value="223">Solomon Islands</option>
<option value="140">Somalia</option>
<option value="141">South Africa</option>
<option value="257">South Georgia and the South Sandwich Islands</option>
<option value="142">South Korea</option>
<option value="311">South Sudan</option>
<option value="143">Spain</option>
<option value="144">Sri Lanka</option>
<option value="293">Sudan</option>
<option value="146">Suriname</option>
<option value="225">Svalbard and Jan Mayen Islands</option>
<option value="147">Swaziland</option>
<option value="148">Sweden</option>
<option value="149">Switzerland</option>
<option value="285">Syria</option>
<option value="152">Taiwan</option>
<option value="260">Tajikistan</option>
<option value="153">Tanzania</option>
<option value="154">Thailand</option>
<option value="233">Timor-Leste</option>
<option value="155">Togo</option>
<option value="232">Tonga</option>
<option value="234">Trinidad and Tobago</option>
<option value="156">Tunisia</option>
<option value="157">Turkey</option>
<option value="158">Turkmenistan</option>
<option value="287">Turks &amp; Caicos Islands</option>
<option value="159">Uganda</option>
<option value="161">Ukraine</option>
<option value="162">United Arab Emirates</option>
<option value="262">United Kingdom</option>
<option value="163">Uruguay</option>
<option value="165">Uzbekistan</option>
<option value="239">Vanuatu</option>
<option value="166">Vatican City State (Holy See)</option>
<option value="167">Venezuela</option>
<option value="168">Vietnam</option>
<option value="169">Virgin Islands (British)</option>
<option value="238">Virgin Islands (U.S.)</option>
<option value="188">Western Sahara</option>
<option value="170">Yemen</option>
<option value="173">Zambia</option>
<option value="174">Zimbabwe</option>
</select></div>
</div>
</div>
<div class="col">
<div class="mc-address-group">
<div class="mc-field-group"><label for="mce-SHIPTO-addr1">Shipping Information (Leave blank if same as Billing info) </label> <input id="mce-SHIPTO-addr1" class="" maxlength="70" name="SHIPTO[addr1]" type="text" value="" /></div>
<div class="mc-field-group"><label for="mce-SHIPTO-addr2">Address Line 2</label> <input id="mce-SHIPTO-addr2" maxlength="70" name="SHIPTO[addr2]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-SHIPTO-city">City</label> <input id="mce-SHIPTO-city" class="" maxlength="40" name="SHIPTO[city]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-SHIPTO-state">State/Province/Region</label> <input id="mce-SHIPTO-state" class="" maxlength="20" name="SHIPTO[state]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-SHIPTO-zip">Postal / Zip Code</label> <input id="mce-SHIPTO-zip" class="" maxlength="10" name="SHIPTO[zip]" type="text" value="" /></div>
<div class="mc-field-group size1of2"><label for="mce-SHIPTO-country">Country</label><select id="mce-SHIPTO-country" class="" name="SHIPTO[country]">
<option selected="selected" value="164">USA</option>
<option value="286">Aaland Islands</option>
<option value="274">Afghanistan</option>
<option value="2">Albania</option>
<option value="3">Algeria</option>
<option value="178">American Samoa</option>
<option value="4">Andorra</option>
<option value="5">Angola</option>
<option value="176">Anguilla</option>
<option value="175">Antigua And Barbuda</option>
<option value="6">Argentina</option>
<option value="7">Armenia</option>
<option value="179">Aruba</option>
<option value="8">Australia</option>
<option value="9">Austria</option>
<option value="10">Azerbaijan</option>
<option value="11">Bahamas</option>
<option value="12">Bahrain</option>
<option value="13">Bangladesh</option>
<option value="14">Barbados</option>
<option value="15">Belarus</option>
<option value="16">Belgium</option>
<option value="17">Belize</option>
<option value="18">Benin</option>
<option value="19">Bermuda</option>
<option value="20">Bhutan</option>
<option value="21">Bolivia</option>
<option value="325">Bonaire, Saint Eustatius and Saba</option>
<option value="22">Bosnia and Herzegovina</option>
<option value="23">Botswana</option>
<option value="181">Bouvet Island</option>
<option value="24">Brazil</option>
<option value="180">Brunei Darussalam</option>
<option value="25">Bulgaria</option>
<option value="26">Burkina Faso</option>
<option value="27">Burundi</option>
<option value="28">Cambodia</option>
<option value="29">Cameroon</option>
<option value="30">Canada</option>
<option value="31">Cape Verde</option>
<option value="32">Cayman Islands</option>
<option value="33">Central African Republic</option>
<option value="34">Chad</option>
<option value="35">Chile</option>
<option value="36">China</option>
<option value="185">Christmas Island</option>
<option value="37">Colombia</option>
<option value="204">Comoros</option>
<option value="38">Congo</option>
<option value="183">Cook Islands</option>
<option value="268">Costa Rica</option>
<option value="275">Cote D'Ivoire</option>
<option value="40">Croatia</option>
<option value="276">Cuba</option>
<option value="298">Curacao</option>
<option value="41">Cyprus</option>
<option value="42">Czech Republic</option>
<option value="318">Democratic Republic of the Congo</option>
<option value="43">Denmark</option>
<option value="44">Djibouti</option>
<option value="289">Dominica</option>
<option value="187">Dominican Republic</option>
<option value="45">Ecuador</option>
<option value="46">Egypt</option>
<option value="47">El Salvador</option>
<option value="48">Equatorial Guinea</option>
<option value="49">Eritrea</option>
<option value="50">Estonia</option>
<option value="51">Ethiopia</option>
<option value="189">Falkland Islands</option>
<option value="191">Faroe Islands</option>
<option value="52">Fiji</option>
<option value="53">Finland</option>
<option value="54">France</option>
<option value="193">French Guiana</option>
<option value="277">French Polynesia</option>
<option value="56">Gabon</option>
<option value="57">Gambia</option>
<option value="58">Georgia</option>
<option value="59">Germany</option>
<option value="60">Ghana</option>
<option value="194">Gibraltar</option>
<option value="61">Greece</option>
<option value="195">Greenland</option>
<option value="192">Grenada</option>
<option value="196">Guadeloupe</option>
<option value="62">Guam</option>
<option value="198">Guatemala</option>
<option value="270">Guernsey</option>
<option value="63">Guinea</option>
<option value="65">Guyana</option>
<option value="200">Haiti</option>
<option value="66">Honduras</option>
<option value="67">Hong Kong</option>
<option value="68">Hungary</option>
<option value="69">Iceland</option>
<option value="70">India</option>
<option value="71">Indonesia</option>
<option value="278">Iran</option>
<option value="279">Iraq</option>
<option value="74">Ireland</option>
<option value="323">Isle of Man</option>
<option value="75">Israel</option>
<option value="76">Italy</option>
<option value="202">Jamaica</option>
<option value="78">Japan</option>
<option value="288">Jersey (Channel Islands)</option>
<option value="79">Jordan</option>
<option value="80">Kazakhstan</option>
<option value="81">Kenya</option>
<option value="203">Kiribati</option>
<option value="82">Kuwait</option>
<option value="83">Kyrgyzstan</option>
<option value="84">Lao People's Democratic Republic</option>
<option value="85">Latvia</option>
<option value="86">Lebanon</option>
<option value="87">Lesotho</option>
<option value="88">Liberia</option>
<option value="281">Libya</option>
<option value="90">Liechtenstein</option>
<option value="91">Lithuania</option>
<option value="92">Luxembourg</option>
<option value="208">Macau</option>
<option value="93">Macedonia</option>
<option value="94">Madagascar</option>
<option value="95">Malawi</option>
<option value="96">Malaysia</option>
<option value="97">Maldives</option>
<option value="98">Mali</option>
<option value="99">Malta</option>
<option value="207">Marshall Islands</option>
<option value="210">Martinique</option>
<option value="100">Mauritania</option>
<option value="212">Mauritius</option>
<option value="241">Mayotte</option>
<option value="101">Mexico</option>
<option value="102">Moldova, Republic of</option>
<option value="103">Monaco</option>
<option value="104">Mongolia</option>
<option value="290">Montenegro</option>
<option value="294">Montserrat</option>
<option value="105">Morocco</option>
<option value="106">Mozambique</option>
<option value="242">Myanmar</option>
<option value="107">Namibia</option>
<option value="108">Nepal</option>
<option value="109">Netherlands</option>
<option value="110">Netherlands Antilles</option>
<option value="213">New Caledonia</option>
<option value="111">New Zealand</option>
<option value="112">Nicaragua</option>
<option value="113">Niger</option>
<option value="114">Nigeria</option>
<option value="217">Niue</option>
<option value="214">Norfolk Island</option>
<option value="272">North Korea</option>
<option value="116">Norway</option>
<option value="117">Oman</option>
<option value="118">Pakistan</option>
<option value="222">Palau</option>
<option value="282">Palestine</option>
<option value="119">Panama</option>
<option value="219">Papua New Guinea</option>
<option value="120">Paraguay</option>
<option value="121">Peru</option>
<option value="122">Philippines</option>
<option value="221">Pitcairn</option>
<option value="123">Poland</option>
<option value="124">Portugal</option>
<option value="126">Qatar</option>
<option value="315">Republic of Kosovo</option>
<option value="127">Reunion</option>
<option value="128">Romania</option>
<option value="129">Russia</option>
<option value="130">Rwanda</option>
<option value="205">Saint Kitts and Nevis</option>
<option value="206">Saint Lucia</option>
<option value="324">Saint Martin</option>
<option value="237">Saint Vincent and the Grenadines</option>
<option value="132">Samoa (Independent)</option>
<option value="227">San Marino</option>
<option value="255">Sao Tome and Principe</option>
<option value="133">Saudi Arabia</option>
<option value="134">Senegal</option>
<option value="326">Serbia</option>
<option value="135">Seychelles</option>
<option value="136">Sierra Leone</option>
<option value="137">Singapore</option>
<option value="302">Sint Maarten</option>
<option value="138">Slovakia</option>
<option value="139">Slovenia</option>
<option value="223">Solomon Islands</option>
<option value="140">Somalia</option>
<option value="141">South Africa</option>
<option value="257">South Georgia and the South Sandwich Islands</option>
<option value="142">South Korea</option>
<option value="311">South Sudan</option>
<option value="143">Spain</option>
<option value="144">Sri Lanka</option>
<option value="293">Sudan</option>
<option value="146">Suriname</option>
<option value="225">Svalbard and Jan Mayen Islands</option>
<option value="147">Swaziland</option>
<option value="148">Sweden</option>
<option value="149">Switzerland</option>
<option value="285">Syria</option>
<option value="152">Taiwan</option>
<option value="260">Tajikistan</option>
<option value="153">Tanzania</option>
<option value="154">Thailand</option>
<option value="233">Timor-Leste</option>
<option value="155">Togo</option>
<option value="232">Tonga</option>
<option value="234">Trinidad and Tobago</option>
<option value="156">Tunisia</option>
<option value="157">Turkey</option>
<option value="158">Turkmenistan</option>
<option value="287">Turks &amp; Caicos Islands</option>
<option value="159">Uganda</option>
<option value="161">Ukraine</option>
<option value="162">United Arab Emirates</option>
<option value="262">United Kingdom</option>
<option value="163">Uruguay</option>
<option value="165">Uzbekistan</option>
<option value="239">Vanuatu</option>
<option value="166">Vatican City State (Holy See)</option>
<option value="167">Venezuela</option>
<option value="168">Vietnam</option>
<option value="169">Virgin Islands (British)</option>
<option value="238">Virgin Islands (U.S.)</option>
<option value="188">Western Sahara</option>
<option value="170">Yemen</option>
<option value="173">Zambia</option>
<option value="174">Zimbabwe</option>
</select></div>
</div>
<div class="mc-field-group"><label for="mce-WEBSITE">Your website URL (if you have one) </label> <input id="mce-WEBSITE" class="" name="WEBSITE" type="text" value="" /></div>
<div class="mc-field-group"><label for="mce-BUSINESS">What is your business? What do you do? </label> <input id="mce-BUSINESS" class="" name="BUSINESS" type="text" value="" /></div>
<input id="mc-embedded-subscribe" class="pull-right" name="subscribe" type="submit" value="Subscribe" />
<div id="mce-responses" class="clear foot">
<div id="mce-error-response" class="response" style="display: none;">&nbsp;</div>
<div id="mce-success-response" class="response" style="display: none;">&nbsp;</div>
</div>
</div>
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input tabindex="-1" name="b_cb9dd0df6b71bc66351840d49_cd024232dc" type="text" value="" /></div>
</form></div>
</div>
</div>
<!-- END ----------------------------------------------------------------------></div>
                </div>
                <div class="app-signin-form pull-right">
                    

<script language="JavaScript">


	$(function() {
		addGlobalModalCompletionHandler($('.global-modal'), handleCreateLogin);
	});

	function handleCreateLogin(){
		console.log('modal done');
		toggleLoadingWidget(true);
		location.reload();
	}

	function CheckForm(form)
	{
		if (form.username.value == "")
		{
			alert("Please enter a username");
			return false;
		}

	

		if (form.password.value == "")
		{
			alert("Password can not be blank")
			return false;
		}
	 
		showLoadingpopup();
		
		return true;
	}

	
	if (jQuery) {
		jQuery(function() { try { document.getElementById('logonUsername').focus(); } catch (err){ } });
	} else {
		window.onload = function() {
			try { document.getElementById('logonUsername').focus(); } catch (err) { }
		}
	}
	

	function showLoadingpopup() {
			
				toggleLoadingWidget(true);
			
		}
		
		function HideLoading() {
			
				toggleLoadingWidget(false);
			
		}

</script>


	<div class="login_overlay" id="login_overlay_div" style="display:none;">
		<div class="login_overlay_bkg">&nbsp;</div>
		<div class="login_overlay_win">
			<p><img src="js/jquery/loadinganimation.gif" /></p>
			<p><strong>Please wait while we load your profile&hellip;</strong></p>
		</div>
	</div>
			<header class="page-header">
			<h1>Sign in to Your Account</h1>
			</header>
		<div id="logon_container" class="row-fluid">
				<div class="local span12">
	<div class="contact-login well well-large" style="">
		<form
			name="custacctlogin"
			class="custom-account-login"
			id="custacctlogin"
			class="contact-login__form"
			method="POST"
			action="/security_logonscript_sitefront.asp?action=logon&parent_c_id=&returnpage=signin%2Easp%3F&pageredir=%2Fsitemap%2Easp"
			onsubmit="return CheckForm(this);"
			autocapitalize="off"
			autocorrect="off" 
			
		>
			<div></div>

			<label for="logonUsername" class="login_title custom-account-login__label">Username</label>
			<div class="login_field custom-account-login__input-wrapper">
				<input type="text" name="username" autocorrect="off" autocapitalize="off" id="logonUsername" class="un" data-test="login_username" custom-account-login__input" value="" placeholder="" >
			</div>

			

				<label for="logonPassword" class="login_title custom-account-login__label">Password</label>
				<div class="login_field custom-account-login__input-wrapper">
					<input type="password" name="password" autocorrect="off" autocapitalize="off" id="logonPassword" class="pw" data-test="login_password" custom-account-login__input" value="" placeholder="">
				</div>

				<div class="login_btn_wrap custom-account-login__submit-wrapper">
								<button type="submit" class="btn btn-primary custom-account-login__submit" data-test="login_button">Sign In</button>
				</div>

				
				<div></div>
				<input type="hidden" name="logontype" value="customer">

		</form>
	</div>

	
		<div class="login-links" style="">
			<ul class="unstyled">
					<li class="login-links__request-username"> 
							<a id="request_username_link" class="login-links__request-username-link global-modal" href="request_username.asp" data-title="Forgot your username?" data-size="small">
								Forgot your username?
							</a> 
					</li>
					<li class="login-links__reset-password"> 
						<a id="pass_reset_link" class="login-links__reset-password-link global-modal" href="request_password_reset.asp" data-title="Reset your password" data-size="small">
							Reset your password
						</a> 
					</li>
					<li class="login-links__create-login"> 
							<a href="create_login_select_acct.asp" class="login-links__create-login-link global-modal" title="Create a User " data-size="small">Create a new contact for your account</a> 	
					</li>

			</ul>
		</div>
				</div>
		</div>

	<div class="pull-right" style="">
		
	</div>
		<div id="wsplogin">
			<div>
				<form id="security_page" 
							method="POST" 
							action="https://www.descovac.com/security_logonscript_sitefront.asp?source=validipproduction&login=1&pageredir=%2Fsitemap%2Easp"
							onsubmit="toggleLoadingWidget(true)"
							>
					<input type="hidden" name="username" id="validip_username" value="wsptest">
					<input type="submit" value="ValidIP: Login wsptest" class="btn">
				</form>
			</div>
		</div>
                </div>
            
        </div>

        
<div class="global-body-append">
    
		<a class="app-logo__validip-info btn btn-mini" href="#siteInfo" role="button" data-toggle="modal">
			&nbsp;&nbsp;<i class="fab fa-bitbucket"></i> descovacuum
		</a>
		
	

	<div id="siteInfo" class="modal hide fade" tabindex="-1"  aria-hidden="true">
		<header class="modal-header">
			<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
			<h3 id="leaveCheckoutLabel"><i class="icon-info-sign"></i> Site Information</h3>
		</header>
		<div class="modal-body app-logo__validip-body">
			
		
		<table border="0" cellpadding="0" cellspacing="0">
            <tr>
				<td class="pageInfoLabel">Core Version:</td>
				<td>master 4.2.2</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">ServerName:</td>
				<td>WEBSERVER</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">SiteName:</td>
				<td>descovacuum</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">WS_ID:</td>
				<td>4E578D6944DF40B4951A03B93A4B97AF</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">L_WS_ID:</td>
				<td>4E578D6944DF40B4951A03B93A4B97AF</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">Customer Site:</td>
				<td>descovacuum</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">StoreFrontURL:</td>
				<td>https://www.descovac.com</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">OrderFrontURL:</td>
				<td>https://www.descovac.com</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">ALTERNATE_DB_NAME:</td>
				<td>descovacuum</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">ALTERNATE_DB_SERVER:</td>
				<td>gdb03\db03</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">FileName:</td>
				<td>c:\inetpub\wwwroot\WebSite\signin.asp</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">Local Commit Hash:</td>
				<td>376fd1471434e59626597a413962b4402949459c</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">SCRIPT_NAME:</td>
				<td>/signin.asp</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">HTTP_X_ORIGINAL_URL:</td>
				<td></td>
			</tr>
			<tr>
				<td class="pageInfoLabel">getUrl():</td>
				<td>/signin.asp?autopage=%2Fsitemap.asp</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">getUrlPath():</td>
				<td>/signin.asp</td>
			</tr>
			<tr>
				<td class="pageInfoLabel">getPageName():</td>
				<td>signin.asp</td>
			</tr>
		</table>
		</div>
		<div class="modal-footer">
			<a class="app-logo__validip-link btn btn-danger" href="https://www.descovac.com/?action=logout"><i class="fas fa-power-off"></i> Sign Out</a>
			<a class="app-logo__validip-link btn" href="https://www.descovac.com/show_session_info.asp?key=1AD9CAFADF6F46278D5D4D367AAEBAF0"><i class="fas fa-code"></i> Session Info</a>
			<a class="app-logo__validip-link btn" href="https://k8info.cimcloud.com/api/kubernetes/production/descovacuum/" target="_blank"><i class="fab fa-docker"></i> K8 Info</a>
			<a id="toggleTimerBtn" class="app-logo__validip-link btn" onclick="toggleTimers()"><i class="fas fa-clock"></i> Toggle Timers</a>
			
				<a class="app-logo__validip-link btn" target="_blank" href="https://bitbucket.org/websitepipeline/descovacuum" target="_blank"><i class="fab fa-bitbucket"></i> Bitbucket Repo</a>
			
		</div>
	</div>
	
	<script>

	$('#demoToolsBtn').click(function() {
		$('.modal').modal('hide');
	});

	function toggleTimers() {
		$.ajax({url: "?toggle=timers&modal=1", 
				success: function(data){
					if(data == "ON") {
						$("#toggleTimerBtn").addClass("btn-danger");
					} else {
						$("#toggleTimerBtn").removeClass("btn-danger");
					}
					utils.popToastr('Success', 'Timers are now ' + data, { 'positionClass' : 'toast-bottom-right' });
				}
			});
	}
	</script>

<div class="gtm-tracking"> 
</div><!-- .gtm-tracking --> 

<div class="ga-ecommerce-tracking">
    <!-- START Tracking/Analytics Code -->
    <!-- END Tracking/Analytics Code -->

</div><!--.ga-ecommerce-tracking --> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="hide">
  <symbol id="icon-user-circle-o" viewBox="0 0 28 28">
    <path d="M14 0c7.734 0 14 6.266 14 14 0 7.688-6.234 14-14 14-7.75 0-14-6.297-14-14 0-7.734 6.266-14 14-14zM23.672 21.109c1.453-2 2.328-4.453 2.328-7.109 0-6.609-5.391-12-12-12s-12 5.391-12 12c0 2.656 0.875 5.109 2.328 7.109 0.562-2.797 1.922-5.109 4.781-5.109 1.266 1.234 2.984 2 4.891 2s3.625-0.766 4.891-2c2.859 0 4.219 2.312 4.781 5.109zM20 11c0-3.313-2.688-6-6-6s-6 2.688-6 6 2.688 6 6 6 6-2.688 6-6z"></path>
  </symbol>
  <symbol id="icon-address-card" viewBox="0 0 32 28">
    <path d="M16 17.672c0-2.422-0.594-5.109-3.063-5.109-0.766 0.438-1.797 1.188-2.938 1.188s-2.172-0.75-2.938-1.188c-2.469 0-3.063 2.688-3.063 5.109 0 1.359 0.891 2.328 2 2.328h8c1.109 0 2-0.969 2-2.328zM13.547 9.547c0-1.953-1.594-3.547-3.547-3.547s-3.547 1.594-3.547 3.547c0 1.969 1.594 3.547 3.547 3.547s3.547-1.578 3.547-3.547zM28 17.5v-1c0-0.281-0.219-0.5-0.5-0.5h-9c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h9c0.281 0 0.5-0.219 0.5-0.5zM28 13.438v-0.875c0-0.313-0.25-0.562-0.562-0.562h-8.875c-0.313 0-0.562 0.25-0.562 0.562v0.875c0 0.313 0.25 0.562 0.562 0.562h8.875c0.313 0 0.562-0.25 0.562-0.562zM28 9.5v-1c0-0.281-0.219-0.5-0.5-0.5h-9c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h9c0.281 0 0.5-0.219 0.5-0.5zM32 4.5v19c0 1.375-1.125 2.5-2.5 2.5h-5.5v-1.5c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1.5h-12v-1.5c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1.5h-5.5c-1.375 0-2.5-1.125-2.5-2.5v-19c0-1.375 1.125-2.5 2.5-2.5h27c1.375 0 2.5 1.125 2.5 2.5z"></path>
  </symbol>
  <symbol id="icon-building" viewBox="0 0 22 28">
    <path d="M21 0c0.547 0 1 0.453 1 1v26c0 0.547-0.453 1-1 1h-20c-0.547 0-1-0.453-1-1v-26c0-0.547 0.453-1 1-1h20zM8 4.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM8 8.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM8 12.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM8 16.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM6 21.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM6 17.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM6 13.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM6 9.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM6 5.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM14 25.5v-3c0-0.281-0.219-0.5-0.5-0.5h-5c-0.281 0-0.5 0.219-0.5 0.5v3c0 0.281 0.219 0.5 0.5 0.5h5c0.281 0 0.5-0.219 0.5-0.5zM14 17.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM14 13.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM14 9.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM14 5.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM18 21.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM18 17.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM18 13.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM18 9.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5zM18 5.5v-1c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5v1c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5z"></path>
  </symbol>
  <symbol id="icon-currency-dollar" viewBox="0 0 20 20">
    <path d="M10 20c-5.523 0-10-4.477-10-10s4.477-10 10-10v0c5.523 0 10 4.477 10 10s-4.477 10-10 10v0zM11 15h1c1.657 0 3-1.343 3-3s-1.343-3-3-3v0h-4.010c-0.552 0-1-0.448-1-1s0.448-1 1-1v0h6.010v-2h-3v-2h-2v2h-1c-1.657 0-3 1.343-3 3s1.343 3 3 3v0h4c0.552 0 1 0.448 1 1s-0.448 1-1 1v0h-6v2h3v2h2v-2z"></path>
  </symbol>
  <symbol id="icon-check-square" viewBox="0 0 24 28">
    <path d="M10.703 20.297l9.594-9.594c0.391-0.391 0.391-1.016 0-1.406l-1.594-1.594c-0.391-0.391-1.016-0.391-1.406 0l-7.297 7.297-3.297-3.297c-0.391-0.391-1.016-0.391-1.406 0l-1.594 1.594c-0.391 0.391-0.391 1.016 0 1.406l5.594 5.594c0.391 0.391 1.016 0.391 1.406 0zM24 6.5v15c0 2.484-2.016 4.5-4.5 4.5h-15c-2.484 0-4.5-2.016-4.5-4.5v-15c0-2.484 2.016-4.5 4.5-4.5h15c2.484 0 4.5 2.016 4.5 4.5z"></path>
  </symbol>
  <symbol id="icon-life-bouy" viewBox="0 0 28 28">
    <path d="M14 0c7.734 0 14 6.266 14 14s-6.266 14-14 14-14-6.266-14-14 6.266-14 14-14zM14 2c-2.031 0-3.953 0.516-5.641 1.406l3.031 3.031c0.828-0.281 1.703-0.438 2.609-0.438 0.922 0 1.781 0.156 2.609 0.438l3.031-3.031c-1.687-0.891-3.609-1.406-5.641-1.406zM3.406 19.641l3.031-3.031c-0.281-0.828-0.438-1.703-0.438-2.609 0-0.922 0.156-1.781 0.438-2.609l-3.031-3.031c-0.891 1.687-1.406 3.609-1.406 5.641s0.516 3.953 1.406 5.641zM14 26c2.031 0 3.953-0.516 5.641-1.406l-3.031-3.031c-0.828 0.281-1.687 0.438-2.609 0.438-0.906 0-1.781-0.156-2.609-0.438l-3.031 3.031c1.687 0.891 3.609 1.406 5.641 1.406zM14 20c3.313 0 6-2.688 6-6s-2.688-6-6-6-6 2.688-6 6 2.688 6 6 6zM21.562 16.609l3.031 3.031c0.891-1.687 1.406-3.609 1.406-5.641s-0.516-3.953-1.406-5.641l-3.031 3.031c0.281 0.828 0.438 1.703 0.438 2.609s-0.156 1.781-0.438 2.609z"></path>
  </symbol>
  <symbol id="icon-calendar-plus-o" viewBox="0 0 26 28">
    <path d="M24 4c1.094 0 2 0.906 2 2v20c0 1.094-0.906 2-2 2h-22c-1.094 0-2-0.906-2-2v-20c0-1.094 0.906-2 2-2h2v-1.5c0-1.375 1.125-2.5 2.5-2.5h1c1.375 0 2.5 1.125 2.5 2.5v1.5h6v-1.5c0-1.375 1.125-2.5 2.5-2.5h1c1.375 0 2.5 1.125 2.5 2.5v1.5h2zM18 2.5v4.5c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-4.5c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM6 2.5v4.5c0 0.281 0.219 0.5 0.5 0.5h1c0.281 0 0.5-0.219 0.5-0.5v-4.5c0-0.281-0.219-0.5-0.5-0.5h-1c-0.281 0-0.5 0.219-0.5 0.5zM24 26v-16h-22v16h22zM14 17h3.5c0.281 0 0.5 0.219 0.5 0.5v1c0 0.281-0.219 0.5-0.5 0.5h-3.5v3.5c0 0.281-0.219 0.5-0.5 0.5h-1c-0.281 0-0.5-0.219-0.5-0.5v-3.5h-3.5c-0.281 0-0.5-0.219-0.5-0.5v-1c0-0.281 0.219-0.5 0.5-0.5h3.5v-3.5c0-0.281 0.219-0.5 0.5-0.5h1c0.281 0 0.5 0.219 0.5 0.5v3.5z"></path>
  </symbol>
  <symbol id="icon-sticky-note" viewBox="0 0 24 28">
    <path d="M16 19.5v6.5h-14.5c-0.828 0-1.5-0.672-1.5-1.5v-21c0-0.828 0.672-1.5 1.5-1.5h21c0.828 0 1.5 0.672 1.5 1.5v14.5h-6.5c-0.828 0-1.5 0.672-1.5 1.5zM18 20h5.953c-0.141 0.75-0.547 1.594-1.016 2.063l-2.875 2.875c-0.469 0.469-1.313 0.875-2.063 1.016v-5.953z"></path>
  </symbol>
  <symbol id="icon-document-add" viewBox="0 0 32 32">
    <path d="M21 25v-3h1v3h3v1h-3v3h-1v-3h-3v-1h3zM17.257 29v0 0c1.009 1.221 2.535 2 4.243 2 3.038 0 5.5-2.462 5.5-5.5 0-2.137-1.219-3.99-3-4.9v-11.6l-6-7h-10.997c-1.106 0-2.003 0.898-2.003 2.007v22.985c0 1.109 0.891 2.007 1.997 2.007h10.26zM16.6 28h-9.6c-0.545 0-1-0.446-1-0.995v-23.009c0-0.54 0.446-0.995 0.996-0.995h10.004v4.994c0 1.119 0.895 2.006 1.998 2.006h4.002v10.207c-0.477-0.135-0.98-0.207-1.5-0.207-3.038 0-5.5 2.462-5.5 5.5 0 0.9 0.216 1.75 0.6 2.5v0 0zM18 3.5l4.7 5.5h-3.703c-0.546 0-0.997-0.452-0.997-1.009v-4.491zM21.5 30v0c-2.485 0-4.5-2.015-4.5-4.5s2.015-4.5 4.5-4.5c2.485 0 4.5 2.015 4.5 4.5s-2.015 4.5-4.5 4.5z"></path>
  </symbol>
  <symbol id="icon-document-add1" viewBox="0 0 32 32">
    <path d="M21 25v-3h1v3h3v1h-3v3h-1v-3h-3v-1h3zM16.022 29h-9.024c-1.107 0-1.997-0.899-1.997-2.007v-22.985c0-1.109 0.899-2.007 2.009-2.007h9.991v6.002c0 1.111 0.898 1.998 2.006 1.998h4.994v9.498c-0.77-0.321-1.614-0.498-2.5-0.498-3.59 0-6.5 2.91-6.5 6.5 0 1.289 0.375 2.49 1.022 3.5v0 0zM18 2v5.997c0 0.554 0.451 1.003 0.991 1.003h5.009l-6-7zM21.5 31c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5c-3.038 0-5.5 2.462-5.5 5.5s2.462 5.5 5.5 5.5v0z"></path>
  </symbol>
</svg>    
</div>

    <script>
        function showLoadingpopup() {
            toggleLoadingWidget(true);
        }

        function HideLoading() {
            toggleLoadingWidget(false);
        }
    </script>



<div id="appLoadingWidget" class="sk-three-bounce--full-screen app-loading hide">
    <div class="sk-three-bounce">
        <div class="sk-child sk-bounce1"></div>
        <div class="sk-child sk-bounce2"></div>
        <div class="sk-child sk-bounce3"></div>
    </div>
</div>
    <div class="dashboard-bot-scripts">
        <div class="global-scripts">
    <script>

        var jsConfig = {
            static_pages: {
                content_key: '',
                content_type: ''
            }
        }
        if(processPageTitle){
            //$('.page-header h1').html('&nbsp;').show();
            var originalPageTitle = $('.page-header h1').html();
            var originalSubmitText = $('.form-actions button').html();
            var pageTitleText = "";
            if(pageTitleText.trim() != ''){
                $('.page-header h1').html(pageTitleText);
                $('.form-actions button').html( 'Save ' + pageTitleText);
                if(isWorkerDomain) pageTitleText = sitename.toUpperCase() + ' - ' + pageTitleText;
                document.title = pageTitleText;
            }else if (originalPageTitle){
                pageTitleText = originalPageTitle;
                $('.form-actions button').html( 'Save ' + pageTitleText);
                if(isWorkerDomain) pageTitleText = sitename.toUpperCase() + ' - ' + pageTitleText;
                document.title = pageTitleText;                
            }
            $('.page-header h1').show();
            $('.form-actions button').show();
        }
    </script>

    <script src="../hooks/js_custom_functions.js?376fd14"></script>
    <script src="js/vendor/stretchy.min.js?376fd14" data-filter=".stretchy, .stretchy *"></script>
        <!-- Start Footer Custom Code -->
        <!-- Desco Vac CIM Customizations - Footer JS -->
<script>
    (function ($) {
        var MoveTopMenu = function () {
            var $topMenuItems = $('#retail-topbar-left-menu').clone();
            $(".header__prodcat__toggle:contains('Products')").html('<i class="icon-tags"></i> Products By Category');
  			$('.logo-bar__right').prepend('<ul class="linkset home-ul"><li><a href="/">HOME</a></li></ul>')
            $topMenuItems.removeClass().addClass('header__prodcat linkset click-persist appended-menu-items').find('li').removeClass();
            $('#header__prodcat').after($topMenuItems);
        };
        MoveTopMenu();


    })(jQuery);
</script>

<script>
    // Type to filter plugin
    (function ($) {
        jQuery.fn.EnhancedListBox = function () {
            return this.each(function () {
                var select = this;
                var options = [];
                var wrap = $('<div />', {
                    'class': 'filter-wrap',
                    'style': 'position:relative;'
                });
                var textbox = $('<input />', {
                    'class': 'filter-box',
                    'type': 'text',
                    'style': 'width:99%; min-width:230px;'
                }).attr('placeholder', 'Type Name of Model to Filter');

                wrap.append(textbox);
                $(select).before(wrap);

                $(select).find('option').each(function () {
                    options.push({ value: $(this).val(), text: $(this).text() });
                });
                $(select).data('options', options);

                textbox.bind('keyup', function () {
  					if( $('#nys_section_make2Dmodel select').hasClass('loading') ){
                        console.log('Filter disabled. Loading updated options.');
                        return false;
                    }
                    var options = $(select).empty().data('options');
                    var search = $(this).val().trim();
                    var regex = new RegExp(search, "gi");
                    var FilterOptions = function (i) {
                        var option = options[i];
                        if (option.text.match(regex) !== null || i == 0) {
                            $(select).append(
                                $('<option>').text(option.text).val(option.value)
                            );
                        }
                    };
                    $.each(options, FilterOptions);
                });
            });
        };

    })(jQuery);

    // Make / Model
    (function ($) {

        var isHome = $('body').hasClass('home');

        var ID = 'make2Dmodel';
        var WRAPPER_SELECTOR = '#nys_section_' + ID;
        var $wrapper = $('#' + ID);
        var $controls = $wrapper.find('.nys_search_terms select');
        var $make = $controls.eq(0);
        var $model = $controls.eq(1);
        var $component = $controls.eq(2);
        var $submit = $wrapper.find('.multi-select-submit');
        var $module = $('<div />', { 'class': 'module nys_section' });
        var $moduleHeader = $('<a />', { 'data-toggle': 'collapse', 'text': 'Make / Model', 'data-target': '#' + ID + '-options-clone', 'class': 'nys_subtitle module-header ' });
        var $optionWrapper = $('<form />', { 'id': ID + '-options-clone', 'class': 'module-body' });
        var $makeClone = $('<select />');
        var $modelClone = $('<select />');
        var $componentClone = $('<select />');
        var $submitClone = $('<button />', { 'class': 'btn multi-select-submit', 'type': 'button', 'text': 'Submit' });

        //
        var AttachTypeFilter = function () {
            $('#' + ID + '-options-clone .filter-wrap').unbind().remove();
            $modelClone.EnhancedListBox();
        };

        var pollInterval;

        var WaitForUpdate = function () {
            $wrapper = $('#' + ID);
            var isLoading = $wrapper.find('[loading="true"]').length;
            if (!isLoading && pollInterval != null) {
                clearInterval(pollInterval);
                UpdateOptions();
            }
        };

        var BindEvents = function () {

            $makeClone.unbind().change(function () {
                $make.attr('loading', "true").val($makeClone.val()).trigger('change');
                pollInterval = setInterval(WaitForUpdate, 100);
            });

            $modelClone.unbind().change(function () {
                $model.attr('loading', "true").val($modelClone.val()).trigger('change');
                pollInterval = setInterval(WaitForUpdate, 100);
            });

            $componentClone.unbind().change(function () {
                $component.attr('loading', "true").val($componentClone.val()).trigger('change');
                pollInterval = setInterval(WaitForUpdate, 100);
            });

            $submitClone.unbind().click(function () {  				
  				$('#u_search_text').val('');
                const url = new URL(window.location);
                url.searchParams.set('search_keyword', '');
                url.searchParams.set('search_prod', '');                
                window.history.pushState({}, '', url);                       
  				window.pageLoad.queryString = '';
  				window.getUrl = function() {
        			return window.location.pathname;
    			}
                $submit.click();
            });

        };

        //
        var UpdateOptions = function () {
            $wrapper = $('#' + ID);
            $controls = $wrapper.find('.nys_search_terms select');
            $make = $controls.eq(0);
            $model = $controls.eq(1);
            $component = $controls.eq(2);
            $submit = $wrapper.find('.multi-select-submit');
            $makeClone.html($make.html());
            $modelClone.html($model.html());
            $componentClone.html($component.html());
            $submitClone.attr('disabled', true);
            if ($submit.is(':disabled')) {
                $submitClone.attr('disabled', 'disabled');
            } else {
                $submitClone.removeAttr('disabled');
            }
            BindEvents();
            AttachTypeFilter();
        };

        var Init = function () {
            $(WRAPPER_SELECTOR).hide();
            if (ID == 'SCHEMATICS') {
                $optionWrapper.append($makeClone, $modelClone, $componentClone, $submitClone);
            } else {
                $optionWrapper.append($makeClone, $modelClone, $submitClone);
            }
            if (!isHome) {
                $('#page-main').before('<div class="home-description"><div class="container-fluid"><div class="product-search"><h2>Popular Parts By Model</h2></div></div></div>');
            } else {
                $optionWrapper.prepend('<label>Popular Parts By Model</label>');
            }
            $module.append($optionWrapper);
            UpdateOptions();
            $('.home-description .product-search').append($module);
        };

        //
        Init();

    })(jQuery);



</script>

<script>

    (function ($) {

        var IsRegistrationPage = function () {
            var path = 'signin.asp';
            return window.location.href.indexOf(path) != -1;
        };

        var DisableElementAction = function (e) {
            e.preventDefault();
            e.stopPropagation();
            JumpToRegistration();
            alert('Log In to Enter Website');
        };

        var JumpToRegistration = function (e) {
            e.preventDefault();
            e.stopPropagation();
            document.querySelector('#landing-registration-form').scrollIntoView({
                behavior: 'smooth'
            });
        };

        var $registerBtn = $('<a />', { 'class': 'register-button' })
        $registerBtn.bind('click', JumpToRegistration);
        $('img[src*="images/marketing-well-placeholder-2.jpg"]').bind('click', JumpToRegistration)
        $('.login-links__create-login').bind('click', JumpToRegistration);
        $('#logon_container').append($registerBtn);

        var IsRegistrationPage = function () {
            var path = 'signin.asp';
            return window.location.href.indexOf(path) != -1;
        };

        var DisableElementAction = function (e) {
            if (IsRegistrationPage()) {
                e.preventDefault();
                e.stopPropagation();
                document.querySelector('#logon_container').scrollIntoView({
                    behavior: 'smooth'
                });
                alert('Log In to Enter Website');
            }
        };


        $('.logo-bar__right, .product-search, #landing-page-main, #retail-footer-1').bind('click', DisableElementAction);

        if (!IsRegistrationPage()) {
            $('.dashboard .home-description').hide();
        }


    })(jQuery);

</script>
        <!-- End Footer Custom Code -->

    <noscript class="noscript">
        WARNING: You will not be able to place an order or use most features of this site with JavaScript disabled
    </noscript>
</div>


<script src="/js/bundles/coreBot.js?376fd1471434e59626597a413962b4402949459c" ></script>


<script src="/js/bundles/coreBotPlugins.js?376fd1471434e59626597a413962b4402949459c" ></script>
        <script src="js/dashboard.js?376fd14"></script>
    </div>
    </div> <!-- END private-mode -->


    <!-- KO Templates -->
    
<div class="interaction-tracker-scripts">

	<script type="text/javascript">
		//setup the main data objects for bindings.
		//This should always run to prevent KO issues.
		var viewModels = viewModels || {};
		var Config = Config || {};

		viewModels.data = ko.observable({});
		viewModels.inbox = ko.observable({});
		Config.userAvatars = {};
	</script>

	
		<style>
			.attachment-list div {
				display: inline-block;
				margin: 0 1em;
			}
		</style>

		<script type="text/javascript">
			viewModels.activity = ko.observable();
			viewModels.errors = ko.observableArray([]);
			viewModels.activityWorkQueues = ko.observableArray([]);
			viewModels.activityTypes = ko.observableArray([]);
			viewModels.activityTags = ko.observableArray([]);
			viewModels.activityPriorities = ko.observableArray([]);
			viewModels.activityLifecycleStages = ko.observableArray([]);
			viewModels.activityCategories = ko.observableArray([]);
			viewModels.activityAssignees = ko.observableArray([]);
			viewModels.users = ko.observableArray([]);
			viewModels.accountUsers = ko.observableArray([]);
			viewModels.accountSelectorList = ko.observableArray([]);
			viewModels.isUsersLoaded = ko.observable(false);
			viewModels.calling = ko.observable('');
			viewModels.detailSlideOut = ko.observable(new DetailSlideOutViewModel());

			if(window['augmentViewModel']) {
				augmentViewModel(viewModels);
			}

			var customerName = " ";
			var customerUsername = "";
			var closeModalOnSubmit = false;
			var useInbox = false;

			var currentUser = {
				id: "",
				phoneNumber: "",
				mobilePhoneNumber: "",
				isInternalUser: false
			};

			var defaultActivityTypeId = "4" || 4; 
			var defaultActivityTemplate = 'crm.activity.detail';

			// This custom ko binding allows for two-way binding on HTML elements
			// with the contenteditable flag. It WILL NOT update the value of
			// the element unless the element has contenteditable="false"
			ko.bindingHandlers.editableHTML = {
				init: function(element, valueAccessor) {
					var $element = $(element);
					var initialValue = ko.utils.unwrapObservable(valueAccessor());
					$element.html(initialValue);
					$element.on('input', function() {
					observable = valueAccessor();
					observable($element.html());
					});
				},
				update: function (element, valueAccessor) {
					var value = ko.utils.unwrapObservable(valueAccessor());

					if (!element.isContentEditable) {
						element.innerHTML = value;
					}
				}
			};

			$(function() {
				//load default information.
				if(Config.contextKey){
					
						getDataFromApi();
					
				} else {
					viewModels.data(ko.mapping.fromJS({}, interactionMapping));
				}
				if(useInbox){
					setTimeout(loadInboxData, 30000);
				}
			});

			/**
			* Loads the bulk of the data from the api for the current entity.
			*/
			function getDataFromApi() {
				if(Config && Config.apiBaseUrl && Config.contextType && Config.contextKey && Config.sessionKey) {
					$.ajax({
						url: Config.apiBaseUrl + Config.contextType + '/' + Config.contextKey + '/WithDetails',
						crossDomain: true,
						method: 'GET',
						headers: { 'Authorization' : 'Bearer ' + Config.sessionKey},
						success: function(data){
							viewModels.data(ko.mapping.fromJS(data, interactionMapping));
						},
						error: function(data){
							console.log('Error loading data')
							viewModels.data(ko.mapping.fromJS({}, interactionMapping));
						}
					});
				}
			}

			/*
			* KO mapping objects
			*/
			var activityMapping = {
				create: function(options) {
					return new ActivityBasicViewModel(options.data);
				},
				key: function(item) {
					return ko.utils.unwrapObservable(item.id);
				}
			};

			var interactionMapping = {
				create: function(options) {
					var entity = new parentEntity(options.data);
					return entity;
				}
			};

			/**************************************************************************************************************
			* Main view model for the interation tracker.
			*/
			var parentEntity = function(data){
				var self = this;

				self.id = ko.observable();
				self.activities = ko.observableArray([]);
				self.activitiesTest = ko.observableArray([]);
				self.activityTypeFilter = ko.observable('');

				self.filterActivities = function(activityTypeId) {
					if (activityTypeId !== undefined) {
						self.activityTypeFilter(activityTypeId);
					}

					var query = {
						"sort": [
							[
								"dateModified",
								"desc"
							]
						],
						"filters": [
							{
								"field": "accountId",
								"filterType": "equals",
								"parameters": [
									self.id()
								]
							}
						],
						"start": 0,
						"rows": 10
					}

					if (self.activityTypeFilter()) {
						query.filters.push({
								"field": "activityType.id",
								"filterType": "equals",
								"parameters": [
									self.activityTypeFilter(),
									null
								]
							})
					}

					if(Config && Config.apiBaseUrl && Config.sessionKey) {
						$.ajax({
							url: Config.apiBaseUrl + 'activities/search?include=notes,createdBy,activityType,account,activityTags.tag',
							cache: false,
							type: 'POST',
							dataType: 'json',
							contentType: "application/json",
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							data: JSON.stringify(query),
							error: function() {
								// Do nothing for now
							},
							success: function(res) {
								var mappedActivities = ko.mapping.fromJS(res.data, activityMapping, self.activities);
							}
						});
					}
				}

				self.newActivity = {
					externalComment: ko.observable(''),
					internalComment: ko.observable(''),
					mentions: ko.observableArray([]),
					activityTags: ko.observableArray([]),
					activityType: ko.observable({ id: defaultActivityTypeId }),
					dateOfActivity: ko.observable(Utilities.formatDateTime()),
					cancelChanges: function() {
						self.newActivity.externalComment('');
						self.newActivity.internalComment('');
						self.newActivity.mentions([]);
						self.newActivity.attachmentGroup.id('');
						self.newActivity.attachmentGroup.attachments([]);
						self.newActivity.activityTags([]);
						self.newActivity.activityType({ id: defaultActivityTypeId });
						self.newActivity.memberUsers([]);
						self.newActivity.requiredMemberUsers([]);
						self.newActivity.showOptions(false);
						self.newActivity.category({});
						self.newActivity.workQueue({});
						self.newActivity.priority({});
						self.newActivity.lifecycleStage({});
						self.newActivity.description('');
						self.newActivity.topic('');
						self.newActivity.onBehalfOf({});
						self.newActivity.accountId(null);

						if (window['Stretchy']) {
							Stretchy.resizeAll();
						}
					},
					keyPressed: function(d, e) {
						if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
							self.newActivity.updateActivity(d);
						}
					},
					updateActivity: function(data) {
						self.createActivity(data);
					},
					relatedTo: ko.observableArray([{
							id: ko.observable(Config.contextKey),
							type: ko.observable(Config.contextType),
							name: Utilities.getTitle()
						}
					]),
					isEditing: ko.pureComputed(function() {
						return !!self.newActivity.externalComment();
					}),
					memberUsers: ko.observableArray([]),
					requiredMemberUsers: ko.observableArray([]),
					tags: ko.observableArray([]),
					availableMembers: ko.observableArray([]),
					attachmentGroup: {
						id: ko.observable(),
						attachments: ko.observableArray([])
					},
					showOptions: ko.observable(false),
					category: ko.observable(),
					workQueue: ko.observable(),
					priority: ko.observable(),
					lifecycleStage: ko.observable(),
					description: ko.observable(''),
					topic: ko.observable(''),
					onBehalfOf: ko.observable(),
					accountId: ko.observable(),
					submitTicketCallback: function(data) {},
					wasSubmitted: ko.observable(false),
					showTicketConfirmation: ko.observable(false)
				};

				self.newActivity.description.subscribe(function(oldValue) {
					if (oldValue == '') {
						self.newActivity.dateOfActivity(Utilities.formatDateTime(Date.now()));
						self.newActivity.requiredMemberUsers.push({ id: currentUser.id, name: customerName });
					}
				}, null, "beforeChange");

				self.newActivity.accountId.subscribe(function(newValue) {
					self.newActivity.onBehalfOf(undefined);
					Utilities.loadAccountUsers(newValue);
				});

				setupAttachmentGroup(self.newActivity, 'activities');

				//setTimeout(function() {
				//	loadAvailableMembers(Config.contextType || 'users', Config.contextKey || Config.customerKey, function(data) {
				//		self.newActivity.availableMembers(data);
				//	});
				//}, 1000);

				ko.mapping.fromJS(data.entity, { 'activities': activityMapping}, self);

				self.url = self.url || '';
				self.emailAddress = self.emailAddress || '';

				if (_.isFunction(self.activities) && self.activities()) {
					self.activities.sort(function(a,b) {
						if (b.dateModified() > a.dateModified()) return 1;
						if (b.dateModified() < a.dateModified()) return -1;
						return 0;
					});
				}

				viewModels.activityTypes(data.activityTypes);
				viewModels.activityTags(data.activityTags);

				self.createActivity = function(data, callback){

					newActivity = self.newActivity;

					postData = {
						"dateOfActivity" : newActivity.dateOfActivity(),
						"activityType" : newActivity.activityType(),
						"topic": newActivity.topic(),
						"description" : newActivity.description(),
						"members": newActivity.memberUsers().map(function (m) {
							return { user: { id: m } };
						}),
						"activityTags" : newActivity.tags().map(function(t) {
							return { tag : { id: t}}
						}),
						"category": newActivity.category(),
						"workQueue": newActivity.workQueue(),
						"assignedTo": newActivity.workQueue() && newActivity.workQueue().manager,
						"priority": newActivity.priority(),
						"lifecycleStage": newActivity.lifecycleStage(),
						"onBehalfOf": newActivity.onBehalfOf()
					};

					// Add a note if...
					if (newActivity.internalComment() || newActivity.externalComment() 
						|| newActivity.attachmentGroup.attachments().length > 0) {
						if (!newActivity.internalComment() && !newActivity.externalComment()) {
							sPluralAttachmentText = utils.plural('Attachment', newActivity.attachmentGroup.attachments().length);
							newActivity.externalComment('[' + sPluralAttachmentText + ' added]');
						}
						postData.notes = [
								{
									"ExternalText" : newActivity.externalComment(),
									"InternalText" : newActivity.internalComment(),
									"Mentions" : newActivity.mentions().map(function(m) {
										return { user: { id: m } };
									}),
									"AttachmentGroup" : {
										"Attachments" : ko.toJS(newActivity.attachmentGroup.attachments())
									}
								}
							];
					}

					// If the accountId was set on the newActivity, override the context and add the Activity directly to that Account
					var activityEntityType = 'accounts';
					var activityEntityId = Config.accountKey;
					if (Config.contextKey != '' && Config.contextType != ''){
						activityEntityType = Config.contextType;
						activityEntityId = Config.contextKey;
					}
					if (newActivity.accountId()) {
						activityEntityType = 'accounts';
						activityEntityId = newActivity.accountId();
					}

					jQuery.ajax({
						url: Config.apiBaseUrl + activityEntityType + '/' + activityEntityId + '/Activities',
						data: JSON.stringify(postData),
						cache: false,
						type: 'POST',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request) {
							if (typeof(callback) == "function") {
								callback(data);
							}
							else {
								var addedActivity = new ActivityViewModel(data);
								viewModels.data().activities.unshift(addedActivity);
							}
						},
						error: function(data) {
							alert('Error posting Activity');
						}
					});

					newActivity.cancelChanges();
				};

				self.addNote = function(data){
					var activity = data;
					newNote = data.newNote;
					activityId = data.id();

					// Since currently the only way to add attachments to an Activity is on
					// a Note, and Notes require either internal or external text, this
					// allows the User to add attachments without typing any Note text
					if (!newNote.internalComment() && !newNote.externalComment() 
						&& newNote.attachmentGroup.attachments().length > 0) {
							sPluralAttachmentText = utils.plural('Attachment', newNote.attachmentGroup.attachments().length);
							newNote.externalComment('[' + sPluralAttachmentText + ' added]');
					}

					postData = {
						"ExternalText" : newNote.externalComment(),
						"InternalText" : newNote.internalComment(),
						"Mentions" : newNote.mentions().map(function(m) {
									return { User: { id: m } };
						}),
						"AttachmentGroup" : {
							"Attachments" : ko.toJS(newNote.attachmentGroup.attachments())
						}
					};

					jQuery.ajax({
						url: Config.apiBaseUrl + 'activities/' + activityId + '/notes',
						data: JSON.stringify(postData),
						type: 'POST',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request){
							var note = ko.mapping.fromJS(data);
							setupAttachmentGroup(note, 'notes');
							activity.addAttachment(note.attachmentGroup.attachments());
							activity.notes.unshift(note);
							activity.initialize(activity);
							if (activity.onUpdate && typeof(activity.onUpdate) == 'function') {
								activity.onUpdate();
							}

						},
						error: function(data) {
								alert('Error posting Comment');
						}
					});

					newNote.externalComment('');
					newNote.internalComment('');
					newNote.mentions([]);
					newNote.attachmentGroup.id('');
					newNote.attachmentGroup.attachments([]);
				};


				self.getEntityTemplate = function(data){
					return 'crm.' + Config.contextType;
				};

				self.drawAddress = function(data){
					var addressText = '';

					if(data.addressLine1()){
							addressText += data.addressLine1();
					}
					if(data.addressLine2()){
							addressText += '<BR>' + data.addressLine2();
					}
					if(data.addressLine3()){
							addressText += '<BR>' + data.addressLine3();
					}
					if(data.city() || data.stateProvince() || data.postalCode()){
							addressText += '<BR>' + data.city() + ' ' + data.stateProvince() + ', ' + data.postalCode();
					}
					if(data.country()){
							addressText += '<BR>' + data.country();
					}

					return addressText;
				};
			};

			/**************************************************************************************************************
			* Basic view model for an Activity. This is used for a simple card view, and has only the properties and methods
			* needed to display a simple representation of an Activity.
			*/
			function ActivityBasicViewModel(data) {
				var activity = this;

				// ActivityBasic Properties ------------------------------------------------------------
				activity.topic = ko.observable('');
				activity.description = ko.observable('');
				activity.showTopic = ko.observable(false);

				ko.mapping.fromJS(data, {}, activity);

				// ActivityBasic Methods ----------------------------------------------------------------
				activity.view = function() {
						if(useInbox) {
							var inbox = viewModels.inbox();
							if(inbox.close) {
								inbox.close();
							}
						}

										loadAndViewActivity(activity.id(), function(){
						viewModels.data().filterActivities();
					});
				};

				activity.clearNotification = function() {
					if(Config && Config.apiBaseUrl && Config.sessionKey) {
						$.ajax({
							url: Config.apiBaseUrl + 'activities/inbox/' + activity.id() + '/clearNotify',
							crossDomain: true,
							type: 'POST',
							method: 'POST',
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							contentType: "application/json",
							success: function(data){
								var inbox = viewModels.inbox();
								inbox.activities.remove(activity);
								inbox.selectActivity(null);
							},
							error: function(data){
								console.log("error clearing notification");
							}
						});
					}
				};

				activity.updateShowTopic = function() {
					activity.showTopic(
						!!activity.topic() &&
						activity.topic().substr(0,100) != activity.description().substr(0,100)
					)
				}

				activity.topic.subscribe(activity.updateShowTopic);
				activity.description.subscribe(activity.updateShowTopic);
				activity.updateShowTopic();
			}


			/**************************************************************************************************************
			* Advanced view model for an Activity. This is used for a detail view, and has all of the properties and methods
			* needed to interact with and update an Activity. It inherits from ActivityBasicViewModel.
			*/
			function ActivityViewModel(data) {
				ActivityBasicViewModel.call(this, data);
				var activity = this;

				// Activity Properties ----------------------------------------------------------------
				activity.lifecycleStage = ko.observable({});
				activity.workQueue = ko.observable({});
				activity.priority = ko.observable({});
				activity.category = ko.observable({});
				activity.assignedTo = ko.observable({});
				activity.onBehalfOf = ko.observable({});
				activity.relatedTo = ko.observableArray([]);
				activity.memberUsers = ko.observableArray([]);
				activity.requiredMemberUsers = ko.observableArray([]);
				activity.tags = ko.observableArray([]);
				activity.availableMembers = ko.observableArray([]);
				activity.isEditing = ko.observable(false);
				activity.logSortOrder = ko.observable('');
				activity.changeLog = ko.observableArray([]);
				activity.combinedLog = ko.observableArray([]);
				activity.account = ko.observable();
				activity.accountId = ko.observable();

				// Activity Methods -----------------------------------------------------------------------------
				activity.addAttachment = function(attachments) {
					if (activity.attachmentGroup) {
						activity.attachmentGroup.attachments(_.union(activity.attachmentGroup.attachments(), attachments));
					}
				};

				activity.edit = function() {
					activity.isEditing(true);
				};

				activity.cancelChanges = function(data) {
					getActivityWithDetails(activity.id(), function(data) {
						activity.initialize(data.activity);
					});
					activity.isEditing(false);
				};

				activity.updateActivity = function(data, event, additionalPostData) {
					activity.isEditing(false);

					postData = {
						"dateOfActivity" : activity.dateOfActivity(),
						"activityType" : {
							id: activity.activityType.id(),
						},
						"activityTags" : activity.tags().map(function(t) {
							return { tag: { id: t } };
						}),
						"members": activity.getCombinedMembers(),
						"topic": activity.topic(),
						"description": activity.description()
					};

					if (!activity.account() && activity.accountId()) {
						postData["account"] = {
							id: activity.accountId()
						}
					}

					if (additionalPostData) {
						for (var attrname in additionalPostData) { 
							postData[attrname] = additionalPostData[attrname];
						}
					}

					jQuery.ajax({
						url: Config.apiBaseUrl + 'activities/' + activity.id(),
						data: JSON.stringify(postData),
						cache: false,
						type: 'PATCH',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request) {
							// Reinitialize the activity with the updated data
							activity.initialize(data);
							// Reset available Members and the Related To
							activity.availableMembers(undefined);
							activity.relatedTo(undefined);
							activity.loadRelatedData();
							// Call the onUpdate function if set
							if (activity.onUpdate && typeof(activity.onUpdate) == 'function') {
								activity.onUpdate();
							}

						},
						error: function(data) {
							alert('Error posting Activity');
						}
					});

				};

				activity.updateTicket = function() {
					var postData = {
						lifecycleStage: viewModels.activity().lifecycleStage(),
						priority: 		viewModels.activity().priority(),
						workQueue: 		viewModels.activity().workQueue(),
						category: 		viewModels.activity().category(),
						assignedTo: 	viewModels.activity().assignedTo() || { id: '' },
						onBehalfOf:		viewModels.activity().onBehalfOf()
					};
					viewModels.activity().updateActivity({},{},postData);
					viewModels.activity().isEditing(false);
				}

				activity.selectItemAdded = function() {
					debugger;
				};

				activity.activityTitle = function(){
					var sCreatedBy = activity.createdBy.fullName();
					var sAccountName = ''; // viewModels.data().name();

					if (_.isFunction(activity.activityType)) {
						return "Activty Type Not Set!!!";
					}

					var template = activity.activityType.defaultTopicTemplate();
					template = template.replace('{CreatedBy}', sCreatedBy);
					template = template.replace('{EntityName}', sAccountName);
					return template;
				};

				activity.resetMemberUsers = function() {
					var requiredIds = {}
					if (activity.assignedTo() && activity.assignedTo().id) {
						requiredIds[activity.assignedTo().id] = true;
					}
					if (activity.createdBy && activity.createdBy.id()) {
						requiredIds[activity.createdBy.id()] = true;
					}
					if (activity.onBehalfOf() && activity.onBehalfOf().id) {
						requiredIds[activity.onBehalfOf().id] = true;
					}
					// memberUsers = all members *except* the assignedTo, createdBy, and onBehalfOf
					activity.memberUsers(
						activity.members()
						.filter(function(m) {
							var userId = ko.utils.unwrapObservable(m.user.id);
							return !requiredIds[userId];
						})
						.map(function (m) {
							return ko.utils.unwrapObservable(m.user.id);
						})
					);
					// requiredMemberUsers = *only* the assignedTo, createdBy, and onBehalfOf
					activity.requiredMemberUsers(
						activity.members()
						.filter(function(m) {
							var userId = ko.utils.unwrapObservable(m.user.id);
							return requiredIds[userId];
						})
						.map(function (m) {
							return {
								id: ko.utils.unwrapObservable(m.user.id),
								name: ko.utils.unwrapObservable(m.user.fullName())
							};
						})
					);
				};

				activity.getCombinedMembers = function() {
					var requiredMemberIds = activity.requiredMemberUsers().map(function(m) {
						return m.id;
					});
					var memberIds = _.uniq(_.union(activity.memberUsers(), requiredMemberIds));
					
					return memberIds.map(function (m) {
						return { user: { id: m } };
					});
				}

				activity.loadRelatedData = function(callback) {

					var request1;
					var request2;
					var request3;

					//we will preload the members list with the current members of the activity.
					//this will prevent the member selection from appearing after the ajax call.
					var availableMembers = ko.utils.unwrapObservable(activity.availableMembers);
					if (!availableMembers || !availableMembers.length) {
						//get all current members to add them to the list of available members.
						var members = ko.mapping.toJS(activity.members).map(function (m) {return m.user});
						activity.availableMembers(members);

						//this has to be called after availableMembers loads because they are not in the selection yet.
						activity.resetMemberUsers();
					}

					var relatedTo = ko.utils.unwrapObservable(activity.relatedTo);
					if (!relatedTo || !relatedTo.length) {

						request1 = jQuery.ajax({
							url: Config.apiBaseUrl + 'activities/' + activity.id() + '/relatedTo',
							cache: false,
							type: 'GET',
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							dataType: 'json',
							contentType: "application/json",
							success: function(data,status,request) {
								ko.mapping.fromJS(data, {}, activity.relatedTo);

								for (var i in data) {
									var relatedTo = data[i];
									loadAvailableMembers(relatedTo.type, relatedTo.id, function(data) {

										//get all current members to add them to the list of available members.
										var members = ko.mapping.toJS(activity.availableMembers);

										//merge the two lists and removed duplicates based on their ids.
										activity.availableMembers(_.uniq(_.union(data, members), false, 'id'));
										activity.newNote.availableMembers(activity.availableMembers());

										//this has to be called after availableMembers is set or it will clear the selection list.
										activity.resetMemberUsers();
									});
								}
							},
							error: function(data) {
									console.log('Error getting related to');
							}
						});
					}

					var activityTypes = ko.utils.unwrapObservable(viewModels.activityTypes);
					if (!activityTypes || !activityTypes.length) {
						request2 = jQuery.ajax({
							url: Config.apiBaseUrl + 'activityTypes',
							cache: false,
							type: 'GET',
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							dataType: 'json',
							contentType: "application/json",
							success: function(data,status,request) {
									ko.mapping.fromJS(data, {}, viewModels.activityTypes);
							},
							error: function(data) {
									console.log('Error getting activity types');
							}
						});
					}

					var activityTags = ko.utils.unwrapObservable(viewModels.activityTags);
					if(!activityTags || !activityTags.length) {
						request3 = jQuery.ajax({
							url: Config.apiBaseUrl + 'activityTags',
							cache: false,
							type: 'GET',
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							dataType: 'json',
							contentType: "application/json",
							success: function(data,status,request) {
									viewModels.activityTags(data);
									activity.tags(ko.mapping.toJS(activity.activityTags).map(function (m) {return ko.utils.unwrapObservable(m.tag.id);}));
							},
							error: function(data) {
									console.log('Error getting activity tags');
							}
						});
					}

					if (callback) {
						$.when(request1, request2, request3).done(callback);
					}

				};

				activity.loadAccountUsers = function (callback) {
					callback = callback || function() {};

					if (activity.account() && activity.account().id) {
						Utilities.loadAccountUsers(activity.account().id(), callback);
					}
				}

				activity.sortLog = function(sortOrder) {
					if (activity.combinedLog()) {
						activity.combinedLog.sort(function(a,b) {
							var sortArray = [a, b];
							if (sortOrder == "desc") sortArray.reverse();
							if (sortArray[0].dateCreated() > sortArray[1].dateCreated()) return 1;
							if (sortArray[0].dateCreated() < sortArray[1].dateCreated()) return -1;
							return 0;
						});
					}
					activity.logSortOrder(sortOrder || "asc");
				};

				activity.initialize = function(data) {
					ko.mapping.fromJS(data, {}, activity);
					setupAttachmentGroup(activity, 'activities');
					activity.attachmentGroup.id(activity.id());
					activity.combinedLog([]);
					if (activity.notes()) {
						activity.notes().forEach(function(note){
							setupAttachmentGroup(note, 'notes');
							activity.addAttachment(note.attachmentGroup.attachments());
							activity.combinedLog.push(note);
						});
					}
					if (activity.changeLog()) {
						activity.changeLog().forEach(function(entry){
							if (entry.fromData && entry.fromData() && typeof(entry.fromData()) != 'object')  {
								entry.fromData(JSON.parse(entry.fromData()));
								entry.toData(JSON.parse(entry.toData()));
								entry.propertyChanged = {};
								for (prop in entry.fromData()) {
									var fromProp = entry.fromData()[prop];
									var toProp = entry.toData()[prop];
									entry.propertyChanged[prop] = 
										!((!fromProp && !toProp) || (fromProp && toProp && fromProp.id == toProp.id));
								}
							}
							activity.combinedLog.push(entry);
						});
					}
					activity.sortLog("desc");
					activity.dateOfActivity(Utilities.formatDateTime(activity.dateOfActivity()));
					activity.lastNote = activity.notes()[activity.notes().length - 1];
					activity.tags(ko.mapping.toJS(activity.activityTags).map(function (m) {return ko.utils.unwrapObservable(m.tag.id);}));
					activity.originalData = data;
					if (activity.activityType && activity.activityType.defaultDetailTemplate()) {
						activity.primaryTemplate = activity.activityType.defaultDetailTemplate();
					} else {
						activity.primaryTemplate = defaultActivityTemplate;
					};
					// Setup selectables (sets an object on Activity to the matching one from the list of available options)
					Utilities.setupSelectable(activity.priority, viewModels.activityPriorities);
					Utilities.setupSelectable(activity.workQueue, viewModels.activityWorkQueues);
					Utilities.setupSelectable(activity.lifecycleStage, viewModels.activityLifecycleStages);
					Utilities.setupSelectable(activity.category, viewModels.activityCategories);
					Utilities.setupSelectable(activity.assignedTo, viewModels.activityAssignees);
					activity.loadAccountUsers(function(){
						Utilities.setupSelectable(activity.onBehalfOf, viewModels.accountUsers);
					});
				};


				// Initialize Activity ----------------------------------------------------------------

				// Initialize function allows for re-initializing an Activity			
				activity.initialize(data);
				
				activity.newNote = {
					externalComment: ko.observable(''),
					internalComment: ko.observable(''),
					mentions: ko.observableArray([]),
					availableMembers: ko.observableArray([]),
					showOptions: ko.observable(false),
					isValid: ko.observable(false),
					buttonText: ko.observable(''),
					keyPressed: function(d, e) {
						if ((e.ctrlKey || e.metaKey) && (e.keyCode == 13 || e.keyCode == 10)) {
							viewModels.data().addNote(activity);
						}
					}
				};

				activity.newNote.internalComment.subscribe(function(comment){
					var availableMembers = ko.utils.unwrapObservable(activity.newNote.availableMembers);
					if (comment.length == 1 && (!availableMembers || !availableMembers.length)) {
						activity.loadRelatedData();
					}
				});

				setupAttachmentGroup(activity.newNote, 'notes');

				// All of the subscribe functions below are because Knockout's computed properties
				// SUCK and are unreliable. Bring on Vue JS!!! (Steven H - 1/31/2018)

				activity.isEditing.subscribe( function(newValue) {
					if (newValue) {
						activity.loadRelatedData();
					}
				});
				
				activity.checkForValidNote = function(){
					var isValid = false;
					var buttonText = "Reply" + (currentUser.isInternalUser ? ", Note," : "") + " or Attachment Required";
					var attachmentMsg = '';
					var internalMsg = '';
					var externalMsg = '';
					if (activity.newNote.attachmentGroup.attachments().length > 0) {
						attachmentMsg = "Add Attachment";
						isValid = true;
					}
					if (activity.newNote.internalComment()) {
						internalMsg = "Add Note";
						isValid = true;
					}
					if (activity.newNote.externalComment()) {
						externalMsg = "Send Reply";
						isValid = true;
					}
					buttonText = (externalMsg + (externalMsg && internalMsg ? ' and ' : '') + internalMsg)
									|| attachmentMsg || buttonText;

					activity.newNote.isValid(isValid);
					activity.newNote.buttonText(buttonText);
				};

				activity.newNote.internalComment.subscribe(activity.checkForValidNote);
				activity.newNote.externalComment.subscribe(activity.checkForValidNote);
				activity.newNote.attachmentGroup.attachments.subscribe(activity.checkForValidNote);
				activity.checkForValidNote();

			}

			ActivityViewModel.prototype = Object.create(ActivityBasicViewModel.prototype);
			ActivityViewModel.prototype.constructor = ActivityViewModel;

			/**************************************************************************************************************
			* View model for the Detail Slide Out. This works like a modal, and can be loaded with any Knockout template.
			*/
			function DetailSlideOutViewModel() {
				var detailSO = this;

				detailSO.defaultTemplate = 'crm.no.template';
				detailSO.isOpen = ko.observable(false);
				detailSO.sidebarOpen = ko.observable(false);
				detailSO.templateName = ko.observable(detailSO.defaultTemplate);
				detailSO.data = ko.observable({});
				detailSO.wasUpdated = ko.observable(false);
				detailSO.onClose = undefined;

				detailSO.close = function() {
					detailSO.isOpen(false);
					if (detailSO.onClose && typeof(detailSO.onClose) == 'function') {
						detailSO.onClose(detailSO.wasUpdated());
					}
				};

				detailSO.open = function() {
					detailSO.isOpen(true);
				}

				detailSO.toggleSidebar = function() {
					detailSO.sidebarOpen(!detailSO.sidebarOpen());
				}

			}

			/**************************************************************************************************************
			* Utility function to configure the attachment group on an entity. It sets everything to be used with 
			* the attachment upload binding handler.
			*/
			function setupAttachmentGroup(entity, entityName) {
				if (!entity.attachmentGroup || _.isFunction(entity.attachmentGroup)) {
					entity.attachmentGroup = {
						id: ko.observable(),
						attachments: ko.observableArray()
					};
				}

				entity.attachmentGroup.entityName = entityName

				entity.attachmentGroup.removeAttachment = function(data) {
					var attachmentIndex = _.findIndex(entity.attachmentGroup.attachments(), function(attachment) {
						return attachment.name() == data.model.name() && attachment.location() == data.model.location();
					});
					if(attachmentIndex != -1) {entity.attachmentGroup.attachments.splice(attachmentIndex, 1);}
				}

				entity.attachmentGroup.add = function() {
					modal.open({
						body: '<div id="modalTemplate" data-bind="template: \'crm.attachments.addModal\'"></div>',
						title: 'Attach Files',
						size: 'small',
						backdrop: 'static', 
						footer: '<button class="btn btn-primary" onClick="modal.done();">Done</button>'
					});
					setTimeout(function() {
						var modalTemplate = $('#modalTemplate');
						ko.applyBindings(entity, modalTemplate[0]);

						modalTemplate.focus();
					}, 10);
				}
			}

			/**
			* Utility function to load the members that can be added to an activity.
			* @param {string} entity The name of the entity to load.
			* @param {string} key The Id of the entity to load.
			* @callback callback The function to call and pass the loaded data.
			*/
			function loadAvailableMembers(entity, key, callback) {
				callback = callback || function() {};

				if(Config && Config.apiBaseUrl && Config.sessionKey && entity && key) {
					jQuery.ajax({
						url: Config.apiBaseUrl + entity + '/' + key + '/availableMembers',
						cache: true,
						type: 'GET',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request) {
							callback(data);
						},
						error: function(data) {
							console.log('Error getting availableMembers');
						}
					});
				}
			}

			/**************************************************************************************************************
			* Utility function to view an Activity in the Detail Slide Out.
			* @param {ActivityViewModel} activityVM The ActivityViewModel to view. It should already be loaded with data.
			*/
			function setupActivityToView(activityVM) {
				viewModels.activity = viewModels.activity || ko.observable();
				viewModels.activity(activityVM);
				viewModels.activity().loadRelatedData();
			};

			/**************************************************************************************************************
			* Utility function to view an Activity in the Detail Slide Out.
			* @param {ActivityViewModel} activityVM The ActivityViewModel to view. It should already be loaded with data.
			*/
			function viewActivity(activityVM, onClose) {
				viewModels.detailSlideOut().templateName(viewModels.detailSlideOut().defaultTemplate);
				viewModels.detailSlideOut().data({});
				viewModels.detailSlideOut().wasUpdated(false);

				setupActivityToView(activityVM);
				viewModels.activity().onUpdate = function(){
					viewModels.detailSlideOut().wasUpdated(true);
				};

				viewModels.detailSlideOut().data(viewModels.activity);
				viewModels.detailSlideOut().templateName(viewModels.activity().primaryTemplate);
				viewModels.detailSlideOut().onClose = onClose|| function() {
					viewModels.activity().cancelChanges();
				};
				viewModels.detailSlideOut().open();
			};

			/**************************************************************************************************************
			* Utility function to load an Activity from the API with all of its supporting lists.
			* @param {int} activityId The id of the Activity to view.
			* @param {function} callback The callback function 
			*/
			function getActivityWithDetails(activityId, callback) {
				callback = callback || function() {};

				if(Config && Config.apiBaseUrl && Config.sessionKey) {
					$.ajax({
						url: Config.apiBaseUrl + 'activities/' + activityId + '/withDetails',
						crossDomain: true,
						method: 'GET',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						contentType: "application/json",
						success: function(data){
							var assignees = _.filter(data.activityAssignees, function(assignee){
								return !assignee.username.includes('@cimcloud.com');
							});
							viewModels.activityTypes(data.activityTypes);
							viewModels.activityTags(data.activityTags);
							viewModels.activityWorkQueues(data.workQueues);
							viewModels.activityPriorities(data.activityPriorities);
							viewModels.activityLifecycleStages(data.activityLifecycleStages);
							viewModels.activityCategories(data.activityCategories);
							viewModels.activityAssignees(assignees.sort(function(a,b) {
								return a.firstName < b.firstName ?  -1 : 1;
							}));
							callback(data);
						},
						error: Utilities.ajaxError
					});
				}
			};

			/**************************************************************************************************************
			* Utility function to load an Activity by Id and then view it in the Detail Slide Out.
			* @param {int} activityId The Id of the Activity to view. An AJAX call will get the data for it.
			*/
			function loadAndViewActivity(activityId, onClose) {
				getActivityWithDetails(activityId, function(data) {
					viewActivity(new ActivityViewModel(data.activity), onClose);
				});		
			};
			
			/**************************************************************************************************************
			* Additional utility functions.
			*/
			if (!window['Utilities']) {
				Utilities = {};
			}
			Utilities.formatDateTime = function(dateTime) {
				if (window['moment']) {
					// moment initialization with string is being deprecated, so...
					var dt = new Date(dateTime);
					return moment(dt).format('M/DD/YYYY h:mm A')
				}
			};
			Utilities.getIconFromEntityType = function(type) {
				switch(type) {
					case 'Account':
					case 'accounts':
						return 'icon-building';
					case 'User':
					case 'users':
						return 'icon-user';
					case 'Order':
					case 'orders':
						return 'icon-shopping-cart';
					case 'Invoice':
					case 'inoices':
						return 'icon-file-text';
				}
			};
			Utilities.getTitle = function() {
				return ko.pureComputed(function() {
					if (viewModels.data() && viewModels.data().id) {
						switch(Config.contextType) {
							case 'Account':
							case 'accounts':
								return viewModels.data().name() + ' (' + viewModels.data().referenceId() + ')';
							case 'User':
							case 'users':
								return viewModels.data().fullName();
							case 'Order':
							case 'orders':
								return viewModels.data().orderNumber();
							case 'Invoice':
							case 'inoices':
								return viewModels.data().invoiceNumber();
						}
					}
					return '';
				});
			};

			Utilities.userInitials = function(person){
				var initials = '?';
				if(person && person.firstName && person.lastName){
					initials = person.firstName().substr(0,1).toUpperCase() + person.lastName().substr(0,1).toUpperCase();
				}
				return initials;
			};

			Utilities.userFullName = function(person){
				var fullname = 'Unknown User';
				if(person.firstName && person.lastName){
					fullname = person.firstName() + ' ' + person.lastName();
				}
				return fullname;
			};

			Utilities.userAvatar = function(person){
				if(!person || !person.id) return '';
				var personId = ko.utils.unwrapObservable(person.id);

				//added "seed" property so the colors are consistent per user.

				if(Config.userAvatars[personId]){
					return Config.userAvatars[personId].color;
				}else{
					var colorHex = randomColor({ 
						hue: 'random',
						seed: person.fullName(),
						luminosity: 'dark' // dark, light, bright
					});
					Config.userAvatars[personId] = {color: colorHex};
					return colorHex;
				}
			};

			Utilities.setupSelectable = function(observableItem, observableList) {
				if (observableItem && observableItem() && observableList && observableList()) {
					var item = ko.mapping.toJS(observableItem());
					var obj = _.find(observableList(), function (obj) { return obj.id === item.id; });
					if (obj) {
						observableItem(obj);
					}
					else {
						observableList.push(item);
						observableItem(item);
					}
				}
			}

			Utilities.searchAccounts = function(query, callback) {
				callback = callback || function() {};

				if (!(query.length && query.length > 0)) return callback();
				if(Config && Config.apiBaseUrl && Config.sessionKey) {
					$.ajax({
						url: Config.apiBaseUrl + 'accounts/search',
						cache: false,
						type: 'POST',
						dataType: 'json',
						contentType: "application/json",
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						data: JSON.stringify({
							fields: [
								{
									name: "number"
								},
								{
									name: "name"
								}
							],
							sort: [
								[
									"name",
									"asc"
								]
							],
							filters: [],
							start: 0,
							rows: 25,
							fullTextSearch: {
								searchPhrase: query,
								suggestedFields: [
									"number",
									"name"
								]
							}
						}),
						error: function() {
							callback();
						},
						success: function(res) {
							callback(res.data);
						}
					});
				} else {
					return callback();
				}
			}

			Utilities.loadAccountUsers = function (accountId, callback) {
				callback = callback || function() {};

				if (accountId && Config && Config.apiBaseUrl && Config.sessionKey) {
					jQuery.ajax({
						url: Config.apiBaseUrl + 'accounts/' + accountId + '/users',
						cache: true,
						type: 'GET',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request) {
							viewModels.accountUsers(data);
							callback(data);
						},
						error: function(data) {
							console.log('Error getting Activity Account Users');
						}
					});
				}
			}

			/**************************************************************************************************************
			* Inbox
			*/

			//KO Mapping object.
			var inboxMapping = {
				create: function(options) {
					return new InboxViewModel(options.data);
				}
			};

			function loadInboxData() {
				if(Config && Config.apiBaseUrl && Config.sessionKey) {
					$.ajax({
						url: Config.apiBaseUrl + 'activities/inbox',
						crossDomain: true,
						method: 'GET',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						contentType: "application/json",
						success: function(data){
							if (viewModels.inbox().selectedActivity) {
								ko.mapping.fromJS(data, inboxMapping, viewModels.inbox);
							} else {
								viewModels.inbox(ko.mapping.fromJS(data, inboxMapping));
							}
						},
						error: function(data){
							ko.mapping.fromJS({}, inboxMapping, viewModels.inbox);
						}
					});
				}
				// auto refresh after 30 seconds.
				setTimeout(loadInboxData, 30000);
			}

			/**************************************************************************************************************
			* View Model for the Inbox.
			*/
			function InboxViewModel(data) {
				var self = this;

				self.activities = ko.observableArray([]);
				self.selectedActivity = ko.observable();

				ko.mapping.fromJS(data, { 'activities': activityMapping}, self);

				self.selectActivity = function(activity) {
					self.selectedActivity(activity);
				}

				self.open = function() {
					$('html').addClass('drawer-open');
				};

				self.close = function() {
					$('html').removeClass('drawer-open');
				};

				self.headerClick = function() {
					$('html').toggleClass('drawer-open');
				}

				$(document).on('click', function(e) {
					if ($(e.target).closest('.drawer').length === 0) {
						viewModels.inbox().close();
					}
				});
			}

			/**************************************************************************************************************
			* More utility functions
			*/
			function dial(entity, key, description) {
				return function () {
					console.log('Dialing...');
					var callFrom = $('#callFrom').val();
					viewModels.calling(description);

					if(Config && Config.apiBaseUrl && Config.sessionKey) {
						$.ajax({
							url: Config.apiBaseUrl + entity + '/' + key + '/call',
							cache: false,
							type: 'POST',
							headers: {
								'Authorization' : 'Bearer ' + Config.sessionKey
							},
							contentType: "application/json",
							data: JSON.stringify({
								from: callFrom
							}),
							success: function(data,status,request){
								setTimeout(function() {
									$('#modalCalling').modal('hide');
								}, 5000)
							},
							error: function(data) {
								$('#modalCalling').modal('hide');
								alert('Could not start call');
							}
						});
					} else {
						$('#modalCalling').modal('hide');
						alert('Could not start call');
					}
				}
			}

			$(function () {
				$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
					var target = $(e.target).attr("href") // activated tab
					if(Config && Config.apiBaseUrl && Config.contextType && Config.contextKey) {
						if (target ==='#makeCallTab' && !viewModels.isUsersLoaded()) {
							if(Config && Config.apiBaseUrl && Config.contextType && Config.contextKey && Config.sessionKey) {
								$.ajax({
									url: Config.apiBaseUrl + Config.contextType + '/' + Config.contextKey + '/users',
									type: 'GET',
									headers: {
										'Authorization' : 'Bearer ' + Config.sessionKey
									},
									dataType: 'json',
									contentType: "application/json",
									success: function(data,status,request){
										ko.mapping.fromJS(data, {}, viewModels.users);
										viewModels.isUsersLoaded(true);
									},
									error: function(data) {

									}
								});
							}
						}
					}
				});
			});

			//http://stackoverflow.com/questions/11381673/detecting-a-mobile-browser
			function isMobile() {
				var check = false;
				(function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
				return check;
			};

		</script>

		<!-- Draw the Interaction (Activity) Tracker ****************************************************************** -->
		


		<script>
			//*************************************************************************************************************
			//knockout binding hander for attachments. Internally it uses dropzone.
			//This can technically support attachments for any entity that has an attachmentGroup.
			ko.bindingHandlers.attachmentUpload = {
				defaultOptions: {
					url: '#',
					method: 'post',
					parallelUploads: 2,
					maxFilesize: 10,
					paramName: 'file',
					uploadMultiple: false,
					acceptedFiles: '.jpg, .jpeg, .png, .bmp, .gif, .doc, .docx, .xls, .xlsx, .csv, .txt, .zip, .pdf, .msg',
					accept: function(file, done) {
						if (file) {
							if (!file.type) {
								var ext = file.name.split('.').pop();
								if (ext === 'msg') {
									Object.defineProperty(file, 'type', { value: 'application/vnd.ms-outlook' });
								}
							}
							done();
						}
					},
					entity: 'activities',
					addRemoveLinks: true,
					dictDefaultMessage: '<p><i class=icon-paperclip></i> <b>Add file(s)</b>, or drop them here to upload.</p>' + 
															'<p class="text-small">' +
																'Supported File Types: <br>' +
																'.jpg, .jpeg, .png, .bmp, .gif, .doc, .docx, .xls, .xlsx, .csv, .txt, .zip, .pdf, .msg' +
															'</p>',
					dictFileTooBig: 'File is too big ({{filesize}} MB). Max file size is {{maxFilesize}} MB.',
					error: function(message) {
						Utilities.ajaxError("Attachment Error", message)();
					}
				},
				init: function(element, valueAccessor, allBindings, viewModels, bindingContext) {

					Dropzone.autoDiscover = false;

					var options = valueAccessor();
					var entity = options.value;

					$.extend(options, ko.bindingHandlers.attachmentUpload.defaultOptions);

					if (options.init) {
						options.__init = options.init;
					}

					options.init = function() {
						var dz = this;
						var formPostData = {};

						if(Config && Config.apiBaseUrl && Config.sessionKey) {
							jQuery.ajax({
								url: Config.apiBaseUrl + 'attachments/FormPostData',
								cache: false,
								type: 'GET',
								headers: {
									'Authorization' : 'Bearer ' + Config.sessionKey
								},
								dataType: 'json',
								contentType: "application/json",
								success: function(data,status,request) {
									formPostData = data;
									dz.options.url = data.uploadUrl;
								},
								error: function(data) {
									options.error('Error getting permission to upload attachments.');
								}
							});
						} else {
							options.error('Error getting permission to upload attachments (missing Config values).');
						}

						this.on('sending', function(file, xhr, formData) {
							for (var key in formPostData.uploadData) {
								var value = formPostData.uploadData[key];

								formData.append(key, value);
							}
						});
						this.on('success', function (file, resp) {
							var attachment = {
								name: file.name,
								fileName: file.name,
								type: file.type,
								size: file.size,
								location: formPostData.location,
								storageType: formPostData.storageType,
								attachmentGroupId: entity.attachmentGroup.id()
							};
							if (entity  && entity.id && entity.id()) {
								if (attachment.attachmentGroupId) {
									jQuery.ajax({
										url: Config.apiBaseUrl + 'attachments',
										type: 'POST',
										headers: {
											'Authorization' : 'Bearer ' + Config.sessionKey
										},
										data: JSON.stringify(attachment),
										dataType: 'json',
										contentType: "application/json",
										success: function(data,status,request) {
											entity.attachmentGroup.attachments.push(ko.mapping.fromJS(data));
										},
										error: function(data) {
											options.error('Error completing upload.');
										}
									});
								} else {
									jQuery.ajax({
										url: Config.apiBaseUrl + entity.attachmentGroup.entityName + '/' + entity.id(),
										type: 'PATCH',
										headers: {
											'Authorization' : 'Bearer ' + Config.sessionKey
										},
										data: JSON.stringify({
											attachmentGroup: {
												attachments: [attachment]
											}
										}),
										dataType: 'json',
										contentType: "application/json",
										success: function(data,status,request) {
											entity.attachmentGroup.id(data.attachmentGroup.id)
											for (var key in data.attachmentGroup.attachments) {
												var a = ko.mapping.fromJS(data.attachmentGroup.attachments[key]);
												entity.attachmentGroup.attachments.push(a);
											}
										},
										error: function(data) {
											options.error('Error completing upload.');
										}
									});
								}
							} else {
								entity.attachmentGroup.attachments.push(ko.mapping.fromJS(attachment));
							}
						});

						this.on('removedfile', function (file) {
							entity.attachmentGroup.attachments.remove(function(am) {
								return am.name === file.name;
							});
						});
					}

					$(element).dropzone(options);
				}
			};
		</script>

		<!-- Submit Ticket functionality *************************************************************************************** -->
		<script>
			/**************************************************************************************************************
			* Utility function to start a new Ticket in the Detail Slide Out.
			*/
			function startNewTicket(onClose) {
				viewModels.detailSlideOut().templateName(viewModels.detailSlideOut().defaultTemplate);
				viewModels.detailSlideOut().data({});
				viewModels.detailSlideOut().wasUpdated(false);

				setupActivityCategories();
				if(Config.isInternalUser){
					if (Config.contextType == 'accounts' && viewModels.data().name) {
						viewModels.accountSelectorList.push({
							id: Config.contextKey,
							name: viewModels.data().name()
						});
						viewModels.data().newActivity.accountId(Config.contextKey);
					}
				}else{
					//add support for end user or impersonating SU
					viewModels.data().newActivity.accountId(Config.accountId);
				}

				viewModels.detailSlideOut().data(viewModels.data().newActivity);
				viewModels.detailSlideOut().templateName('crm.ticket.addNew');
				viewModels.detailSlideOut().onClose = onClose || function() {};
				viewModels.detailSlideOut().open();
			};

			var submitTicketOptions = {
				title: "New Support Ticket",
				helpText: "",
				labels: {
					subject: "Subject",
					description: "Question or <br>Description of Problem",
					category: "Category",
					attachments: "Attachments",
					submitTicket: "Submit Ticket",
					ticketSubmitted: "Ticket submitted",
					manageTickets: "Manage Tickets",
					startNewCustomerTicket: "Add Another Ticket"
				},
				categoryHelpText: "Please select a category that best relates to your question or problem so that we can direct this ticket to the proper agent.",
				supportPhone: "",
				supportPhoneTollFree: "800-555-1212",
				ticketPostingMessage: "Please wait while the system processes your ticket.",
				ticketActivityTypeId: 15,
				ticketSuccessMessage: "Your ticket as been submitted."
			};
		
			function ticketIsValid() {
				var activity = viewModels.data().newActivity;
				return (activity.topic() && activity.description() && activity.workQueue() && activity.category());
			}
		
			function setupActivityCategories() {
				var categories = [];
				if(Config && Config.apiBaseUrl && Config.sessionKey) {
					jQuery.ajax({
						url: Config.apiBaseUrl + 'activityCategories?include=workQueue,workQueue.manager',
						cache: false,
						type: 'GET',
						headers: {
							'Authorization' : 'Bearer ' + Config.sessionKey
						},
						dataType: 'json',
						contentType: "application/json",
						success: function(data,status,request) {
							var groupedCategories = _.groupBy(data, 'parentCategory.id');
							categoriesVM.categoriesByParentId(groupedCategories);
							categoriesVM.selectors([new Selector(categoriesVM.categoriesByParentId()[undefined],0)]);
						},
						error: function(data) {
							console.log('Error getting activity categories');
						}
					});
				}
			}	
		
			function Selector(categories, index) {
				var self = this;
				self.index = index;
				self.categories = categories;
				self.selectedCategory = ko.observable();
				self.selectedCategory.subscribe( function(){
					categoriesVM.categoryChanged(self);
				});
			}
		
			function CategoriesViewModel() {
				var self = this;
				self.categoriesByParentId = ko.observable({});
				self.selectors = ko.observableArray([]);
				self.currentHelpText = ko.observable('');
				self.categoryChanged = function(selector) {
					// First remove all selectors after the one that was just changed
					self.selectors.remove(function(s) {return s.index > selector.index});
					// Set the currentHelpText from the selectedCategory's HelpText
					categoriesVM.currentHelpText(selector.selectedCategory() ? selector.selectedCategory().helpText : '');
					// If it is on the "select one...", return
					if(!selector.selectedCategory()) {
						viewModels.data().newActivity.category({});
						viewModels.data().newActivity.workQueue({});
						return;
					};
		
					// Then, if the category just selected has a work queue,
					if (selector.selectedCategory().workQueue) {
						// set the work queue and the category on the new Activity
						viewModels.data().newActivity.category(selector.selectedCategory());
						viewModels.data().newActivity.workQueue(selector.selectedCategory().workQueue);
					}
					// Othewise, add a new selector underneath that contains the next level of category choices
					else {
						self.selectors.push(new Selector(self.categoriesByParentId()[selector.selectedCategory().id],selector.index + 1));
					};
				};
			}
		
			function SubmitTicket() {
				viewModels.data().newActivity.wasSubmitted(true);
				viewModels.data().newActivity.activityType({ id: submitTicketOptions.ticketActivityTypeId }); //Ticket
		
				if (!viewModels.data().newActivity.onBehalfOf()) {
					viewModels.data().newActivity.onBehalfOf({ id: Config.customerKey});
				}
				viewModels.data().createActivity({}, viewModels.data().newActivity.submitTicketCallback);
			}
		
			var categoriesVM = new CategoriesViewModel();
		
		</script>

	<!-- 
	********************************************************************************************************************************************
	********************************************************************************************************************************************

									Knockout Templates

	********************************************************************************************************************************************
	********************************************************************************************************************************************
	-->

		<!-- List of Activity Detail Cards **************************************************************************** -->
		<script type="text/html" id="crm.activities">
			<!-- ko if: viewModels.activityTypes() && viewModels.activityTypes().length > 0 -->
				<div class="timeline-filter">
					<ul class="nav nav-pills">
						<li data-bind="css: { active: $data.activityTypeFilter() == '' }">
							<a href="#0" data-bind="click: function(){ $data.filterActivities('') }">All</a>
						</li>
						<!-- ko foreach: viewModels.activityTypes -->
						<li data-bind="css: { active: viewModels.data().activityTypeFilter() == id }">
							<a href="#0" data-bind="text: utils.plural(displayName), click: function(){ viewModels.data().filterActivities(id) }"></a>
						</li>
						<!-- /ko -->
					</ul>
				</div>
			<!-- /ko -->

			<!-- ko if: $data.activities().length > 0 -->
				<div class="timeline" data-bind="foreach: $data.activities">
					<!-- ko template: 'crm.activity.detail.card' -->
					<!-- /ko -->
				</div>
				<!-- ko if: $data.activities().length > 10 -->
					<div class="timeline-footer text-center">
						<a href="#tab=activities" class="btn btn-large">View all activities</a>
					</div>
				<!-- /ko -->
			<!-- /ko -->

			<!-- ko ifnot: $data.activities().length > 0 -->
				<div class="card card-transparent text-center" style="padding: 20px;">
					<span class="text-large muted">
						<i class="icon-list-alt icon-large icon-fixed-width"></i> There aren't any items to display
					</span>
				</div>
			<!-- /ko -->
		</script>

		<!-- Activity Detail Card ************************************************************************************* -->
		<script type="text/html" id="crm.activity.detail.card">
			<div class="timeline-item">
				<div class="timeline-indicator">
					<i data-bind="css: activityType.activityIcon, attr: { title: activityType.name }"></i>
				</div>
				<div class="media card" data-bind="if: $data">
					<div class="card-actions text-center">
						<a href="#0" data-bind="click: view">View &amp; Edit</a>
						<div class="muted">
							<small data-bind="text: utils.plural('Comment', notes().length, true)"></small>
						</div>
					</div>
					<!-- ko template: { name: 'crm.activity.detail.userAvatar', data: createdBy } --><!-- /ko -->
					<div class="media-body">
						<div data-bind="template: 'crm.activity.card.heading'"></div>
						<div class="media-heading text-bold" data-bind="visible: showTopic">
							<span data-bind="html: topic"></span>
						</div>
						<div class="card-form">
							<div class="card-description">
								<div class="pre" data-bind="html: description, readmore: {
									collapsedHeight: 60,
									moreLink: '<a href=#0 class=text-small>View more</a>',
									lessLink: '<a href=#0 class=text-small>View less</a>'
								}"></div>
							</div>
							<div data-bind="template: 'crm.activity.attachments'"></div>
						</div>
					</div>
				</div>
			</div>
		</script>

		<!-- Activity Detail Card Heading ************************************************************************************* -->
		<script type="text/html" id="crm.activity.card.heading" >
			<div class="media-heading">
				<div>Logged by <b data-bind="text: Utilities.userFullName(createdBy)"></b></div>
				<small data-bind="text: 'Last Modified: ' + Utilities.formatDateTime(dateModified())"></small>
			</div>
		</script>

		<!-- Activity Attachments Templates ************************************************************************************* -->
		<script type="text/html" id="crm.activity.attachments">
			<div data-bind="template: {name: 'crm.attachments.list', data: {allowEdits: false, model:$data, showAttachmentsLabel: true}}"></div>
		</script>

		<script type="text/html" id="crm.attachments.list">
			<div data-bind="if: model.attachmentGroup">
				<label data-bind="visible: (model.attachmentGroup.attachments().length > 0 || allowEdits) && showAttachmentsLabel">Attachments</label>
				<div class="labels text-small">
					<!-- ko if: model.attachmentGroup -->
						<!-- <button
							class="btn btn-link"
							data-toggle="collapse"
							data-bind="visible: model.attachmentGroup.attachments().length > 3, attr: { 'data-target': '#attachments_' + model.attachmentGroup.id() }">
								<span data-bind="text: model.attachmentGroup.attachments().length"></span> attachments <i class="icon-angle-down"></i>
						</button>
						<div data-bind="css: { 'collapse': model.attachmentGroup.attachments().length > 3 }, attr: { id: 'attachments_' + model.attachmentGroup.id() }"> -->

							<!-- ko foreach: model.attachmentGroup.attachments -->
								<!-- ko template: {name: 'crm.attachments.detail', data: {model:$data, allowEdits: $parent.allowEdits, attachmentGroup: $parent.model.attachmentGroup}} --><!-- /ko -->
							<!-- /ko -->

						<!-- </div> -->
					<!-- /ko -->
				</div>
			</div>
		</script>

		<script type="text/html" id="crm.attachments.addModal">
			<div class="dropzone" data-bind="attachmentUpload: {
				value: $data
			}"></div>
		</script>

		<script type="text/html" id="crm.attachments.detail" >
			<!-- ko if: model.relativeDownloadUrl -->
				<a class="label label-default" data-bind="attr: { href: model.relativeDownloadUrl, title: model.name }">
					<!-- ko template: 'crm.attachments.item' --><!-- /ko -->
				</a>
			<!-- /ko -->

			<!-- ko ifnot: model.relativeDownloadUrl -->
				<span class="label label-default">
					<!-- ko template: 'crm.attachments.item' --><!-- /ko -->
				</span>
			<!-- /ko -->
		</script>

		<script type="text/html" id="crm.attachments.item" >
			<span data-bind="template: {name: 'crm.attachments.icon', data: model}"></span>
			<span data-bind="text: model.name().length > 20 ? model.name().substr(0, 20) + '...' + model.name().substr(model.name().lastIndexOf('.') + 1) : model.name()"></span>
			<!-- ko if: allowEdits -->
				<i class="icon-remove" title="Remove attachment" data-bind="visible: allowEdits, click: attachmentGroup.removeAttachment"></i>
			<!-- /ko -->
		</script>

		<script type="text/html" id="crm.attachments.icon" >
			<!-- ko ifnot: type().split('/')[0] == '' -->
				<span data-bind="template: 'crm.attachments.icon.' + type().split('/')[0]"></span>
			<!-- /ko -->
		</script>

		<script type="text/html" id="crm.attachments.icon.image" >
			<i class="icon-picture" aria-hidden="true"></i>
		</script>
		<script type="text/html" id="crm.attachments.icon.text" >
			<i class="icon-file-text" aria-hidden="true"></i>
		</script>
		<script type="text/html" id="crm.attachments.icon.audio" >
			<i class="icon-music" aria-hidden="true"></i>
		</script>
		<script type="text/html" id="crm.attachments.icon.video" >
			<i class="icon-facetime-video" aria-hidden="true"></i>
		</script>
		<script type="text/html" id="crm.attachments.icon.application" >
			<i class="icon-file" aria-hidden="true"></i>
		</script>

		<!-- New Activity Template **************************************************************************************** -->
		<script type="text/html" id="crm.newActivity.logActivity">
			<div id="logActivityTab" class="tab-pane card-form active">
				<div data-bind="template: {name:'crm.activity.newNote', data: {placeholderText:'Start typing to log an activity...', model: $data, logType: 'activity'}}"></div>

				<div class="collapse" data-bind="css: { 'in': showOptions() && description() }">

					<div class="row-fluid">
						<div class="span12">
							<label for="topic">Subject</label>
							<input type="text" class="card-input input-block-level" data-bind="value: topic">
						</div>
					</div>
					<div class="row-fluid">
						<div class="span6">
							<label for="dateOfActivity">Date and time</label>
							<div class="input-prepend date form_datetime"
									data-date-format="m/dd/yyyy H:ii P"
									data-bind="datetimepicker: {
										weekStart: 1,
										todayBtn:  0,
										autoclose: 1,
										todayHighlight: 1,
										startView: 'month',
										forceParse: 0,
										showMeridian: 1,
										minuteStep: 15
									}">
								<span class="add-on"><i class="icon-calendar"></i></span>
								<input type="text"
										id="dateOfActivity"
										class="input-block-level"
										data-bind="value: dateOfActivity">
							</div>
						</div>
						<div data-bind="template: {name: 'crm.activity.requiredMembers' }" class="span6"></div>
					</div>
					<div class="row-fluid">
						<div class="span6">
							<label>Tags</label>
							<select class="input-block-level card-input" multiple placeholder="Start typing to search"
								data-bind="selectize: viewModels.activityTags,
										selectedOptions: $data.tags,
										options: {plugins: ['remove_button'], dropdownParent: 'body'},
										optionsText: 'name',
										optionsValue: 'id'">
							</select>
						</div>
						<div data-bind="template: {name: 'crm.activity.members' }" class="span6"></div>
					</div>
					<div class="row-fluid">
						<div class="span12">
							<label>Related to</label>
							<!-- ko if: relatedTo.length > 0 -->
								<p data-bind="fastForEach: relatedTo">
									<span class="label label-default"><i data-bind="css: Utilities.getIconFromEntityType(type())"></i> <span data-bind="text: name"></span></span>
								</p>
							<!-- /ko -->
						</div>
					</div>
				</div>

				<div class="card-form-actions" data-bind="visible: description">
					<button id="activity_post" class="btn btn-primary" data-bind="click: updateActivity">
						Save activity
					</button>
					<button class="btn btn-link" data-bind="click: cancelChanges" >Cancel</button>
				</div>

			</div>
		</script>

		<!-- PROTOTYPE: New Email Activity Template **************************************************************************************** -->
		<script type="text/html" id="crm.newActivity.email">
			<div id="sendEmailTab" class="tab-pane">
				<!-- <div data-bind="template: 'crm.activity.members'"></div> -->
				<div class="card-form">
					<div class="pull-right cc-bcc">
						<button class="btn btn-link" data-toggle="collapse" data-target="#email_cc">Cc Bcc</button>
					</div>
					<select class="card-input input-block-level" spellcheck="false" multiple placeholder="To"
						data-bind="selectize: availableMembers,
								selectedOptions: memberUsers,
								options: {plugins: ['remove_button']},
								optionsText: 'fullName',
								optionsValue: 'id'">
					</select>
					<div id="email_cc" class="collapse">
						<input type="text" class="card-input input-block-level" spellcheck="false" placeholder="Cc">
						<input type="text" class="card-input input-block-level" spellcheck="false" placeholder="Bcc">
					</div>
					<input type="text" class="card-input input-block-level" spellcheck="false" readonly value="From Brian Siedel (brian.seidel@websitepipeline.com)">
					<input type="text" class="card-input input-block-level" spellcheck="false" placeholder="Subject" data-bind="value: topic">
					<textarea rows="2" class="card-input input-block-level stretchy" placeholder="Your message here..." data-bind="value: internalComment"></textarea>
				</div>
				<div class="card-form">
					<div class="row-fluid">
						<!-- <div class="span4">
							<label>Type of activity</label>
							<select class="input-block-level"
								data-bind="options: viewModels.activityTypes,
										optionsText: 'name',
										optionsValue: 'id',
										valueAllowUnset: true,
										value: activityType.id"></select>
						</div> -->
						<div class="span5">
							<label>Related to</label>
							<!-- ko if: relatedTo.length > 0 -->
							<div data-bind="fastForEach: relatedTo">
								<span class="label label-default"><i data-bind="css: Utilities.getIconFromEntityType(type())"></i> <span data-bind="text: name"></span></span>
							</div>
							<!-- /ko -->
						</div>
						<div class="span7">
							<div data-bind="template: {name: 'crm.attachments.list', data: {model:$data, allowEdits: true, showAttachmentsLabel: true}}"></div>
						</div>
					</div>
				</div>
				<div class="card-form-actions">
					<button class="btn btn-primary" data-bind="click: updateActivity">Send email</button>
					<button class="btn btn-link" data-bind="click: cancelChanges" >Cancel</button>
				</div>
			</div>
		</script>

		<!-- PROTOTYPE: New Phone Call Activity Template **************************************************************************************** -->
		<script type="text/html" id="crm.newActivity.phoneCall">
			<div id="makeCallTab" class="tab-pane">
				<div data-bind:="with: viewModels.data">
					<label>Call From<label>
					<select id="callFrom">
						<!-- ko if: currentUser.phoneNumber -->
							<option data-bind="text: 'Main: ' + currentUser.phoneNumber, value: currentUser.phoneNumber"></option>
						<!-- /ko -->
						<!-- ko if: currentUser.MobilePhoneNumber -->
							<option data-bind=", text: 'Mobile: ' + currentUser.mobilePhoneNumber, value: currentUser.mobilePhoneNumber"></option>
						<!-- /ko -->
					</select>
					<div data-bind="if: $data.phoneNumber">
						<span class="label"><i data-bind="css: Utilities.getIconFromEntityType(Config.contextType)"></i> <span data-bind="text: name"></span></span>
						<a class="pull-right" data-toggle="modal" data-target="#modalCalling"
								style="margin-top: 7px;" data-bind="click: dial(Config.contextType, Config.contextKey, name())">Call <span data-bind="text: phoneNumber"></span></a>
					</div>
				</div>

				<div data-bind="template: 'crm.newActivity.phoneCall.contactList'"></div>

				<div id="modalCalling" class="modal modal-small fade" data-backdrop="static">
					<div class="modal-body text-center">
						<h4>Calling</h4>
						<h3 data-bind="text: viewModels.calling"></h3>
						<div class="sk-three-bounce">
							<div class="sk-child sk-bounce1"></div>
							<div class="sk-child sk-bounce2"></div>
							<div class="sk-child sk-bounce3"></div>
						</div>
						<!--<div class="text-center">
							<button class="btn btn-danger" data-dismiss="modal">Cancel</button>
							<button class="btn btn-primary">Log activity</button>
						</div>-->
					</div>
				</div>
			</div>
		</script>

		<script type="text/html" id ="crm.newActivity.phoneCall.contactList">
			<div class="media-list" data-bind="if: viewModels.isUsersLoaded">
				<div class="card-title">Account Contacts</div>
				<div data-bind="fastForEach: viewModels.users">
					<div data-bind="template: 'crm.newActivity.phoneCall.contactList.contact'"></div>
				</div>
			</div>
		</script>

		<script type="text/html" id ="crm.newActivity.phoneCall.contactList.contact">
			<div class="media">
				<div class="pull-right">
					<div data-bind="if: phoneNumber">
						<a data-toggle="modal" data-target="#modalCalling"
							style="margin-top: 7px;" data-bind="click: dial('users', id(), fullName())">Call <span data-bind="text: phoneNumber"></span></a>
					</div>
					<div data-bind="ifnot: phoneNumber">
						<a style="margin-top: 7px;" data-bind="attr: { href: 'contact_edit.asp?c_key=' + id() }">Setup contact</a>
					</div>
				</div>
				<!--<img src="http://i.pravatar.cc/50?img=45" alt="" class="pull-left img-circle">-->
				<div class="media-body">
					<b class="media-heading" data-bind="text: fullName"></b><br>
					<small class="muted" data-bind="text: jobTitle"></small>
				</div>
			</div>
		</script>

		<!-- PROTOTYPE: New Task Activity Template **************************************************************************************** -->
		<script type="text/html" id="crm.newActivity.task">
			<div class="card-form row-fluid">
				<div class="span7">
					<input type="text" class="card-input input-block-level" placeholder="A short but descriptive task name">
				</div>
				<div class="span5">
					<div class="input-prepend date form_datetime" data-date-format="m/dd/yyyy H:ii P" data-bind="datetimepicker: {
								weekStart: 1,
								todayBtn:  0,
								autoclose: 1,
								todayHighlight: 1,
								startView: 'month',
								forceParse: 0,
								showMeridian: 1,
								minuteStep: 15
							}">
						<span class="add-on"><i class="icon-calendar"></i></span>
						<input size="16" type="text" class="input-block-level" placeholder="Due date/time">
					</div>
				</div>
			</div>
			<textarea rows="1" class="card-input input-block-level stretchy" placeholder="Full description of the task..."></textarea>
			<div class="card-form row-fluid">
				<div class="span5">
					<label>Type</label>
					<select class="card-input input-block-level">
						<option value="call">Call</option>
						<option value="email">Email</option>
						<option value="todo">To-do</option>
					</select>
				</div>
				<div class="span7">
					<label>Assigned to</label>
					<select class="card-input input-block-level">
						<option value="bks">Brian Seidel</option>
						<option value="dm">Don Martin</option>
						<option value="ela">Eric Alexander</option>
					</select>
				</div>
			</div>
			<div class="card-form row-fluid">
				<div class="span5">
					<label>Work queue</label>
					<select class="card-input input-block-level">
						<option value="bo">Business Operations</option>
						<option value="des">Design</option>
						<option value="dev">Development</option>
						<option value="mkt">Marketing</option>
						<option value="sal">Sales</option>
					</select>
				</div>
				<div class="span7">
					<label>Send reminder</label>
					<select class="card-input input-auto">
						<option value="">Day of</option>
						<option value="">Day before</option>
						<option value="">Week before</option>
						<option value="">No reminder</option>
					</select>
					<div class="input-prepend date form_datetime" style="width: auto;" data-date-format="H:ii P" data-bind="datetimepicker: {
								weekStart: 1,
								todayBtn:  0,
								autoclose: 1,
								todayHighlight: 0,
								startView: 'hour',
								forceParse: 0,
								showMeridian: 1,
								minuteStep: 15,
								maxView: 'hour',
								pickDate: false
							}">
						<span class="add-on"><i class="icon-time"></i></span>
						<input size="16" type="text" class="input-block-level" data-bind="value: moment(new Date()).format('h:mm A')">
					</div>
				</div>
			</div>
			<div class="card-form row-fluid">
				<div class="span5">
					<label>Related to</label>
					<span class="label label-default"><i class="icon-building"></i> Website Pipeline</span>
				</div>
				<div class="span7">
					<label>Members</label>
					<select class="input-block-level card-input" multiple placeholder="Start typing to search"
						data-bind="selectize: availableMembers,
								selectedOptions: memberUsers,
								options: {plugins: ['remove_button']},
								optionsText: 'fullName',
								optionsValue: 'id'">
					</select>
				</div>
			</div>
			<div class="card-form row-fluid">
				<div class="span12">
					<div data-bind="template: {name: 'crm.attachments.list', data: {model:$data, allowEdits: true, showAttachmentsLabel: true}}"></div>
				</div>
			</div>
			<div class="card-form-actions">
				<button class="btn btn-primary">Create task</button>
				<button class="btn btn-link">Cancel</button>
			</div>
		</script>

		<!-- PROTOTYPE: New Schedule Activity Template **************************************************************************************** -->
		<script type="text/html" id="crm.newActivity.schedule">
			<div class="row-fluid card-form">
				<div class="span7">
					<input type="text" class="card-input input-block-level" placeholder="Topic or subject of meeting">
				</div>
				<div class="span5">
					<div class="input-prepend date form_datetime" data-date-format="m/dd/yyyy H:ii P" data-bind="datetimepicker: {
								weekStart: 1,
								todayBtn:  0,
								autoclose: 1,
								todayHighlight: 1,
								startView: 'month',
								forceParse: 0,
								showMeridian: 1,
								minuteStep: 15
							}">
						<span class="add-on"><i class="icon-calendar"></i></span>
						<input size="16" type="text" class="input-block-level" placeholder="Meeting date/time">
					</div>
				</div>
			</div>
			<textarea rows="1" class="card-input input-block-level stretchy" placeholder="Notes..."></textarea>
			<div class="card-form row-fluid">
				<div class="span4">
					<label>Related to</label>
					<span class="label label-default"><i class="icon-building"></i> Website Pipeline</span>
				</div>
				<div class="span8">
					<label>Attendees</label>
					<select class="input-block-level card-input" multiple placeholder="Start typing to search"
						data-bind="selectize: availableMembers,
								selectedOptions: memberUsers,
								options: {plugins: ['remove_button']},
								optionsText: 'fullName',
								optionsValue: 'id'">
					</select>
				</div>
			</div>
			<div class="card-form-actions">
				<button class="btn btn-primary">Schedule meeting</button>
				<button class="btn btn-link">Cancel</button>
			</div>
		</script>


		<!-- Main Interation Tracker Template ****************************************************************************** -->

		<script type="text/html" id="cim.tab.dashboard">
            <div class="sk-three-bounce" data-bind="visible: Config.contextKey && !viewModels.data().id">
                <div class="sk-child sk-bounce1"></div>
                <div class="sk-child sk-bounce2"></div>
                <div class="sk-child sk-bounce3"></div>
            </div>
            <div id="interaction-tracker">
                <!-- ko if: Config.contextKey && viewModels.data().id -->
                    <!-- ko template: { name:'crm.interactionTracker', data: viewModels} --><!-- /ko -->
                <!-- /ko -->
            </div>
            <div id="interaction-log">
                <!-- ko if: Config.contextKey && viewModels.data().activities -->
                    <!-- ko template: { name:'crm.activities', data: viewModels.data()} --><!-- /ko -->
                <!-- /ko -->
            </div>
        </script>

		<script type="text/html" id="crm.interactionTracker">

			<div class="card" data-bind="ElementQueries, with: viewModels.data().newActivity">
				<!-- <ul class="nav nav-tabs">
					<li class="active"><a href="#logActivityTab" data-toggle="tab"><i class="icon-edit"></i> Log<span> Activity</span></a></li>
					<li><a href="#sendEmailTab" data-toggle="tab"><i class="icon-envelope"></i> <span>Send </span>Email</a></li>
					<li><a href="#makeCallTab" data-toggle="tab"><i class="icon-phone"></i> <span>Make </span>Call</a></li>
					<li><a href="#createTaskTab" data-toggle="tab"><i class="icon-check"></i> <span>Create </span>Task</a></li>
					<li><a href="#scheduleTab" data-toggle="tab"><i class="icon-calendar"></i> Schedule</a></li>
				</ul> -->
				<div class="tab-content">
					<div id="logActivityTab" class="tab-pane active" data-bind="template: 'crm.newActivity.logActivity'"></div>
					<div id="sendEmailTab" class="tab-pane" data-bind="template: 'crm.newActivity.email'"></div>
					<div id="makeCallTab" class="tab-pane" data-bind="template: 'crm.newActivity.phoneCall'"></div>
					<div id="createTaskTab" class="tab-pane" data-bind="template: 'crm.newActivity.task'"></div>
					<div id="scheduleTab" class="tab-pane" data-bind="template: 'crm.newActivity.schedule'"></div>
				</div>
			</div>
		</script>

		<!-- *********************************************************************************************************************
				Activity Detail Templates 
			**********************************************************************************************************************-->
		
		<!-- Activity Detail Main Template *********************************************************************************** -->
		<script type="text/html" id="crm.activity.detail">
			<div class="datagrid-detail-header" data-bind="template:'crm.activity.detail.header'"></div>
			<div class="datagrid-detail-body">
				<div class="datagrid-detail-content" data-bind="template:'crm.activity.detail.content'"></div>
				<div class="datagrid-detail-sidebar" data-bind="
					template: 'crm.activity.detail.sidebar', 
					css: { 'open': viewModels.detailSlideOut().sidebarOpen() }
				"></div>
			</div>
		</script>

		<!-- Activity Detail Header Template ******************************************************************************* -->
		<script type="text/html" id="crm.activity.detail.header">
			<!-- ko template: 'crm.detail.slideOut.close' --><!-- /ko -->
			<!-- ko template: 'crm.detail.slideOut.sidebarToggle' --><!-- /ko -->
			<h3 class="interaction-tracker__title">Activity Detail</h3>
		</script>

		<!-- Activity Detail Sidebar Template ****************************************************************************** -->
		<script type="text/html" id="crm.activity.detail.sidebar">
			<div data-bind="template: 'crm.activity.detail.createdBy'"></div>
			<div data-bind="template: 'crm.activity.detail.sidebar.attachments'"></div>
			<div data-bind="template: 'crm.activity.detail.sidebar.details'"></div>
		</script>

		<!-- Activity Detail Content Template ****************************************************************************** -->
		<script type="text/html" id="crm.activity.detail.content">
			<div class="thread-list">
				<div class="thread-list-item">
					<div class="media">
						<span class="pull-left media-object" data-bind="template: {name: 'crm.activity.detail.userAvatar', data: createdBy }"></span>
						<div class="media-body">
							<small class="pull-right muted" data-bind="text: dateOfActivity"></small>
							<div class="thread-author">
								<span data-bind="text: createdBy.fullName"></span> 
								<small>logged an activity</small>
							</div>
							<div class="btn-group pull-right">
								<button class="btn btn-link" data-bind="click: edit, visible: !isEditing()">Edit</button>
							</div>
							<p class="lead editable" data-bind="editableHTML: topic, attr: { contenteditable: isEditing }"></p>
							<div class="thread-content editable"
								data-bind="editableHTML: description, attr: { contenteditable: isEditing },
									readmore: {
										collapsedHeight: 80,
										moreLink: '<a href=\'#0\' class=\'text-small\'>View more</a>',
										lessLink: '<a href=\'#0\' class=\'text-small\'>View less</a>'
									}">
								
							</div>
							<div data-bind="visible: isEditing">
								<button class="btn btn-primary" data-bind="click: updateActivity">
									Update
								</button>
								<button class="btn btn-link" data-bind="click: cancelChanges" >Cancel</button>
							</div>
						</div>
					</div>
				</div>

				<!-- TODO responsive -->
				<div class="card thread-list-item" data-bind="template:'crm.activity.detail.newNote'"></div>
				<!-- TODO responsive -->

				<div data-bind="template: 'crm.activity.detail.combinedLog'"></div>
				
			</div>
		</script>

		<!-- Activity Detail Created By Template ****************************************************************************** -->
		<script type="text/html" id="crm.activity.detail.createdBy">
			<ul class="icons-ul">
				<li data-bind="with: createdBy"><h5>Logged By</h5><i class="icon-li icon-user"></i><span data-bind="text: fullName"></span></li>
				<li data-bind="with: account">
					<h5>Account</h5>
					<i class="icon-li icon-building"></i>
					<span data-bind="text: name"></span>
					<small class="muted" data-bind="click: function(){ $parent.account('') }">change</small>
				</li>
				<li data-bind="if: !(account() && account() != {})">
					<h5>Account</h5>
					<!-- ko ifnot: (account() && account() != {}) -->
						<label>Choose an Account</label>
						<div data-bind="">
							<div data-bind="template: 'crm.activity.accountSelector'"></div>
						</div>
						<div data-bind="if: relatedTo.length > 0">
							<div data-bind="fastForEach: relatedTo">
								<span class="label label-default">
									<i data-bind="css: Utilities.getIconFromEntityType(type())"></i>
									<span data-bind="text: name"></span>
								</span>
							</div>
						</div>
					<!-- /ko -->
				</li>
			</ul>
		</script>

		<!-- Activity Detail Sidebar Attachments Template ********************************************************************* -->
		<script type="text/html" id="crm.activity.detail.sidebar.attachments">
			<div data-bind="if: $data.attachmentGroup.attachments().length > 0">
				<hr>
				<h5>Attachments</h5>
				<div data-bind="template: {name: 'crm.attachments.list', data: {allowEdits: false, model:$data, showAttachmentsLabel: false}}"></div>
			</div>
		</script>

		<!-- Activity Detail Sidebar Details Template ********************************************************************** -->
		<script type="text/html" id="crm.activity.detail.sidebar.details">
			<hr>
			<h5>Activity Details</h5>
			<div class="card-form">
				<label for="dateOfActivity">Date and time</label>
				<div class="input-prepend date form_datetime"
						data-date-format="m/dd/yyyy H:ii P"
						data-bind="datetimepicker: {
							weekStart: 1,
							todayBtn:  0,
							autoclose: 1,
							todayHighlight: 1,
							startView: 'month',
							forceParse: 0,
							showMeridian: 1,
							minuteStep: 15
						}">
					<span class="add-on"><i class="icon-calendar"></i></span>
					<input type="text"
							id="dateOfActivity"
							class="input-block-level"
							data-bind="value: dateOfActivity">
				</div>

				<div data-bind="template: {name: 'crm.activity.requiredMembers' }"></div>
				<div data-bind="template: {name: 'crm.activity.members' }"></div>

				<label>Tags</label>
				<select class="input-block-level card-input" multiple placeholder="Start typing to search"
					data-bind="selectize: viewModels.activityTags,
							selectedOptions: $data.tags,
							options: {plugins: ['remove_button'], dropdownParent: 'body'},
							optionsText: 'name',
							optionsValue: 'id'">
				</select>
			</div>
			<div class="card-form-actions">
				<button id="activity_post" class="btn btn-primary" data-bind="click: updateActivity">
					Update activity
				</button>
				<button class="btn btn-link" data-bind="click: cancelChanges" >Cancel</button>
			</div>
		</script>

		<!-- Activity Detail New Note Template *************************************************************************************************** -->
		<script type="text/html" id="crm.activity.detail.newNote">
			<div class="card-form clearfix">
				<textarea 
					data-bind="textInput: newNote.internalComment" 
					class="input-block-level stretchy -full-width-input is-note" 
					rows="3" 
					placeholder="Add an internal comment here"
					style="padding: 15px;">
				</textarea>
				<div class="collapse hidden-note-options" data-bind="template: {name: 'crm.note.mentions', data: newNote}"></div>
				<div class="row-fluid">
					<div class="span5">
						<ul class="nav nav-pills text-small" style="margin-bottom: 10px;">
							<li>
								<a href="#0" data-bind="click: newNote.attachmentGroup.add">
									<i class="icon-paperclip"></i> Attach files
								</a>
							</li>
							<li data-bind="visible: !newNote.externalComment()">
								<a href=".hidden-note-options" class="collapsed" data-toggle="collapse">
									More Options
								</a>
							</li>
						</ul>
					</div>
					<div class="span7 text-right">
						<p>
							<button
								class="btn"
								data-bind="click:  function(){ viewModels.data().addNote($data) },
											css: { 'btn-primary': newNote.isValid },
											enable: newNote.isValid,
											text: 'Add Comment' + (newNote.internalComment() && newNote.externalComment() ? 's' : '')">
							</button>
						</p>
					</div>
				</div>
				<div class="row-fluid" data-bind="visible: newNote.attachmentGroup.attachments().length > 0">
					<div class="span12">
						<div data-bind="template: {name: 'crm.attachments.list', data: {model:newNote, allowEdits: true, showAttachmentsLabel: true}}"></div>
					</div>
				</div>
			</div>
		</script>

		<!-- Activity Detail Notes Template *************************************************************************************************** -->
		<script type="text/html" id="crm.activity.detail.combinedLog">
			<div class="thread-list-item clearfix">
				<ul class="unstyled text-small pull-right" style="margin: 0;">
					<li>
						<a href="#0" data-bind="event: {click: (logSortOrder() == 'desc' ? sortLog : sortLog('desc'))}">
							<span data-bind="text: (logSortOrder() == 'desc') ? 'Newest first' : 'Oldest first'"></span>
							<i class="icon-sort-by-attributes icon-fixed-width"></i>
						</a>
					</li>
				</ul>
			</div>
			<div data-bind="fastForEach: combinedLog">
				<div data-bind="template:'crm.ticket.detail.externalNote'"></div>
				<div data-bind="template: 'crm.ticket.detail.internalNote'"></div>
				<div data-bind="template: 'crm.ticket.detail.changeLog'"></div>
			</div>
		</script>

		<!-- Misc Activity Templates ****************************************************************************** -->
		<script type="text/html" id="crm.activity.members">
			<label>Optional Members</label>
			<select class="input-block-level card-input" multiple placeholder="Start typing to search"
				data-bind="selectize: availableMembers,
						selectedOptions: memberUsers,
						options: {
							plugins: ['remove_button'], 
							dropdownParent: 'body', 
							render: {
								option: function(item, escape) {
									if (item.superUser) {
										return '<div><i class=\'icon-group muted pull-right\' title=\'Super User\'></i>' 
													+ escape(item.fullName) 
													+ '</div>'
									} else {
										return '<div>' + escape(item.fullName) + '</div>'
									}
								}, 
								item: function(item, escape) {
									if (item.superUser) {
										return '<div>' 
													+ escape(item.fullName) 
													+ ' <i class=\'icon-group icon-fixed-width muted\' title=\'Super User\'></i></div>'
									} else {
										return '<div>' + escape(item.fullName) + '</div>'
									}
								}
							}
						},
						optionsText: 'fullName',
						optionsValue: 'id'">
			</select>
		</script>

		<script type="text/html" id="crm.activity.requiredMembers">
			<label>Required Members</label>
			<div class="card-input labels" data-bind="foreach: requiredMemberUsers">
				<span class="label label-default"  data-bind="text: name"></span>
			</div>
		</script>

		<script type="text/html" id="crm.note.mentions">
			<label>Notify Via Email</label>
			<select class="input-block-level card-input" multiple placeholder="Start typing to search"
				data-bind="selectize: availableMembers,
						selectedOptions: mentions,
						options: {
							plugins: ['remove_button'], 
							dropdownParent: 'body', 
							render: {
								option: function(item, escape) {
									if (item.superUser) {
										return '<div><i class=\'icon-group muted pull-right\' title=\'Super User\'></i>' 
													+ escape(item.fullName) 
													+ '</div>'
									} else {
										return '<div>' + escape(item.fullName) + '</div>'
									}
								}, 
								item: function(item, escape) {
									if (item.superUser) {
										return '<div>' 
													+ escape(item.fullName) 
													+ ' <i class=\'icon-group icon-fixed-width muted\' title=\'Super User\'></i></div>'
									} else {
										return '<div>' + escape(item.fullName) + '</div>'
									}
								}
							}
						},
						optionsText: 'fullName',
						optionsValue: 'id'">
			</select>
		</script>

		<script type="text/html" id="crm.activity.newNote">
			<textarea
				class="card-input input-block-level stretchy"
				rows="1"
				data-bind="textInput: model.description, attr: {placeholder: placeholderText}"
				autofocus style="margin-bottom: 5px;"
			></textarea>

			<div data-bind="visible: model.description">
				<ul class="nav nav-pills text-small text-right" style="margin-bottom: 10px;">
					<li>
						<a href="#0" data-bind="click: model.attachmentGroup.add">
							<i class="icon-paperclip"></i> Attach files
						</a>
					</li>
					<li>
						<a href="#0" data-bind="click: function() { model.showOptions(!model.showOptions()) }">
							More options <i class="icon-angle-down icon-fixed-width" data-bind="css: { 'icon-angle-down': !model.showOptions(), 'icon-angle-up': model.showOptions }"></i>
						</a>
					</li>
				</ul>
			</div>

			<!-- ko if: model.attachmentGroup.attachments().length > 0 -->
				<div class="row-fluid">
					<div class="span12">
						<div data-bind="template: {name: 'crm.attachments.list', data: {model:model, allowEdits: true, showAttachmentsLabel: true}}"></div>
					</div>
				</div>
			<!-- /ko -->
		</script>

		<script type="text/html" id="crm.activity.detail.userAvatar">
			<!-- This template expects the $data to be a User -->
			<div 
				class="media-object pull-left thread-avatar" 
				data-bind="text: Utilities.userInitials($data), 
						style: { 'background-color': Utilities.userAvatar($data) }">
			</div>
		</script>

		<script type="text/html" id="crm.activity.accountSelector">
			<div class="card-form">
				<select class="input-block-level card-input" placeholder="Start typing to search" 
					data-bind="selectize: viewModels.accountSelectorList,
							optionsText: 'name',
							optionsValue: 'id',
							options: {
								dropdownParent: 'body',
								load: Utilities.searchAccounts
							},
							value: accountId">
				</select>
			</div>
		</script>

		<script type="text/html" id="crm.activity.onBehalfOfSelector">
			<div>
				<select class="input-block-level card-input"
					data-bind="options: viewModels.accountUsers,
							optionsText: 'fullName',
							optionsCaption: '[Not Set]',
							valueAllowUnset: true,
							value: onBehalfOf">
				</select>
			</div>
		</script>
		
		<!-- *********************************************************************************************************************
				Ticket Detail Templates 
			**********************************************************************************************************************-->
		
		<!-- Ticket Detail Main Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail">
			<!-- ko if: viewModels.errors().length -->
				<div class="thread-list" data-bind="foreach: viewModels.errors">
					<h3 data-bind="text: text"></h3>
				</div>	
			<!-- /ko -->
		
			<!-- ko ifnot: viewModels.errors().length -->
				<div class="datagrid-detail-header" data-bind="template:'crm.ticket.detail.header'"></div>
				<div class="datagrid-detail-body">
					<div class="datagrid-detail-content" data-bind="template:'crm.ticket.detail.content'"></div>
					<!-- ko if: currentUser.isInternalUser -->
						<div class="datagrid-detail-sidebar" data-bind="
							template:'crm.ticket.detail.sidebar', 
							css: { 'open': viewModels.detailSlideOut().sidebarOpen() }
						"></div>
					<!-- /ko -->
				</div>
			<!-- /ko -->
		</script>

		<!-- Ticket Detail Header Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.header">
			<!-- ko template: 'crm.detail.slideOut.close' --><!-- /ko -->
			<!-- ko template: 'crm.detail.slideOut.sidebarToggle' --><!-- /ko -->
			<h3 class="interaction-tracker__title">Ticket Detail</h3>
			<span class="label label-default" data-bind="text: '#' + id()"></span>&nbsp;
			<span data-bind="with: lifecycleStage">
				<span data-bind="attr: { class: cssClass }, text: name "></span>
			</span>
		</script>

		<!-- Ticket Detail Content Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.content">
			<div class="thread-list">
				<div class="thread-list-item" style="border: 0;">
					<div class="media">
						<span class="pull-left media-object" data-bind="template: {name: 'crm.activity.detail.userAvatar', data: createdBy }"></span>
						<div class="media-body">
							<small class="pull-right muted" data-bind="text: dateOfActivity"></small>
							<div class="thread-author">
								<span data-bind="text: createdBy.fullName"></span> 
								<small>submitted a ticket</small>
								<span data-bind="if: onBehalfOf() != null && createdBy.id() !== onBehalfOf().id">
									<small> on behalf of </small>
									<span data-bind="text: onBehalfOf().fullName"></span> 
								</span>
							</div>
							<p class="lead" data-bind="text: topic"></p>
							<div class="thread-content" data-bind="html: description, readmore: {
								collapsedHeight: 80,
								moreLink: '<a href=\'#0\' class=\'text-small\'>View more</a>',
								lessLink: '<a href=\'#0\' class=\'text-small\'>View less</a>'
							}"></div>
						</div>
					</div>
				</div>

				<!-- TODO responsive -->
				<div class="card thread-list-item clearfix" data-bind="template:'crm.ticket.detail.newNote'"></div>
				<!-- TODO responsive -->

				<div data-bind="template: 'crm.activity.detail.combinedLog'"></div>
				
			</div>
		</script>

		<!-- Ticket Detail New Note Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.newNote">
			<div class="card-form">
				<textarea 
					data-bind="textInput: newNote.externalComment" 
					class="input-block-level stretchy" 
					rows="3" 
					placeholder="Type your reply here" 
					autofocus 
					style="padding: 15px;">
				</textarea>
				
				<div class="row-fluid">
					<div class="span5">
						<ul class="nav nav-pills text-small" style="margin-bottom: 10px;">
							<li>
								<a href="#0" data-bind="click: newNote.attachmentGroup.add">
									<i class="icon-paperclip"></i> Attach files
								</a>
							</li>
							<!-- ko if: currentUser.isInternalUser -->
							<li data-bind="visible: !newNote.internalComment()">
								<a href="#internalComment" class="collapsed" data-toggle="collapse">
									Add internal note
								</a>
							</li>
							<!-- /ko -->
						</ul>
					</div>
					<div class="span7 text-right">
						<p>
							<button
								class="btn"
								data-bind="click:  function(){ viewModels.data().addNote($data) },
											css: { 'btn-primary': newNote.isValid },
											enable: newNote.isValid,
											text: newNote.buttonText">
							</button>
						</p>
					</div>
				</div>
				<div class="row-fluid" data-bind="visible: newNote.attachmentGroup.attachments().length > 0">
					<div class="span12">
						<div data-bind="template: {name: 'crm.attachments.list', data: {model:newNote, allowEdits: true, showAttachmentsLabel: true}}"></div>
					</div>
				</div>
			</div>
		</script>

		<!-- Ticket Detail Change Log Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.changeLog">
			<div data-bind="if: $data.fromData && $data.fromData() && $data.toData && $data.toData()">
							
				<div class="alert alert-bar without-close">
					<div class="alert-icon hidden-xs">
						<i class="icon-flag"></i>
					</div>
					<small class="pull-right" data-bind="text: Utilities.formatDateTime(dateCreated())"></small>
					<b data-bind="text: changedBy.fullName"></b> changed:
					<div class="media-body text-small">
						<div data-bind="if: propertyChanged.lifecycleStage">
							- Status from 
							<b data-bind="text: fromData().lifecycleStage ? fromData().lifecycleStage.name : '[Not set]'"></b>
							to <b data-bind="text: toData().lifecycleStage ? toData().lifecycleStage.name : '[Not set]'"></b>.
						</div>
						<div data-bind="if: propertyChanged.priority">
							- Priority from 
							<b data-bind="text: fromData().priority ? fromData().priority.name : '[Not set]' "></b>
							to <b data-bind="text: toData().priority ? toData().priority.name : '[Not set]' "></b>.
						</div>
						<div data-bind="if: propertyChanged.workQueue">
							- Work queue from 
							<b data-bind="text: fromData().workQueue ? fromData().workQueue.name : '[Not set]' "></b>
							to <b data-bind="text: toData().workQueue ? toData().workQueue.name : '[Not set]' "></b>.
						</div>
						<div data-bind="if: propertyChanged.category">
							- Category from 
							<b data-bind="text: fromData().category ? fromData().category.name : '[Not set]' "></b>
							to <b data-bind="text: toData().category ? toData().category.name : '[Not set]' "></b>.
						</div>
						<div data-bind="if: propertyChanged.assignedTo">
							- Assignee from 
							<b data-bind="text: fromData().assignedTo
										? fromData().assignedTo.firstName + ' ' + fromData().assignedTo.lastName 
										: '[Unassigned]' "></b>
							to <b data-bind="text: toData().assignedTo 
										? toData().assignedTo.firstName + ' ' + toData().assignedTo.lastName 
										: '[Unassigned]' "></b>.
						</div>
						<div data-bind="if: propertyChanged.onBehalfOf">
							- Customer from 
							<b data-bind="text: fromData().onBehalfOf
										? fromData().onBehalfOf.firstName + ' ' + fromData().onBehalfOf.lastName 
										: '[Not Set]' "></b>
							to <b data-bind="text: toData().onBehalfOf 
										? toData().onBehalfOf.firstName + ' ' + toData().onBehalfOf.lastName 
										: '[Not Set]' "></b>.
						</div>
				</div>
				</div>
							
			</div>
		</script>

		<!-- Ticket Detail Internal Note Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.internalNote">
			<!-- This will only show if there is internalText and NOT externalText (since the externalNote template also has internalText) -->
			<div data-bind="if: $data.internalText && $data.internalText().trim() && !($data.externalText && $data.externalText().trim()) ">
				<div class="thread-list-item is-note">
					<div class="media">
						<span data-bind="visible: !externalText(), template: {name: 'crm.activity.detail.userAvatar', data: createdBy }"></span>		
						<div class="media-body">
							<small class="pull-right muted" data-bind="visible: !externalText(), text: Utilities.formatDateTime(dateCreated())"></small>
							<div class="thread-author">
								<span data-bind="text: createdBy.fullName"></span>
								<small>added a note:</small>
							</div>
							<div class="thread-content">
								<div class="thread-content-text" data-bind="html: internalText, readmore: {
										collapsedHeight: 80,
										moreLink: '<a href=\'#0\' class=\'text-small\'>View more</a>',
										lessLink: '<a href=\'#0\' class=\'text-small\'>View less</a>'
									}">
								</div>
							</div>	
							<div class="thread-attachments text-small" data-bind=" foreach: attachmentGroup.attachments">
								<!-- ko template: {name: 'crm.attachments.detail', data: {model:$data, allowEdits: false, attachmentGroup: $parent}} --><!-- /ko -->
							</div>
						</div>
					</div>
				</div>
			</div>
		</script>

		<!-- Ticket Detail External Note Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.externalNote">
			<div data-bind="if: $data.externalText && $data.externalText().trim()">
				<div class="thread-list-item">
					<div class="media">
						<div 
							class="media-object pull-left thread-avatar"
							data-bind="text: Utilities.userInitials($data.createdBy), style: { 'background-color': Utilities.userAvatar($data.createdBy) }"></div>
						<div class="media-body">
							<small class="pull-right muted" data-bind="text: Utilities.formatDateTime(dateCreated())"></small>
							<div class="thread-author">
								<span data-bind="text: createdBy.fullName"></span> 
								<small>replied:</small>
							</div>
							<div class="thread-content">
								<div class="thread-content-text" data-bind="html: externalText, readmore: {
										collapsedHeight: 80,
										moreLink: '<a href=\'#0\' class=\'text-small\'>View more</a>',
										lessLink: '<a href=\'#0\' class=\'text-small\'>View less</a>'
									}">
								</div>
							</div>
							<div data-bind="if: $data.internalText && $data.internalText().trim()">
								<div class="thread-content is-note">
									<div class="thread-content-text" data-bind="html: internalText, readmore: {
											collapsedHeight: 80,
											moreLink: '<a href=\'#0\' class=\'text-small\'>View more</a>',
											lessLink: '<a href=\'#0\' class=\'text-small\'>View less</a>'
										}">
									</div>	
								</div>
							</div>
							<div class="thread-attachments text-small" data-bind=" foreach: attachmentGroup.attachments">
								<!-- ko template: {name: 'crm.attachments.detail', data: {model:$data, allowEdits: false, attachmentGroup: $parent}} --><!-- /ko -->
							</div>
						</div>
					</div>
				</div>
			</div>
		</script>

		<!-- Ticket Detail Attachments Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.attachments">
			<div data-bind="visible: attachmentGroup.attachments().length > 0">
				<label>Attachments</label>
				<div data-bind=" foreach: attachmentGroup.attachments">
					<!-- ko template: {name: 'crm.attachments.detail', data: {model:$data, allowEdits: false, attachmentGroup: $parent}} --><!-- /ko -->
				</div>
			</div>
		</script>

		<!-- Ticket Detail Sidebar Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.sidebar">
			<div data-bind="template: 'crm.ticket.detail.userInfo'"></div>
			<div data-bind="template: 'crm.activity.detail.sidebar.attachments'"></div>
			<div data-bind="template: 'crm.ticket.detail.sidebarDetails'"></div>
		</script>

		<!-- Ticket Detail User Info Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.userInfo">
			<h4>Customer Info</h4>
			<ul class="icons-ul">
				<li data-bind="with: onBehalfOf"><i class="icon-li icon-user"></i><span data-bind="text: fullName"></span></li>
				<li data-bind="with: account"><i class="icon-li icon-building"></i><span data-bind="text: name"></span></li>
			</ul>
		</script>

		<!-- Ticket Detail Sidebar Details Template *************************************************************************************************** -->
		<script type="text/html" id="crm.ticket.detail.sidebarDetails">
			<hr>
			<h4>Ticket Details</h4>
			
			<div class="card-form">	
				<div data-bind="template: {name: 'crm.activity.requiredMembers' }"></div>	
				<label>Customer Contact</label>
				<div data-bind="template: 'crm.activity.onBehalfOfSelector'"></div>
				<label>Stage</label>
				<select class="card-input input-block-level"
					data-bind="options: viewModels.activityLifecycleStages,
							optionsText: 'name',
							valueAllowUnset: true,
							value: lifecycleStage">
				</select>
				<label>Priority</label>
				<select class="card-input input-block-level"
					data-bind="options: viewModels.activityPriorities,
							optionsText: 'name',
							valueAllowUnset: true,
							value: priority">
				</select>
				<label>Work Queue</label>
				<select class="card-input input-block-level"
					data-bind="options: viewModels.activityWorkQueues,
							optionsText: 'name',
							valueAllowUnset: true,
							value: workQueue">
				</select>
				<label>Category</label>
				<select class="card-input input-block-level"
					data-bind="options: viewModels.activityCategories,
							optionsText: 'name',
							valueAllowUnset: true,
							value: category">
				</select>
				<label>Assigned To</label>
				<select class="card-input input-block-level"
					data-bind="options: viewModels.activityAssignees,
							optionsText: function(user) { return user.fullName + ' (' + user.username + ')'; },
							optionsCaption: '[Unassigned]',
							valueAllowUnset: true,
							value: assignedTo">
				</select>
				<button
					class="btn btn-primary"
					data-bind="click: updateTicket">
					Update Ticket
				</button>
				<button
					class="btn btn-link"
					data-bind="click: cancelChanges">
					Cancel
				</button>
			</div>
		</script>

		<!-- *********************************************************************************************************************
				New Ticket Templates 
			**********************************************************************************************************************-->

		<!-- New Ticket Main Template (for Slide Out) -->
		<script type="text/html" id="crm.ticket.addNew">
			<div data-bind="with:viewModels.data().newActivity">
				<div class="datagrid-detail-header" >
					<!-- ko template: 'crm.detail.slideOut.close' --><!-- /ko -->
					<!-- ko template: 'crm.tickets.newTicket.header' --><!-- /ko -->
				</div>
				<div class="datagrid-detail-body" data-bind="ifnot: wasSubmitted" >
					<!-- ko template: 'crm.tickets.newTicket.form' --><!-- /ko -->
				</div>
				<div class="datagrid-detail-body" data-bind="if: wasSubmitted">
					<div class="form-horizontal">
						<h1 data-bind="text: submitTicketOptions.labels.ticketSubmitted"></h1>
						<button class="btn" data-bind="click: startNewTicket, text: submitTicketOptions.labels.startNewCustomerTicket"></button>
						<a class="btn" href="manage_tickets.asp" data-bind="text: submitTicketOptions.labels.manageTickets"></a>
						<button class="btn" data-bind="click: viewModels.detailSlideOut().close">Close</button>
					</div>
				</div>
			</div>
		</script>

		<!-- Submit Ticket Header -->
		<script type="text/html" id="crm.tickets.newTicket.header">
			<h3 data-bind="text: submitTicketOptions.title"></h3>
		</script>

		<!-- Submit Ticket Main Form -->
		<script type="text/html" id="crm.tickets.newTicket.form">
			<div data-bind="text: submitTicketOptions.helpText, visible: submitTicketOptions.helpText.length > 0"></div>
			<div class="form-horizontal">
				<div data-bind="if: currentUser.isInternalUser">
					<div class="control-group">
						<label class="control-label">Account</label>
						<div class="account-selector">
							<div data-bind="template: 'crm.activity.accountSelector'"></div>
						</div>
					</div>
					<div class="control-group">
						<label class="control-label">User</label>
						<div class="controls">
							<div data-bind="template: 'crm.activity.onBehalfOfSelector'"></div>
						</div>
					</div>
				</div>
				<div class="control-group">
					<label class="control-label" data-bind="html: submitTicketOptions.labels.subject"></label>
					<div class="controls">
						<input type="text" class="card-input input-block-level" data-bind="textInput: topic"> 
					</div>
				</div>
				<div class="control-group">
					<div class="control-label"></div>
					<div class="controls">
						<p class="help-block" data-bind="text: submitTicketOptions.categoryHelpText"></p>
					</div>
				</div>
				<div class="control-group">
					<label class="control-label" data-bind="html: submitTicketOptions.labels.category"></label>
					<div data-bind="template: 'crm.tickets.newTicket.categories'"></div>
				</div>
				<div class="control-group">
					<label class="control-label" data-bind="html: submitTicketOptions.labels.description"></label>
					<div class="controls">
						<textarea class="card-input input-block-level stretchy" style="min-height: 50px;" 
							data-bind="textInput: description"></textarea> 
						<!-- ko with: categoriesVM.currentHelpText -->
							<p class="help-block" data-bind="html: $data"></p>
						<!-- /ko -->
					</div>
				</div>
				<div class="control-group">
					<label class="control-label" data-bind="html: submitTicketOptions.labels.attachments"></label>
					<div class="controls">
						<a href="#0" data-bind="click: attachmentGroup.add">
							<i class="icon-paperclip"></i> Attach files
						</a>
						<div data-bind="template: {name: 'crm.attachments.list', data: {allowEdits: true, model:$data, showAttachmentsLabel: false}}"></div>
					</div>
				</div>
				<div class="form-actions">
					<button id="ticket_submit" class="btn" 
						data-bind="click: SubmitTicket, 
								text: submitTicketOptions.labels.submitTicket,
								css: { 'btn-primary': ticketIsValid() },
								enable: ticketIsValid()"></button> 
				</div>
			</div>
		</script>

		<!-- Categories Template for New Ticket -->
		<script type="text/html" id="crm.tickets.newTicket.categories">
			<div data-bind="with: categoriesVM">
				<div data-bind="foreach: selectors">
					<div data-bind="template: 'crm.tickets.newTicket.category-selector'"></div>
				</div>
			</div>
		</script>
		
		<!-- Category Selector for Categories Template -->
		<script type="text/html" id="crm.tickets.newTicket.category-selector">
			<select 
				class="card-input input-block-level" 
				style="margin-bottom: 7px;"
				size="1"
				data-bind="options: categories,
						optionsText: 'displayText',
						value: selectedCategory,
						optionsCaption: index == 0 ? 'Select a category...' : 'Additional category...'",>
			</select>
		</script>

		<!-- *********************************************************************************************************************
			Other Templates 
		**********************************************************************************************************************-->

		<!-- Detail Slideout Close Button ****************************************************************************** -->
		<script type="text/html" id="crm.detail.slideOut.close">
			<button class="interaction-tracker__close" data-bind="click: viewModels.detailSlideOut().close">
				<i class="fas fa-times"></i>
			</button>
		</script>
		
		<!-- Detail Slideout Sidebar Toggle Button ****************************************************************************** -->
		<script type="text/html" id="crm.detail.slideOut.sidebarToggle">
			<a href="#0" 
				class="datagrid-detail-sidebar-toggle hidden-lg hidden-xl" 
				title="Toggle Details" 
				data-bind="
					tooltip: { placement: 'left', delay: { show: 1000 } },
					click: viewModels.detailSlideOut().toggleSidebar,
					css: { 'muted': !viewModels.detailSlideOut().sidebarOpen() }">
				<i class="icon-info-sign icon-large icon-fixed-width"></i>
			</a>
		</script>

		<!-- Account Templates ********************************************************************************************* -->
		<script type="text/html" id="crm.accounts.title">
			<div class="card">
				<div style="display: flex;">
					<i class="muted icon-building icon-fixed-width icon-4x" style="margin-right: 10px;"></i>
					<div style="flex-grow: 1;">
						<div class="media-heading">
							<h1 data-bind="html: name"></h1>
						</div>
						<div data-bind="visible: url">
							<a data-bind="href: url">
								<i class="icon-globe"></i> <span data-bind="text: url"></span>
							</a>
						</div>
					</div>
				</div>
			</div>
		</script>

		<script type="text/html" id="crm.accounts">
			<div id="accountdetail" class="media card" data-bind="with: viewModels.data()">
				<div class="card-title">Account Detail</div>
				<div data-bind="
					readmore: {
						collapsedHeight: 100,
						moreLink: '<a href=\'#0\' class=\'btn btn-link\'>View more</a>',
						lessLink: '<a href=\'#0\' class=\'btn btn-link\'>View less</a>'
					}">
					<table class="table">
						<tbody>
							<!--<tr>
								<td>Website</td>
								<td><a href="#0">www.websitepipeline.com</a></td>
							</tr>
							<tr>
								<td>Primary Contact</td>
								<td><a href="#0">Mollie Woodside</a></td>
							</tr>
							<tr>
								<td>Location</td>
								<td>Greenville, SC USA</td>
							</tr>-->
							<tr>
								<td>Phone</td>
								<td data-bind="text: phoneNumber"></td>
							</tr>
							<tr>
								<td>Account Number</td>
								<td data-bind="text: number"></td>
							</tr>
							<tr>
								<td>Division</td>
								<td data-bind="text: division"></td>
							</tr>
							<tr>
								<td>Address</td>
								<td>
									<span data-bind="text: addressLine1"></span><!-- ko if: addressLine2--><br><!-- /ko -->
									<span data-bind="text: addressLine2"></span><!-- ko if: addressLine3--><br><!-- /ko -->
									<span data-bind="text: addressLine3"></span><br>
									<span data-bind="text: city"></span>, <span data-bind="text: stateProvince"></span> <span data-bind="text: postalCode"></span>
								</td>
							</tr>
							<!--<tr>
								<td>Payment Terms</td>
								<td>99</td>
							</tr>-->
						</tbody>
					</table>
				</div>
			</div>
		</script>

		<!-- Address Templates ********************************************************************************************* -->
		<script type="text/html" id="crm.addresses.title">
			<div class="card">
				place holder
			</div>
		</script>

		<script type="text/html" id="crm.addresses">
			<div id="addressdetail" class="card">
				<div class="media">
					<i class="muted icon-building icon-fixed-width icon-4x pull-left"></i>
					<div class="media-body">
						<h4 class="media-heading" data-bind="html: name"></h4>
						<dl class="dl-horizontal">
							<dt>Address</dt>
							<dd data-bind="html: drawAddress($data)"></dd>
							<dt data-bind="if: phoneNumber">Phone</dt>
							<dd data-bind="if: phoneNumber">
									<a data-bind=" attr: { 'href' : 'tel: +1' + phoneNumber() }, html: phoneNumber"></a>
							</dd>
							<dt data-bind="if: emailAddress">Email</dt>
							<dd data-bind="if: emailAddress">
									<a data-bind="attr: { 'href' : 'mailto: ' + emailAddress() }, text: emailAddress "></a>
							</dd>
						</dl>
					</div>
				</div>
			</div>
		</script>

		<!-- Invoice Templates ********************************************************************************************* -->
		<script type="text/html" id="crm.invoices.title">
			<div class="card">
				place holder
			</div>
		</script>

		<script type="text/html" id="crm.invoices">

		</script>

		<!-- Inbox Templates ********************************************************************************************* -->
		<script type="text/html" id="crm.inbox.toggle">
			<a href="#0" data-sidebar="toggle" title="Notifications"
			class="crm-notif app-navicon with-badge ">
				<i class="fas fa-bell"></i>
				<span class="badge" data-bind="visible: activities().length, text: activities().length"></span>
			</a>
		</script>

		<script type="text/html" id="crm.inbox.card">
			<a href="#0" class="media card slide-over" data-bind="click: function() { $parent.selectActivity($data) }">
				<i class="icon-fixed-width icon-large pull-left"
					data-bind="css: activityType.activityIcon"></i>
				<div class="media-body">
					<div data-bind="template: 'crm.inbox.card.heading'"></div>
				</div>
			</a>
		</script>

		<script type="text/html" id="crm.inbox.card.heading" >
			<div class="media-heading">
				<div>
					<b data-bind="text: createdBy.fullName"></b> 
					<span data-bind="if: activityType.name() === 'Ticket'">
						submitted a ticket
					</span>
					<span data-bind="if: activityType.name() === 'Activity'">
						logged an activity
					</span>
				</div>
				<small data-bind="text: 'Last Modified: ' + Utilities.formatDateTime(dateModified())"></small>
			</div>
		</script>

		<script type="text/html" id="crm.inbox">
			<div class="activities__caught-up-wrapper flex-slider-frame" data-bind="visible: !activities().length">
				<p class="activities__caught-up"><i class="icon-ok"></i> All Caught Up!</p>
			</div>
			<div class="flex-slider-frame" data-bind="fastForEach: activities, css: { 'slide-left': selectedActivity }, visible: activities().length">
				<div data-bind="template: 'crm.inbox.card'"></div>
			</div>
			<div class="flex-slider-frame" data-bind="css: { 'slide-left': selectedActivity }, visible: activities().length">
				<div data-bind="if: selectedActivity()">
					<a href="#0" class="card back-to-viewport" data-bind="click: function() { selectActivity() }">
						<i class="icon-arrow-left icon-fixed-width icon-large"></i> Back
					</a>
					<div class="card" data-bind="with: selectedActivity">
						<div class="media-body">
							<div data-bind="template: 'crm.activity.card.heading'"></div>
							<div class="editable" data-bind="html: $data.lastNote && lastNote.internalText()"></div>
						</div>
						<div class="card-form-actions">
							<button class="btn pull-right" data-bind="click: clearNotification">Clear</button>
							<button class="btn btn-primary" data-bind="click: view">View</button>
						</div>
					</div>
				</div>
			</div>
		</script>
		
		<!-- *********************************************************************************************************************
				Modal and Slide Out Divs 
			**********************************************************************************************************************-->
		
		<!-- Modal Activity (for Inbox) ********************************************************************************************* -->
		<div id="modalActivity" class="modal modal-large hide" data-backdrop="static">
			<div class="modal-header">
				<button class="close" data-dismiss="modal">&times;</button>
				<h3 class="interaction-tracker__title">Activity</h3>
			</div>
			<div class="modal-body" style="min-height: 300px;" data-bind="with: viewModels.inbox().selectedActivity">
				<div data-bind="template: 'crm.activity.detail.card'"></div>
			</div>
			<div class="modal-footer">
			</div>
		</div>
		
		<!-- Detail Slide Out panel (Should this be here or in cim_dashboard.asp?) ******************************************************* -->
		<script type="text/html" id="crm.no.template">
			
		</script>

		<div id="detailSlideout" data-bind="with: viewModels.detailSlideOut">
			<div class="datagrid-detail" data-bind="css: { open: isOpen() }">
				<!-- ko template: { name: templateName, data: data } --><!-- /ko -->
			</div>
		</div>


	

</div>
<div class="catalog-templates-scripts">




	<script>

		utils.isMainProduct = function (product) {
			return product && ko.unwrap(viewModel.mainProduct) === product;
		};

		utils.buildQuickAddLink = function(product){
			var link = product.link();
			var orderKey = utils.getParameter('o_key');
			if(orderKey){
				orderKey = '&o_key=' + orderKey;
			}
			if(link.includes('?')){
				link += '&quickadd=true' + orderKey;
			}else{
				link += '?quickadd=true' + orderKey;
			}
			return link;
		};

		utils.setCookie = function (name, value) {
			//need to also set expiry date?
			document.cookie = name + '=' + value + ';path=/;';
		};

		// www.the-art-of-web.com/javascript/getcookie/
		utils.getCookie = function (name) {
			var re = new RegExp('\\b' + name + '=([^;]+)');
			var value = re.exec(document.cookie);
			return value ? unescape(value[1]) : undefined;
		};

		utils.isActiveQuote = ((utils.getParameter('modal') == '1' || utils.getParameter('modal', parent) == '1') && "".length == 32) && "" != "46BEA28609664F59B6B4C42CB5ADFD17";

		//http://stackoverflow.com/questions/5999118/add-or-update-query-string-parameter
		utils.setParameter = function (key, value, uriArg) {
			var uri = uriArg || window.location.toString();
			var re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
			var separator;
			if (uri.indexOf('?') === -1) {
				separator = '?';
			} else {
				if (uri[uri.length - 1] === '?') {
					separator = '';
				} else {
					separator = '&';
				}
			}
			if (uri.match(re)) {
				return uri.replace(re, '$1' + key + '=' + value + '$2');
			} else {
				return uri + separator + key + '=' + value;
			}
		};

		utils.handleImageError = function (img) {
			handleImageError(img, oConfig.noImagePath);
		};

		utils.drawHidePriceMessage = function(){
			return "";
		}

		utils.removeHTML = function(text){
			return $(text).text();
		}

		utils.decodeHTML = function(text) {
			return $('<textarea>').html(text).text()
		};

		utils.getStoredBreadcrumbs = function() {
			try {
				return JSON.parse(localStorage.getItem('breadcrumbs'));
			} catch(e) {
				return null;
			}
		};

		utils.setStoredBreadcrumbs = function(obj) {
			try {
				localStorage.setItem('breadcrumbs', JSON.stringify(obj));
			} catch(e) {
				// nothing to do if it didn't work
				console.error('failed to save breadcrumbs');
			}
		};

		utils.breadCrumbProperty = function(link) {
			if(link == '' || link === null){
				return '';
			} else {
				return 'itemListElement';
			}
		};

		utils.breadCrumbItemType = function(link) {
			if(link == '' || link === null){
				return '';
			} else {
				return 'ListItem';
			}
		};

		utils.pageUrl = location.pathname + location.search;
		if(utils.pageUrl.charAt(0) == '/') {
			utils.pageUrl = utils.pageUrl.substring(1);
		}
		utils.loginUrl = 'security_logon.asp?autopage=' + encodeURIComponent(utils.pageUrl);

		utils.formatMoney = (function (positiveExample, negativeExample) {
			/*
			This takes an example of a formatted currency and returns a function
			to format numbers in that same format. The first argument is the
			number 1111.2222 formatted with the desired default number of
			decimals. The second argument is the additive inverse of the first.
			For example:
			$1,111.22
			¥ 1,111.22
			€1.111,22
			1 111,22F
			*/
			'use strict';
			function buildFormatter(example) {
				var thousandsSeperator = getGroup(/1([^1]?)1/);
				var decimalSymbol = getGroup(/1([^12]?)2/);
				var decimalPlaces = (example.match(/2/g) || []).length;
				var thousandsRegex = /(\d)(?=(?:\d{3})+$)/g;

				var escapedDecimalSymbol = _.escapeRegExp(decimalSymbol);
				var symbolRegex = new RegExp('^([^1' + escapedDecimalSymbol + ']*).+?([^12' + escapedDecimalSymbol + ']*)$');
				var symbolMatch = symbolRegex.exec(example);
				var prefix = symbolMatch ? symbolMatch[1] || '' : '';
				var suffix = symbolMatch ? symbolMatch[2] || '' : '';
                var infoLost = 0;

				function getGroup(pattern) {
					var match = pattern.exec(example)
					return match ? match[1] : '';
				}

				function decimalToString(decimal, places) {
					if (!places) {
						return '';
					} else {
						var result = getZeroString(places);

						if (decimal) {
							// Converting to an integer and rounding helps with
							// floating point errors.
							var int = Math.round(decimal * Math.pow(10, places));
							// Because leading zeroes will be dropped after
							// converting to integer, the string needs to be
							// padded with zeroes after being converted to a
							// string.
							result = (result + int.toString()).slice(-places);
						}
                        if(int==Math.pow(10,places)) {
                            // in this case, we have to track a +1 to add to the result because "100" sliced down to 2 places loses info
							/*
							* 2020-07-22 - EJ - More info: This is due to things like utils.formatPrice(1.995, 2) returning 1.00 instead
							* of 2.00 or utils.formatPrice(1.9995, 3) returning 1.000 instead of 2.000
							* This is because the whole number is truncated, then the decimal is rounded and only the decimal portion
							* is added back to the whole number portion.
							* This means the rounded decimal portion is always 1 or less.  If it's less than 1 (ex .89) this works.
							* However, if it's 1.000, it would "lose" 1 since only the decimal portion is added back.
							* PS - Don't ask me about the original design, I didn't design it that way.  I only corrected the "if"
							*      statement above where it was hard-coded to 100 to be Math.pow(10,places) so it would work when
							*      rounded to something other than 2 decimal places.
							*/
                            infoLost = 1;
                        } else {
                            infoLost = 0;
                        }

						return decimalSymbol + result;
					}
				}

				function getZeroString(length) {
					var pow = Math.pow(10, length);
					return pow.toString().slice(1);
				}

				function addThousandsSeperator(integer) {
					return (integer + infoLost).toString().replace(thousandsRegex, '$1' + thousandsSeperator);
				}

				return function (value, places) {
					places = typeof places === 'undefined' ? decimalPlaces : parseInt(places);

					// Truncate the value to get the integer portion.
					var integer = value | 0;
					var decimal = decimalToString(value % 1, places); //do first because we need to know if info was lost.
					var number = addThousandsSeperator(integer) + decimal;
					return prefix + number + suffix;
				}
			}

			var formatPositive = buildFormatter(positiveExample);
			var formatNegative = buildFormatter(negativeExample);

			return function (value, places) {
				value = parseFloat(ko.unwrap(value));
				if (isNaN(value)) return value.toString();
				return (value < 0 ? formatNegative : formatPositive)(Math.abs(value), places);
			}
		}('$1,111.22', '($1,111.22)'));

		utils.formatPrice = _.partialRight(utils.formatMoney, parseInt(2));

		utils.scrollTo = function (elementArg) {
			var element = $(elementArg).first();
			if (!element.length) return;

			// If the element is in an inactive tab, make the tab active.
			utils.activateTab(element);

			$('html, body').animate({
					scrollTop: $(element[0]).offset().top - 120 //offset to account for header bar
			}, 500);

		};

		utils.activateTab = function (element) {
			var tab = element.hasClass('.tab-pane') ? element : element.closest('.tab-pane');
			if (!tab.length || tab.hasClass('active')) return;
			var id = tab.attr('id');
			tab
				.closest('.tabbable')
				.find('.nav-tabs > li > a')
				.filter('[href="#' + id + '"], [data-target="#' + id + '"]')
				.tab('show');
		}

		utils.plural = function (singularForm, quantifier, includeQuantity) {
			var quantifierValue = ko.unwrap(quantifier);
			var quantity = _.isArray(quantifierValue) ? quantifierValue.length : quantifier;
			return (includeQuantity ? quantity + ' ' : '') + attache.plural(singularForm, quantity);
		};

		utils.atcListButtonText = function() {
			if(utils.isActiveQuote) {
				return 'Add to ' + oConfig.labels.savedCarts;
			} else {
				return oConfig.labels.addToCartList || 'Add to Cart';
			}
		};

		utils.resetATCForm = function() {
			if(!runHook('catalogTemplatesOverrideResetATCForm', { utils: this })) {
				document.getElementById("atc_form").reset();
				_.forEach(viewModel.results(), function(result) {
					if (setSelectedQty()) {
						result.selectedQty(result.minQty() || 1);
					}else{
						result.selectedQty(undefined);
					}
					result.selectedQty.notifySubscribers();
				});
			}
		}

		utils.addToCart = function (details, cart, parentKey, useInstances) {

			function getQueryStringParameters() {
				var params = {
					type : 'v200add',
					sc_id : oConfig.overrideCartKey || oConfig.sessionData.sc_id,
					s_key : oConfig.sessionData.sessionKey,
					s_url : oConfig.sessionData.storefrontUrl,
					o_url : oConfig.sessionData.orderfrontUrl,
					createsessioncookie : '1',
					noredirect : '1',
					l_ws_key : '',
					mobile : 'no',
					action : 'postlogic',
					modal  : utils.getParameter("modal")
				};

				// Only one order detail can be edited at a time, so if there
				// are more than one, choose an arbitrary one to edit.
				var editedOrderDetail = _.find(details, 'configuratorEditData');
				if (editedOrderDetail) params.odeditkey = editedOrderDetail.configuratorEditData.od_id;

				if (cart) {
					_.assign(params, {
						type: 'add-to-saved-cart',
						o_id: cart.key,
						nickname: cart.nickname
					});
				}

				return params;
			}

			function getPostData() {
				var data = {};
				var productKeys = [];
				var instanceKeys = [];
				var instancesWithKeys = {};

				//' Force use instances on if it's off / undefined and we detect duplicate p_keys
				if(!useInstances && details.length) {
					var distinctProductKeys = details.reduce(function(distinctValues, detail, index) {
						if(distinctValues && distinctValues.indexOf(detail.key()) < 0)
						{
							distinctValues.push(detail.key());
						}
					}, []);

					if(distinctProductKeys && distinctProductKeys.length !== details.length) {
						//' Always use instances if we're adding the same product key to cart in one post
						useInstances = true;
					}
				}

				buildConfiguratorData = function(product) {

					/* config_json field example:
						{
							"question":"F4E82B1A5F5A4A3F915B6618A766754F",
							"questionText":"STRIKE (required)",
							"name":"6800_000_10",
							"answer":"790BA1B41D6E48ECB2A825CB02EDAB93",
							"answerText":"A - 4-7/8 ASA Strike",
							"question_erp_code":"10_001",
							"answer_erp_code":"01",
							"question_status":"True"
						}

						Full config_json structure:
						{ choices: [
							{ field1 },
							{ field2 }
						],
						  configType: 'cartoptions' // or 'configurator'
						}
					*/

					/*
					'	We're setting configType based on the customForm value,
					'	but we should never hit this code if it's true until we
					'	put configurator in KO.  This is here just in case or
					'	for future use.
					'   customForm not be ndefined if not on the product detail page.
					*/
					if(typeof customForm !== 'undefined' && !!customForm) {
						configType = 'configurator';
					} else {
						configType = 'cartoptions';
					}
					var configJson = {
										choices: [],
										configType: configType
									};
					var cartOptions = '';
					if(product.questions && product.questions().length > 0)  {
						product.questions().forEach(function(question) {
							configJsonQuestion = {
								question: question.q_key(),
								name: question.questionText(),
								questionText: question.questionText(),
								answerText: question.selectedAnswer(),
								question_status: true
							};
							if(question.erpCode()) {
								configJsonQuestion["question_erp_code"] = question.erpCode();
							}
							configJson.choices.push(configJsonQuestion);
							cartOptions += question.questionText() + "~" + question.selectedAnswer() + "|"
						});
					}
					return {
							configJson: configJson,
							cartOptions: cartOptions.slice(0, -1) // trim trailing pipe
					};
				}

				handleAddOnProducts = function(item){
					addOnProducts = [];
					if(item.selectedProduct().selectedAddOn && item.selectedProduct().selectedAddOn()){
						addOnProducts.push(item.selectedProduct().selectedAddOn());
					}else if(item.selectedProduct().selectedAddOns && item.selectedProduct().selectedAddOns().length > 0){
						_.forEach(item.selectedProduct().selectedAddOns(), function(item){
							addOnProducts.push(item);
						})
					}
					
					_.forEach(addOnProducts, function(item){
						//handle the add to cart for  addons
						prepareAddToCart(item);
					})
				}

				prepareAddToCart = function(product){
					var productKey = product.key();
					var minQty = product.minQty() || 1;
					var uom = ko.toJS(product.selectedUom());
					var lineKey = productKey;

					if(useInstances) {
						lineKey = utils.createGuid();
						var tempInstanceKey = item.instance || utils.createGuid();

						product.instanceKey = tempInstanceKey;
						product.lineKey = lineKey;

						instanceKeys.push(tempInstanceKey);

						if(!instancesWithKeys[tempInstanceKey]) {
							instancesWithKeys[tempInstanceKey] = [];
						}

						instancesWithKeys[tempInstanceKey].push(lineKey);

						data['instance_' + lineKey] = tempInstanceKey;
						data['p_id_' + lineKey] = productKey;
						data['remove_type_' + lineKey] = 'instance';
						data['instance_key_set'] = '1';
					}

					data['qty_' + lineKey] = product.selectedQty() || minQty;
					if(oConfig.useUom){
						data['uom_' + lineKey] = uom.description;
						if(uom.hasOwnProperty("UomId")) data['uom_id_' + lineKey] = uom.UomId;
						data['uom_conversion_' + lineKey] = uom.uom_conversion;
					}
					data['pw_id_' + lineKey] = ko.unwrap(product.selectedWarehouse().key) || oConfig.defaultWarehouse;

					if(product.type == 'child') {
						if(parentKey && product.key() !== parentKey) {
							data['parent_p_id_' + lineKey] = parentKey;
						} else if(product.parents && product.parents().length > 0){
							data['parent_p_id_' + lineKey] = product.parents()[0].key();
						}
					}

					data['url_' + lineKey]           = product.link();
					data['minqty_' + lineKey]        = product.minQty();
					data['maxqty_' + lineKey]        = product.maxQty();
					data['qty_increment_' + lineKey] = product.stepQty();

					_.assign(data, buildConfiguratorPostData(productKey));
					if (minQty != 1) data['min_order_qty_' + lineKey] = minQty;

					if(product.configuratorEditData && product.configuratorEditData.lineNumber) {
						data['line_number_' + lineKey] = product.configuratorEditData.lineNumber;
					}

					if(product.configuratorEditData && product.configuratorEditData.minQty) {
						data['minqty_' + lineKey] = product.configuratorEditData.minQty;
					}

					if(product.configuratorEditData && product.configuratorEditData.maxQty) {
						data['maxqty_' + lineKey] = product.configuratorEditData.maxQty;
					}

					if(product.configuratorEditData && product.configuratorEditData.qtyIncrement) {
						data['qty_increment_' + lineKey] = product.configuratorEditData.qtyIncrement;
					}

					if(product.configuratorEditData && product.configuratorEditData.removeType) {
						data['remove_type_' + lineKey] = product.configuratorEditData.removeType;
					}

					if(product.configuratorEditData && product.configuratorEditData.priceCalcType) {
						data['price_calc_type_' + lineKey] = product.configuratorEditData.priceCalcType;
						if(product.configuratorEditData.priceCalcType == 'fixed') {
							data['price_' + lineKey] = product.configuratorEditData.price;
						}
					}

					if(product.questions && product.questions().length > 0 && product.hasCartOptions()) {
						var configData = buildConfiguratorData(product);
						data['config_json_' + lineKey] = JSON.stringify(configData.configJson);
						data['cart_option_' + lineKey] = configData.cartOptions;
					}

					productKeys.push(lineKey); //This needs to be above the hook so that the order in which the items are added to cart will persist. - cainb 2019-01-23 12:35:49
				}

				_.forEach(details, function (item) {

					if(oConfig.detailConfig.useAddOnProducts && item.showAddOns){
						handleAddOnProducts(item);
					}
					prepareAddToCart(item.selectedProduct());

					runHook('getPostDataBeforeReturn', { self: self, data: data, product: item.selectedProduct(), productKeys: productKeys });

				});

				data.keys = _.uniq(productKeys).join(',');

				if(instanceKeys.length) {
					data.instances = _.uniq(instanceKeys).join(',');

					for(key in instancesWithKeys) {
						data[key + '_keys'] = instancesWithKeys[key].join(',');
					}
				}

				return data;
			}

			function getAjaxConfig() {
				return {
					url: 'i_i_add_to_cart.asp?' + $.param(getQueryStringParameters()),
					type: 'POST',
					data: $.param(getPostData(), true),  // true forces jquery to not add brackets to array keys
					headers: {
						'X-Requested-With': 'XMLHttpRequest',
						'Accept': 'application/json, text/plain, * / *',
						'Content-Type': 'application/x-www-form-urlencoded'
					}
				};
			}

			function logSummary() {
				var cartName = cart ? ' "' + cart.nickname + '"' : '';
				console.log('Products added to cart' + cartName + ':\n' + _.map(details, function (product) {
					return '\tQty: ' + product.selectedQty() + ' - ' + product.name();
				}).join('\n'));
			}

			function successHandler(responseData, status, request) {
				var cartLines = JSON.parse(responseData)[1].detailLines;
				var newCart = [];
				_.each(cartLines, function(line){
					newCart.push({
						prod_key: line.productID,
						parent_p_id: line.parentProductID,
						qty: line.qty,
						od_key: line.orderDetailKey
					})
				});

				if(oConfig.t_gtm) {
					var gtmProducts = [];
					_.forEach(details, function (item) {

						var gtmProduct = {
							'name': item.name(),
							'id': item.sku(),
							'price': item.unitPrice(),
							'quantity': Number(item.selectedQty())
						}
						gtmProducts.push(gtmProduct);
					});

					if (gtmProducts.length >= 1) {
						window.dataLayer.push({
							'event': oConfig.t_gtm_add_to_cart_event_name,
							'ecommerce': {
								'currencyCode': 'USD',
								'add': {
									'products': gtmProducts
								}
							},
							'customer': {
								'email': cimcloud.session.email,
								'firstname': cimcloud.session.firstName,
								'lastname': cimcloud.session.lastName
							}
						});
					}
				}

				if(oConfig.isModal) {
					parent.modal.done([newCart]);
					try{
						parent.fncReloadCartWindow();
					}catch(err){
					}

					var page = window.parent ? window.parent.location.pathname.split("/").pop() : window.location.pathname.split("/").pop();
					if(!page.includes("payment.asp")) {
						parent.top.utils.toastrATC(details, newCart);
					}
				}else{
					viewModel.activeCart(newCart);

					if(viewModel.mainProduct && viewModel.mainProduct.configuratorEditData) {
						window.location = 'showcart.asp';
						return;
					}
					if(!cart) {
						try{
							fncReloadCartWindow();
						}catch(err){

						}
						if(typeof ofConfig === "undefined" || !ofConfig.stopToastrATC) {
							utils.toastrATC(details, cart);
						}
					} else {
						utils.modalATC(cart, data, details);
					}
					if(oConfig.pageName == 'pc_combined_results.asp' && isActiveLayout('list')) {
						utils.resetATCForm();
					}

					logSummary();

					toggleLoadingWidget(false);

					//render promo messaging template and display if applicable.
					element = utils.renderTemplateToContainer('catalog.promo_bar', data);

					runHook('addToCartSuccessHandler', { self: self, responseData: responseData, details: details });
				}
			}

			function errorHandler(responseData, status, request) {
				logSummary();

				var errorToastrConfig = {
					'closeButton': true,
					'newestOnTop': true,
					'positionClass': 'toast-top-right',
					'preventDuplicates': false,
					'showDuration': 200,
					'hideDuration': 1000,
					'tapToDismiss': true,
					'timeOut': 3000,
					'extendedTimeOut': 1000
				}

				toggleLoadingWidget(false);

				console.log(responseData);

				toastr.error(
					'Unable to add product to cart',
					'There was an error',
					errorToastrConfig
				);

			}
			var bPass = true;

			// TODO: add UoM support (qty_display, etc). Fields aren't available on the UoM Price objects yet.
			if (!_.isArray(details)) {
				details = [ details ];
			}
			var data = {
				details: details,
				cart: cart
			};

			var questionsValid = true;

			details.some(function(detail) {
				if(detail.hasOwnProperty("questionsHaveValidAnswers")) {
					questionsValid = detail.questionsHaveValidAnswers();

					if(!questionsValid) {
						detail.atcErrorText("Required option fields missing.");
					} else {
						detail.atcErrorText("");
					}

					if(!questionsValid && detail.hasOwnProperty("currentParent")) {
						detail.currentParent().rowsAtcAttempted(true);
					}
				}
				return !questionsValid;
			});

			if(!questionsValid) {
				return false;
			}

			if(details.length > 0 && details[0].useConfigurator()){
				/*
					doing an [eval] on an undefined throws an error.
					so, we have to try-catch.
						The template may be overriden to allow a product (with configurator)
						to be added to cart w/o any config options selected.
				*/
				try {
					if(!eval('formValidation' + oConfig.formValidationKey).check()){
						bPass = false;
					}
				} catch(e) {
					//not using FormBuilder
				}
			}else if(details.length <= 0) {
				bPass = false;
			}

			if(bPass){
				toggleLoadingWidget(true);
				cart = ko.toJS(cart);

				var promise = $.ajax(getAjaxConfig())
					.error(errorHandler)
					.done(successHandler);

				return promise;

			}else{
				return false;
			}
		};

		utils.popToastr = function(title, subtext, config) {

			var confirmToastrConfig = config ? config : {
				'closeButton': true,
				'newestOnTop': true,
				'positionClass': 'toast-top-right',
				'preventDuplicates': false,
				'showDuration': 200,
				'hideDuration': 1000,
				'tapToDismiss': false,
				'timeOut': 3000,
				'extendedTimeOut': 1000
			};

			toastr.success(
				subtext,
				title,
				confirmToastrConfig
			);
		};

		utils.popToastrError = function(title, subtext, config) {
			var errorToastrConfig = {
				'closeButton': true,
				'newestOnTop': true,
				'positionClass': 'toast-top-right',
				'preventDuplicates': false,
				'showDuration': 200,
				'hideDuration': 1000,
				'tapToDismiss': true,
				'timeOut': 3000,
				'extendedTimeOut': 1000
			}

			$.extend(errorToastrConfig, config);

			toggleLoadingWidget(false);

			toastr.error(
				subtext,
				title,
				errorToastrConfig
			);
		}

		utils.toastrATC = function(details, cart) {
			if(utils.isActiveQuote){
				var sPage = oConfig.sessionData.orderfrontUrl + '/' + "payment.asp?o_key=" + oConfig.overrideCartKey;
			}else{
				var sPage = oConfig.sessionData.orderfrontUrl + '/' + "showcart.asp";
			}

			if(utils.isActiveQuote && oConfig.isModal){
				sPage = "javascript:window.history.back();"
			}
			var confirmToastrConfig = {
				'closeButton': true,
				'newestOnTop': true,
				'onclick': function() {
					window.location = sPage;
				},
				'positionClass': 'toast-top-right',
				'preventDuplicates': false,
				'showDuration': 200,
				'hideDuration': 1000,
				'tapToDismiss': false,
				'timeOut': 3000,
				'extendedTimeOut': 1000
			}

			if(cart) {
				var confirmTextConfig =  {title: utils.plural(oConfig.labels.savedCartsLabels.itemText, details, true) + ' ' + oConfig.labels.savedCartsLabels.modalConfirmationHeader }
			}else{
				if(utils.isActiveQuote){
					var confirmTextConfig = { title: utils.plural(' product', details, true) + ' added to ' + oConfig.labels.savedCarts }
				}else{
					var confirmTextConfig = { title: utils.plural(' product', details, true) + ' added to Cart'}
				}
			};

			runHook('toastrATCConfiguration', { confirmToastrConfig: confirmToastrConfig, confirmTextConfig: confirmTextConfig });

			utils.popToastr(
				confirmTextConfig.title,
				'Click or tap to view',
				confirmToastrConfig
			);
		}

		utils.modalATC = function(cart, data, details) {
			var modalConfig = cart ?
			{
				body: 'catalog.saved_cart_confirmation_body',
				size: '',
				title: utils.plural(oConfig.labels.savedCartsLabels.itemText, details, true) + ' ' + oConfig.labels.savedCartsLabels.modalConfirmationHeader
			} :
			{
				body: 'catalog.atc_body',
				footer: 'catalog.atc_popup_buttons',
				size: getATCModalSize(),
				title: utils.plural(' Product', details, true) + ' Added to Cart'
			};

			runHook('modalATCAfterConfiguration', { self: self, cart: cart, modalConfig: modalConfig, details: details });

			utils.openModal(modalConfig, data);
		}

		utils.renderTemplateToContainer = function (template, data) {
			var surrogate = document.createElement('div');
			var $container = $('<div>').append(surrogate);

			ko.renderTemplate(
				template,
				data,
				null,
				surrogate,
				'replaceNode'
			);

			return $container;
		};

		utils.getSavedCart = function (carts, callback) {
			var selectedCart = ko.observable();
			selectedCart.subscribe(callback);

			var data = { savedCarts: carts, selectedCart: selectedCart };
			utils.openModal({
				body: oConfig.savedCartPopupTemplate,
				size: 'small',
				title: oConfig.labels.savedCartsLabels.modalHeader,
				backdrop: 'static'
			}, data);
		};

		utils.createGuid = function () {
			// https://stackoverflow.com/a/8809472
			var d = new Date().getTime();
			if(window.performance && typeof window.performance.now === "function"){
				d += performance.now(); //use high-precision timer if available
			}
			var guid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
				var r = (d + Math.random()*16)%16 | 0;
				d = Math.floor(d/16);
				return (c=='x' ? r : (r&0x3|0x8)).toString(16);
			});
			return guid.toUpperCase();
		};

		// Generates a unique ID and returns it twice in a row. Intended for use with the `for`
		// attribute on `label` elements.
		(function () {
			var previousId;

			utils.labelId = function () {
				var id = previousId || utils.createGuid();
				previousId = previousId ? null : id;
				return id;
			};
		}());

		utils.openModal = function (options, data) {
			_.forEach(['header', 'body', 'footer'], function (prop) {
				if (options[prop]) {
					options[prop] = utils.renderTemplateToContainer(options[prop], data);
				}
			});
			modal.open(options);
		};

		var productModel = function (product) {
			var self = this;

			var productCollectionMapping = {
				create: function (options) {
					return new productModel(options.data);
				}
			}

			ko.mapping.fromJS(product, {
				copy: [
					'tab2_html',
					'opt1',
					'opt2',
					'opt3',
					'opt4',
					'opt5',
					'opt6',
					'opt7',
					'opt8',
					'opt9',
					'accountHistory',
					'reviews',
					'tabs',
					'type',
					'promoDescriptions',
					'configuratorEditData',
					'calc_inv_message',
					'use_cart_options',
					'showAddOns',
					'addOnLabel',
					'addOnDisplay'
				],
				related: productCollectionMapping,
				secondRelated: productCollectionMapping,
				children: productCollectionMapping,
				alsoBought: productCollectionMapping,
				addOns: productCollectionMapping
			}, self);

			self.children.extend({ deferred: true });

			self.atcButtonText = ko.observable('');
			self.atcErrorText = ko.observable('');

			if(oConfig.isModal && !ko.unwrap(self.link).includes("modal=1")) {
				self.link((function() {
					var processedLink = ko.unwrap(self.link);
					if(processedLink.indexOf('?') > -1) {
						processedLink += "&";
					} else {
						processedLink += "?";
					}
					processedLink += 'modal=1&modalaction=' + utils.getParameter("modalaction");

					return processedLink;
				})());
			}

			if(utils.getParameter('quickadd') == 'true' && self.type === 'parent'){
				self.childDisplayType('droplist');
			}

			self.updateAtcButtonText = function() {
				if(self.configuratorEditData && self.configuratorEditData.od_id) {
					self.atcButtonText(oConfig.labels.updateCartItem || 'Update');
				} else if (utils.isActiveQuote) {
					self.atcButtonText('Add To ' + oConfig.labels.savedCarts);
				} else {
					self.atcButtonText(oConfig.labels.addToCart || 'Add');
				}
			};

			self.updateAtcButtonText();

			self.hasCartOptions = ko.computed(function() {
				if(self.questions && self.questions() && self.questions().length && (self.type === 'parent' || self.useCartOptions())) {
					return true;
				} else {
					if(self.children && self.children().length) {
						return self.children().reduce(function(hasQuestions, child) {
							return hasQuestions || (!!child.questions && !!child.questions() && !!child.questions().length && child.useCartOptions());
						}, false);
					} else {
						return false;
					}
				}
			});

			self.requireInfoForAtc = ko.computed(function () {
				return !!(
						self.childDisplayType() || 
						self.useConfigurator() || 
						self.hasCartOptions() ||
						(self.showAddOns && oConfig.detailConfig.useAddOnProducts && oConfig.searchConfig.requireAddOnSelection)
					) && oConfig.pageName == 'pc_combined_results.asp';
			});

			self.priceDisplay = ko.observable(function () {
				var template = 'catalog.details_link';
				if(oConfig.pageName == 'pc_product_detail.asp'){
					template = 'catalog.selected_product_price_display';
				}else if (self.useConfigurator()){
					template = 'catalog.configurator_price_display';
				}else if (self.requireInfoForAtc() && self.childStartingPrice()) {
					template = 'catalog.price_start_at'
				} else if (!self.requireInfoForAtc()) {
					template = 'catalog.selected_product_price_display';
				}

				//Manually check for template overrides since this is dynamically returned.
				//Need to convert this to a function and use any time template names are returned.
				if(document.getElementById(template + '_custom')){
					return template + '_custom';
				}else{
					return template;
				}

			}());

			self.selectedQty = ko.observable(function() {
				if(self.configuratorEditData) {
					return self.configuratorEditData.qty;
				}else if(self.qty){
					return self.qty;
				} else {
					return undefined;
				}
			}());

			self.isQtyValid = ko.observable(true);

			self.selectedWarehouse = ko.observable(_.find(self.inventory.warehouses(), function(wh){ return wh.isDefault() } ) || [] );

			if(self.configuratorEditData && self.configuratorEditData.pw_id) {
				self.selectedWarehouse(_.find(self.inventory.warehouses(), function(wh){ return wh.key() == self.configuratorEditData.pw_id } ) || [] );
			}

			self.selectedUom = ko.computed(
				function () {
					var uom = undefined;

					// It's possible that this is a parent product and the configurator
					// edit data will not match a uom on the parent, however the selectedProduct
					// has not been set at this point, so we can't just use selectedProduct
					// With the previous version of this code, this would make the selectedUom
					// undefined and break other parts of the code because it skipped all other
					// checks if configuratorEditData had a uom value. Now it will check the
					// other conditions if the configuratorEditData doesn't match an available uom.
					// There's certainly a better way to handle this, but this will do for now.
					if(self.configuratorEditData && self.configuratorEditData.uom) {
						uom = _.find(self.uomPrice(), function (price) {
							return price.description() == self.configuratorEditData.uom;
						});
					}

					if(!uom) {
						uom = _.find(self.uomPrice(), function (price) {
							if (price.hasOwnProperty("isDefault")){
								return price.isDefault(); //set from SSJS
							} else if(typeof price.IsDefault() === "undefined"){
								return price.ConversionRate() === 1; //fallback
							} else{
								return price.IsDefault() || price.ConversionRate() === 1 || price.ConversionRate() === 12; //returned from COM
							}
						});
					}

					if(!uom && self.uomPrice().length > 0) {
						//if still no match then take the first one
						uom = self.uomPrice()[0];
					}

					return uom;
				});
				
			_.each(self.uomPrice(),function(uom){
				var bHasBreaks = false;
				bHasBreaks = uom.breaks && uom.breaks() && uom.breaks().length > 0;
				uom.hasBreaks(bHasBreaks);
			});

			// Set the selected quantity back to the default if the UOM changes
			self.selectedUom.subscribe(function(newValue) {
				var defaultQty = newValue.minQty() || newValue.step() || 1;
				self.selectedQty(defaultQty);
			});

			self.processedBreaks = ko.computed(function() {
				if (!( self.selectedUom() && self.selectedUom().hasBreaks() )) {
					return [];
				}

				var processed = [];
				var data = self.selectedUom().breaks();

				//converted from price break popup window to properly display single breaks that actually have multiple break records
				if(data[data.length -1].qty() == '1000000' || data[data.length -1].qty() == '100000000'){
					data.pop();
				}

				//If there's only one break we will skip showing the price break information
				if(data.length == 1) {
					return [];
				}

				processed = data.map(function(lineBreak) {
					var price, startQ, endQ, range, qty, proceed;
					price = lineBreak.price();
					startQ = lineBreak.qty();
					endQ = lineBreak.qtyEnd();
					proceed = true;
					qty = self.selectedUom().uom_conversion() || 1;

					if(self.selectedUom().uom() == 'uom_sales' & qty > 1){
						startQ = Math.ceil(startQ / qty);
						endQ = ((Math.ceil(endQ / qty) * qty) - qty) / qty;
						if(qty >= startQ && (qty <= endQ || endQ != 0)){
							price = parseFloat(price).toFixed(2) * qty * startQ;
							if (endQ != '0' && parseInt(endQ) > 0) {
								range = startQ + ' - ' + endQ;
							} else {
								range = startQ + '+';
							}
						}else{
							proceed = false;
						}
					}else{
						if (endQ != '0') {
							range = startQ + ' - ' + endQ;
						} else {
							range = startQ + '+';
						}
					}
					if(proceed){
						return {
							price: price,
							range: range
						}
					}else{
						return {}
					}
				});
				return processed.filter( function(value){ return JSON.stringify(value) !== '{}'; });
			});

			self.configPrice = buildConfiguratorPriceObservable(self.key());

			self.unitPrice = ko.computed(function () {
				if(self.configuratorEditData && self.configuratorEditData.priceCalcType == 'fixed') {
					return self.configuratorEditData.price;
				}
				return self.selectedUom().price() + self.configPrice();
			});

			self.priceTrace = ko.computed(function() {
				var bPriceErrorMessage = '';
				if(utils.getParameter('action') == 'showpricetrace') {
					bPriceErrorMessage = 'Price trace is not available when using WSP Search Service';
				}
				return self.selectedUom().priceTrace
					? self.selectedUom().priceTrace()
					: bPriceErrorMessage;
			});

			self.youSavePercent = ko.computed(function () {
				return (((self.selectedUom().suggestedPrice() - self.selectedUom().price()) / self.selectedUom().suggestedPrice()) * 100).toFixed(2) + '%';
			});

			self.suggestedPrice = ko.computed(function () {
				return self.selectedUom().suggestedPrice();
			});

			self.showYouSave = ko.computed(function () {
				return parseFloat((self.selectedUom().suggestedPrice() || 0).toFixed(oConfig.detailConfig.globalUnitPriceDecimalPlaces)) > parseFloat((self.selectedUom().price() || 0).toFixed(oConfig.detailConfig.globalUnitPriceDecimalPlaces)) && self.selectedUom().suggestedPrice() > 0 && oConfig.showProdYouSave == 1;
			});

			self.childView = function () {
				// return (self.childDisplayType() || 'stand-alone') + '-layout';
				return 'stand-alone-layout';
			}();

			self.showAtc = function () {
				var primary1    = self.inventory.showAtc() && oConfig.searchConfig.showAtc && self.mapPriceType() !== 'show_message';
				var secondary1  = oConfig.isLoggedIn || self.mapPriceType() !== 'require_login_for_atc';
				var secondary2  = oConfig.isLoggedIn || self.mapPriceType() !== 'require_login_for_price_and_atc';
				var tertiary1   = self.mapPriceType() === 'require_atc' || (self.mapPriceType() === 'require_login_or_atc' && !oConfig.isLoggedIn);
				var tertiary2   = self.mapPriceType() !== 'hide' && (self.showProdAtc() != 0);
				var quaternary1 = !(self.type === 'parent' && self.childDisplayType() == 'droplist' && oConfig.pageName != 'pc_combined_results.asp')

				return primary1 &&
						(secondary1) &&
						(secondary2) && (
							(tertiary1) ||
							(tertiary2)
						)
						&& quaternary1;
			}();

			self.showQuickAtc = ko.computed(function () {
				var showQuickAtc = self.showAtc && !self.requireInfoForAtc() && self.type !== "parent"; //initial setting
				if(oConfig.showChildrenSelection && self.type === "child" ){
					if(self.unitPrice() > 0 && self.showAtc){
						showQuickAtc = true;
					}
					else{
						showQuickAtc = false;
					}
				}

				return showQuickAtc; //(self.showAtc && !self.requireInfoForAtc())
			});

			self.allowQuickAddModal = ko.computed(function() {
				if (oConfig.pageName == 'pc_product_detail.asp') return false;

				var exceptions = ['exploded-view', 'input-qty'];
				if (exceptions.includes(self.childDisplayType())) return false;

				return true;
			});

			self.isInCart = ko.computed(function(){
				var cartCount = 0;
				if(viewModel.activeCart && viewModel.activeCart().length){
					var product = _.filter(viewModel.activeCart(), function(cart){
						return cart.prod_key == self.key() || cart.parent_p_id == self.key();
					});
					cartCount = product.length;
				}
				return cartCount;
			});

			self.showPrice = function () {
				return self.type !== 'parent' && (
						(self.mapPriceType() !== 'show_message') &&
						!((self.mapPriceType() === 'require_login_for_price_and_atc') && !oConfig.isLoggedIn) &&
						!(self.mapPriceType() === 'require_atc' || (self.mapPriceType() === 'require_login_or_atc' && !oConfig.isLoggedIn))
					) &&
					(self.mapPriceType() !== 'hide') && (self.showProdPrice() != 0) &&
					oConfig.showPricingOrderEntry;
			}();

			self.showBreaks = ko.observable(function(){
				return oConfig.useBreaks && oConfig.useBreaksTable && oConfig.pageName == 'pc_product_detail.asp';
			}());

			self.mapPriceMessage = function () {
				if (self.mapPriceType() === 'show_message') {
					return oConfig.mapBehaviorMessages.showMessage;
				} else if (self.mapPriceType() === 'require_login_for_price_and_atc' && !oConfig.isLoggedIn) {
					return oConfig.mapBehaviorMessages.requireLoginMessage;
				} else if (self.mapPriceType() === 'require_login_for_atc' && !oConfig.isLoggedIn) {
					return oConfig.mapBehaviorMessages.requireLoginAtcMessage;
				} else if (self.mapPriceType() === 'require_atc') {
					return oConfig.mapBehaviorMessages.requireAtcMessage;
				} else if (self.mapPriceType() === 'require_login_or_atc' && !oConfig.isLoggedIn) {
					return oConfig.mapBehaviorMessages.requireLoginOrAtcMessage;
				} else if (self.mapPriceType() !== 'hide') {
					return '';
				}
			}();

			self.warehouseTemplate = function () {
				if (oConfig.showWarehouses && self.inventory.warehouses().length > 0 && self.inventory.inventoryStatus() === 'in') {
					if ((oConfig.allowWarehouseSelection && (oConfig.pageName == 'pc_combined_results.asp' && oConfig.searchConfig.hideAtcShowInv)) || (oConfig.allowWarehouseSelection && self.showQuickAtc())) {
						return 'warehouse_droplist';
					} else if (oConfig.useWarehousesTable) {
						return 'warehouse_table';
					} else {
						return 'warehouse_info';
					}
				} else {
					return 'warehouse_off';
				}
			}();

			self.priceBreaksTemplate = function(){
				if(oConfig.useBreaks){
					if(oConfig.useBreaksTable && oConfig.pageName == 'pc_product_detail.asp'){
						return 'catalog.qty_breaks_table';
					}else{
						return 'catalog.qty_breaks';
					}
				}else{
					return 'catalog.breaks_off';
				}
			}();

			self.uomTemplate = ko.computed(function() {
				var template;
				if (self.selectedProduct().uomPrice().length > 1) {
					template = 'catalog.uom_select';
				} else {
					template = 'catalog.uom_input';
				}

				if(document.getElementById(template + '_custom')){
					return template + '_custom';
				}else{
					return template;
				}
			});

			self.documentsTemplate = function () {
				return 'catalog.documents';
			}();

			self.qtyInputClick = function (key) {
				jQuery('#qty_'+key).focus();
				jQuery('#qty_'+key).select();
			};

			self.validateQtyInput = function (data) {
				if (utils.getCookie('productLayout') === 'list') {
					return '';
				} else {
					return '1';
				}
			};

			self.hideOnListView = function () {
				if ((isActiveLayout('list') && !oConfig.detailConfig.productKey ) || (self.type === 'child' && oConfig.detailConfig.productKey)) {
					return 'hide';
				}
			};

			self.isChild = function () {
				if (self.type === 'child'){
					return true;
				}else{
					return false;
				}
			}

			self.isParent = function() {
				if (self.type.toLowerCase() === 'parent'){
					return true;
				}else{
					return false;
				}
			}

			self.minQty = ko.computed(function () {
				if (self.configuratorEditData && self.configuratorEditData.minQty) {
					self.selectedProduct().selectedUom().minQty(self.configuratorEditData.minQty);
				}
				if (oConfig.useMinimumQuantity) {
					return self.selectedProduct().selectedUom().minQty();
				} else {
					return 0;
				}
			});

			self.stepQty = ko.computed(function () {
				if (self.configuratorEditData && self.configuratorEditData.qtyIncrement) {
					self.selectedProduct().selectedUom().step(self.configuratorEditData.qtyIncrement);
				}
				if (oConfig.useQuantityIncrement) {
					return self.selectedProduct().selectedUom().step();
				} else {
					return 1;
				}
			});

			self.maxQty = ko.computed(function () {
				if (self.configuratorEditData && self.configuratorEditData.maxQty) {
					self.selectedProduct().selectedUom().maxQty(self.configuratorEditData.maxQty);
				}
				if (oConfig.useMaximumQuantity && self.selectedProduct().selectedUom().maxQty() > 0) {
					return self.selectedProduct().selectedUom().maxQty();
				} else {
					return '';
				}
			});

			self.hasQuantityRestrictions = ko.computed(function () {
				return (oConfig.useMinimumQuantity || oConfig.useMaximumQuantity || oConfig.useQuantityIncrement) && !!(self.minQty() || self.stepQty() !== 1 || self.maxQty());
			});

			self.quantityRestrictionsHtml = ko.computed(function () {
				var lines = [];

				if (self.minQty())
					lines.push(oConfig.labels.minQtyPopover.replace(/<min_qty>/,self.minQty()));

				if (self.stepQty() !== 1)
					lines.push('Qty Increment: ' + self.stepQty());

				if (self.maxQty())
					lines.push('Maximum Qty: ' + self.maxQty());

				return lines.join('<br>');
			});

			self.addToSavedCart = function () {
				utils.getSavedCart(viewModel.savedCarts(), function (cart) {
					if (cart) {
						if (!_.includes(viewModel.savedCarts(), cart)) {
							// Insert the new cart in sorted order, notifying exactly once.
							var index = _.sortedIndex(viewModel.savedCarts(), cart, 'nickname');
							viewModel.savedCarts.splice(index, 0, cart);
						}

						var parentKey;

						if(self.type == 'child' && viewModel.mainProduct) {
							parentKey = ko.unwrap(viewModel.mainProduct).key();
						}

						utils.addToCart(self, cart, parentKey);
					}
				});
			};

			self.addToCart = function () {
				var parentKey;

				if(self.type == 'child' && viewModel.mainProduct) {
					parentKey = ko.unwrap(viewModel.mainProduct).key();
				}

				return utils.addToCart(self, undefined, parentKey);
			};

			self.atcPopupSuccess = function () {

			};

			self.atcPopupFail = function () {

			};

			self.searchfields = function() {
				var includedSearchfields = Object.keys(self).filter(function(key) { return key.startsWith('searchfield'); }).sort();
				var searchfieldsObject = {};
				includedSearchfields.forEach(function(searchfieldName) {
					if(searchfieldName == "searchfields") // The existing searchfields object
					{
						var originalKeys = Object.keys(self[searchfieldName]).filter(function(key) { return key.startsWith('searchfield'); });
						console.log(JSON.stringify(originalKeys));
						originalKeys.forEach(function(key) {
							if(!searchfieldsObject[key]) {
								searchfieldsObject[key] = ko.unwrap(self[searchfieldName][key])
							}
						});
					} else {
						if(!oConfig.searchFieldsShell[searchfieldName]) {
							// because we can't use "?." until we stop trying to support IE
							// like: oConfig.searchFieldsShell[searchfieldName]?.label || ''
							oConfig.searchFieldsShell[searchfieldName] = {
								label: '',
								show: false
							};
						}
						searchfieldsObject[searchfieldName] = {
							field: ko.observable(searchfieldName),
							value: ko.observable(ko.unwrap(self[searchfieldName])),
							label: ko.observable(oConfig.searchFieldsShell[searchfieldName].label || ''),
							show: ko.observable(!!ko.unwrap(self[searchfieldName]) && (oConfig.searchFieldsShell[searchfieldName].show || false))
						}
					}
				});
				return searchfieldsObject;
			}();

			self.selectFirstTab = function () {
				$('#tab1 > a').click();
			};

			self.getWebPage = function (webPageId) {
				return 'page.asp?p_key=' + webPageId + ' .wpc_page_content';
			};

			self.useTabs = function () {
				return oConfig.detailConfig.useAdvancedTabs && self.tabs && self.tabs.length && self.showTabs();
			}

			self.usingDownloadsTab = function() {
				var index = _.findIndex(self.tabs, function(t) {
								return t.dynamicSource == "downloads"
							});
				return self.useTabs() && index > -1;
			}

			self.getSmartListLinkOrderStats = function(parent){
				if(!parent){
					return 'product_history_detail.asp'
				}
				if(oConfig.detailConfig.useSkuDisplay && oConfig.detailConfig.useAliases) {
					return 'product_history_detail.asp?search2=(searchexact~p.sku_display~' + parent.sku() + '|OR|searchexact~pa.sku_alias~' + parent.sku() + '&s=' + parent.sku()
				}
				else if(oConfig.detailConfig.useAliases){
					return 'product_history_detail.asp?search2=searchexact~pa.sku_alias~' + parent.sku() + '&s=' + parent.sku()
				}
				else if(oConfig.detailConfig.useSkuDisplay) {
					return 'product_history_detail.asp?search2=searchexact~p.sku_display~' + parent.sku() + '&s=' + parent.sku()
				}else{
					return 'product_history_detail.asp?search2=searchexact~p.sku~' + parent.sku() + '&s=' + parent.sku()
				}
			};

			self.getSmartListLinkInvoiceStats = function(parent){
				if(!parent){
					return 'products_invoiced_detail.asp'
				}
				if(oConfig.detailConfig.useSkuDisplay && oConfig.detailConfig.useAliases) {
					return 'products_invoiced_detail.asp?search2=(searchexact~p.sku_display~' + parent.sku()+ '|OR|searchexact~pa.sku_alias~' + parent.sku() + '&s=' + parent.sku()
				}
				else if(oConfig.detailConfig.useAliases){
					return 'products_invoiced_detail.asp?search2=searchexact~pa.sku_alias~' + parent.sku() + '&s=' + parent.sku()
				}
				else if(oConfig.detailConfig.useSkuDisplay) {
					return 'products_invoiced_detail.asp?search2=searchexact~p.sku_display~' + parent.sku() + '&s=' + parent.sku()
				}else{
					return 'products_invoiced_detail.asp?search2=searchexact~p.sku~' + parent.sku() + '&s=' + parent.sku()
				}
			};

			self.tableColumns = ko.computed( function () {
				var columns = Array.prototype.concat(
					[
						{
							if: oConfig.showImgCol,
							label: oConfig.labels.imgCol,
							field: 'thumb',
							template: 'catalog.input_qty_thumb_display',
							cellClass: 'qty-input-table-thumb'
						},
						{
							if: oConfig.showNameCol && self.childDisplayType() !== 'add-row',
							label: oConfig.labels.nameCol,
							field: 'nm',
							template: 'catalog.input_qty_nm_display'
						},
						{
							label: 'SKU',
							field: 'sku',
							template: 'catalog.input_qty_sku_display'
						},
						{
							if: self.hasCartOptions(),
							label: 'Options',
							field: 'questions',
							template: 'catalog.cart_options'
						}
					],
					self.childDisplayType() !== 'add-row' ? self.childSelectors() || [] : [],
					[
						{
							if: oConfig.usePromos,
							label: 'Promo',
							template: 'catalog.input_qty_promo_display'
						},
						{
							if: oConfig.useIdp,
							label: 'Status',
							template: _.property('warehouseTemplate')
						},
						{
							label: 'Price',
							headerClass: 'cell-right',
							cellClass: 'cell-right',
							field: 'unitPrice',
							format: utils.formatPrice,
							template: 'catalog.selected_product_price_display'
						},
						{
							label: 'Actions',
							headerClass: 'cell-right',
							cellClass: 'cell-right',
							template: 'catalog.atc_qty_input',
							width: '1%'
						}
					]
				);

				// diagram_number needs to be added to the child products using the pos field on the mapping table
				if (self.childDisplayType() == 'exploded-view') {
					columns.unshift({
						label: 'ID',
						field: 'diagramNumber'
					});
				}

				return _.filter(columns, function (column) {
					return !('if' in column) || ko.unwrap(column.if);
				});
			});

			runHook('productModelReviews', { self: self, product: product, reviews: self.reviews });

			self.reviews = new PagedArray(self.reviews, 3);

			self.setupQuestions = function() {
				self.questions().forEach(function(question) {
					question.answers = ko.observableArray();

					if(question.type() === 'select') {
						if(question.useSelectOne()) {
							question.answers.push({
								label: question.selectOneText(),
								value: ''
							});
						}

						if(question.answerList().length > 0) {
							var answersSplit = question.answerList().split('|');
							answersSplit.forEach(function(answer) {
								var answerSet = answer.split('~');
								question.answers.push(
									{
										label: answerSet[0],
										value: answerSet[0]
									});
							});
						}
					}
				});
			}

			self.rowCollection = ko.observableArray();

			self.addRows = function(numberOfRows) {
				numberOfRows = numberOfRows || 1;
				for(var i=0;i<numberOfRows;i++) {
					var row = {
						selectedChild: ko.observable(undefined)
					}
					//' Clone the children for the selector so that the child
					//' references across rows are not the same.
					row.children = self.children ?  self.children().map(
														function(item) {
															var jsChild = ko.mapping.toJS(item);
															var koChild = ko.mapping.fromJS(jsChild, productMapping);

															//' Add the currentParent back as the re-mapping rests it
															koChild.currentParent = ko.observable(self);

															//' Add a new property for the current row index
															//' to make it easier to remove the items
															//' We use a guid to ensure it's always consistent.
															koChild.rowKey = utils.createGuid();
															return koChild;
														})
												: [];
					self.rowCollection.push(row);
				}
			}

			self.setupAddRowView = function() {
				if(self.childDisplayType() === 'add-row') {
					self.addRows();
					if(!!oConfig.childSkuMatch) {
						var matchedChild = self.rowCollection()[0].children.filter(function(child) {
												return oConfig.childSkuMatch === child.sku();
											});

						if(matchedChild && matchedChild.length > 0){
							self.rowCollection()[0].selectedChild(
								matchedChild[0]
							);
						}
					}
				}
			}

			self.childSelectors = ko.observableArray([]);

			self.processChildren = function() {
				_.each(self.children(), function(child){
					child.promoDescriptions = [];
					_.each(self.promoDescriptions, function(promo){
						if(promo.targetKeys.indexOf(child.key()) > -1){
							child.promoDescriptions.push(promo);
						}
					});
					child.configuratorEditData = self.configuratorEditData;
					child.currentParent(self);
					child.updateAtcButtonText();
					child.setupQuestions();
				});

				_.forEach(self, function (value, key) {
					var keyString = String(key);
					var matched = keyString.match(/^opt(\d)$/);

					if (matched && value) {
						var selector = {};
						selector.field = matched[0];
						selector.label = value;
						// _.sortByAll has been absorbed into _.sortBy in lodash 4.0.0+
						var lodashSortBy = typeof(_.sortByAll) == 'function' ? _.sortByAll : _.sortBy;

						selector.options = lodashSortBy(
							_.uniq(
								_.map(self.children(), function (child) {
									var optXsort = (typeof(child[matched[0] + '_sort']) == 'function' ? child[matched[0] + '_sort']() : child[matched[0] + '_sort']) || 0;
									var optSort = (typeof(child[matched[0]]) == 'function' ? child[matched[0]]() : child[matched[0]]) || 0;

									var thisOpt = {
										option: child[matched[0]],
										sort: optXsort || optSort
									};

									runHook("selectorOptionsItemOverride", { key: key, option: thisOpt, product: child });

									return thisOpt;

								}),
								'option'
							),
							[ 'sort', 'option' ]
						);
						selector.selectedOption = ko.observable();
						if (oConfig.detailConfig.selectChildProductOnLoad) {
							selector.selectedOption(selector.options[0]);
						}

						var childSku = oConfig.childSkuMatch || (!!self.configuratorEditData ? self.configuratorEditData.sku : '') || '';

						if (childSku){
							var oChild = {};
							_.each(self.children(),function(child){
								if(childSku == child.sku()) {
									oChild = child;
									return false;
								}
							});
							_.each(selector.options,function(option){
								if(option.option == oChild[selector.field]){
									selector.selectedOption(option);
								}
							})
						}
						selector.showSelector = ko.observable(true);
						self.childSelectors.push(selector);
					}
				});

				self.selectedOptions = ko.computed(function () {
					return _.map(ko.unwrap(self.childSelectors), function (item) {
						var selection = { option: '', sort: '' };
						if (item.selectedOption()) {
							selection = item.selectedOption().option;
						}
						return { field: item.field, option: selection };
					});
				});

				self.selectedProduct = ko.computed(function () {
					var filter = {};
					_.forEach(self.selectedOptions(), function (option) {
						filter[option.field] = option.option;
					});
					var filteredChildren = _.filter(self.children(), filter);
					if (filteredChildren
						&& filteredChildren.length === 1
						&& self.childDisplayType() !== 'input-qty'
						&& self.childDisplayType() !== 'exploded-view'
						&& self.childDisplayType() !== 'matrix-all'
						&& self.childDisplayType() !== 'add-row'
						) {
							return filteredChildren[0];
					} else {
						return self;
					}
				});

				self.setupQuestions();
				self.setupAddRowView();
			}

			if (self.children && self.children().length) {
				self.processChildren();
			} else {
				self.selectedProduct = ko.observable(self);
			}

			self.loadNextSelector = function(optNumber, callback, asyncLoadOptions) {
				var selectedOpts = _.map(self.childSelectors().filter(function(selector) {return !!selector.selectedOption && !!selector.selectedOption();}), function(s) {
					return s.selectedOption().option;
				}).join('~');
				$.ajax({
					url: oConfig.pageName, //current page.
					data: {
						ajax: 'get-product-opts',
						key: self.key(),
						optFields: selectedOpts,
						modal: 1,
						modalaction: utils.getParameter("modalaction")
					},
					dataType: 'json',
					success: function(data) {
						var selector = self.childSelectors().find(function(selector) {
							return selector.field == 'opt' + optNumber;
						});

						if(!selector) {
							selector = {
								field: 'opt' + optNumber,
								label: self['opt' + optNumber],
								showSelector: ko.observable(oConfig.displayDroplistPlaceholdersForLazyLoad)
							}
							self.childSelectors.push(selector);
						}

						selector.index = optNumber;
						selector.options = data.map(function(o) {
							return {
								option: o.opt,
								sort: 0,
								count: o.count,
								pKey: o.p_key
							}
						});
						selector.loading = ko.observable(false);
						selector.selectedOption = ko.observable();
						selector.showSelector(oConfig.displayDroplistPlaceholdersForLazyLoad || !!selector.options.length);

						selector.selectedOption.subscribe(function(newValue) {
							//clear any selectors after this one
							self.childSelectors().forEach(function(s) {
								if(s.index > selector.index) {
									s.selectedOption(undefined);
									s.options.splice(0, s.options.length);
									s.selectedOption.notifySubscribers();
									s.showSelector(oConfig.displayDroplistPlaceholdersForLazyLoad);
								}
							});

							self.childSelectors.notifySubscribers();

							if(self.children) self.children.removeAll();
							// did we actually select something
							if (newValue) {
								selector.loading(true);
								var callback = function() {
									selector.loading(false);
								}
								if (selector.index < self.childSelectors().length) {
									self.loadNextSelector(selector.index + 1, callback, asyncLoadOptions);
								} else {
									//load the child
									if (asyncLoadOptions) asyncLoadOptions.done = true;
									self.loadChildProduct(newValue.pKey, callback);
								}
							}else{
								self.selectedProduct(self);
							}
						});
						self.childSelectors.notifySubscribers();
					},
					error: function() {
						utils.popToastrError('Error Loading List', 'There was an error loading the product drop list');
					},
					complete: function() {
						if (callback) callback();
						if (asyncLoadOptions) {
							var asyncLoadOptionsArray = asyncLoadOptions.getArray();
							var index = optNumber - 1;
							var option = self.childSelectors()[index];
							var availableOptions = option.options;
							var selectedOption = null;
							if (index < asyncLoadOptionsArray.length) {
								_.forEach(availableOptions, function (value, key) {
									if (value.option == asyncLoadOptionsArray[index]) selectedOption = value;
								});
							} else if (oConfig.detailConfig.selectChildProductOnLoad) {
								selectedOption = availableOptions[0];
							}
							option.selectedOption(selectedOption);
						}
					}
				})
			}

			self.loadChildProduct = function(pKey, callback) {
				$.ajax({
					url: oConfig.pageName, //current page.
					data: {
						ajax: 'get-child-product',
						key: pKey,
						parentKey: oConfig.mainProductKey,
						modal: 1,
						modalaction: utils.getParameter("modalaction"),
						action: utils.getParameter("action") == 'showpricetrace' ? 'showpricetrace' : ''
					},
					dataType: 'json',
					success: function(data) {
						var product = ko.mapping.fromJS(data.products[0], productMapping);
						product.type = "child";
						// self.children.push(product);
						if(self.questions && self.questions().length && product.useCartOptions() && !product.f_id()) {
							if(product.questions) {
								product.questions(ko.mapping.fromJS(ko.mapping.toJS(self.questions))());
							} else {
								product.questions = ko.observableArray(ko.mapping.fromJS(ko.mapping.toJS(self.questions))());
							}
						}
						product.setupQuestions();
						product.configuratorEditData = self.configuratorEditData;
						product.updateAtcButtonText();
						self.selectedProduct(product);
						runHook('productDetailLoadChildProductSuccess', { self: self, product: product });
					},
					error: function() {
						utils.popToastrError('Error Loading Product', 'There was an error loading the product');
					},
					complete: callback
				});
			}

			self.quantityRestrictionsHtml.subscribe(function(newValue) {
				var popoverElement = $('#pop-' + $.escapeSelector(self.sku().replace(/([^A-Za-z0-9[\]{}_.:-])\s?/g, '_')));
				if(popoverElement){
					var popoverData = popoverElement.data('popover');
					if (popoverData) {
						popoverData.options.content = newValue;
					}
				}
			});

			self.lazyLoadingInProgress = ko.observable(false);

			if (self.key() == oConfig.mainProductKey && self.type === 'parent' && self.children().length === 0 && getOriginalPageName() === 'pc_product_detail.asp' && self.childDisplayType() != 'droplist') {
				if (!runHook('productDetailGetChildProductsByParentKey', { self: self }, {}, this)) {
				self.lazyLoadingInProgress(true);
				$.ajax({
					url: oConfig.pageName, //current page.
					data: {
						ajax: 'get-child-products-by-parent-key',
						key: oConfig.mainProductKey,
						modal: 1,
						modalaction: utils.getParameter("modalaction")
					},
					dataType: 'json',
					success: function(data) {
						data.forEach(function(childProduct) {
							var product = ko.mapping.fromJS(childProduct, productMapping);
							product.type = "child";
							if(self.questions && self.questions().length && product.useCartOptions() && !product.f_id()) {
								if(product.questions) {
									product.questions(ko.mapping.fromJS(ko.mapping.toJS(self.questions))());
								} else {
									product.questions = ko.observableArray(ko.mapping.fromJS(ko.mapping.toJS(self.questions))());
								}
								//product.hasCartOptions(true);
							}
							product.configuratorEditData = self.configuratorEditData;
							product.updateAtcButtonText();
							//self.selectedProduct(product);
							self.children.push(product);
						});

						self.processChildren();
						/*
						if(self.childDisplayType() === 'matrix-all') {
							self.matrix(ko.unwrap(ko.mapping.fromJS(generateMatrixData(ko.mapping.toJS(self)))));
						}
                        */
						self.lazyLoadingInProgress(false);
					},
					error: function() {
						utils.popToastrError('Error Loading Product', 'There was an error loading the product');
					},
					complete: function() { self.lazyLoadingInProgress(false); }
				});
			}
			}

			/*
				This function generates the display data for parent products whose
				childDisplayType is 'matrix-all'. It returns a data structure that
				looks like this:

				[
					{
						label: <<Label of row>>,
						swatch: <<Either an HTML color without the # or blank. E.g. 00ff44>>,
						thumb: <<A thumbnail image link to display if the swatch is blank>>,
						cols: [
							{
								label: <<Label of column>>,
								product: <<This links to the product.children[x] data. When KO maps this, it will be its own self-contained ProductModel.>>
							},
							{
								... more columns
							}
						]
					},
					{
						... more rows
					}
				]
			*/
			
			self.matrix = ko.computed(function () {
				if (self.childDisplayType() === 'matrix-all') {
					/***** Main method *****/

					// Initial vars
					var rowOpt = '';
					var colOpt = '';
					var swatchOpt = "color_code";

					// Build the matrix
					var rawChildren = self.children();
					var bucketed = bucketChildren(rawChildren, rowOpt, colOpt, swatchOpt);
					bucketed.rowKeys = sortKeys(bucketed.rowKeys);
					bucketed.colKeys = sortKeys(bucketed.colKeys);

					runHook('productDetailMatrixBeforeConstruction', {
						parent: self,
						configs: {
							rowOpt: rowOpt,
							colOpt: colOpt,
							swatchOpt: swatchOpt
						},
						bucketed: bucketed
					});

					var matrix = constructMatrix(bucketed);

					runHook('productDetailMatrixData', {
						parent: self,
						matrix: matrix
					});

					return matrix;
				} else {
					return [];
				}

				/***** Helper functions *****/

				// Find the unique row and column values and their sorts, and index the children.
				function bucketChildren(rawChildren, rowOpt, colOpt, swatchOpt) {
					var initial = {
						products: {},
						rowKeys: {},
						colKeys: {}
					};

					var result = _.reduce(rawChildren, function(acc, cur) {
						var rowLabel = ko.toJS(cur[rowOpt]);
						var rowSort = ko.toJS(cur[rowOpt + '_sort']);
						var rowSwatch = ko.toJS(cur[swatchOpt]);
						var rowThumb = ko.toJS(cur['thumb']);
						var colLabel = ko.toJS(cur[colOpt]);
						var colSort = ko.toJS(cur[colOpt + '_sort']);

						// Index the child
						if (!acc.products[rowLabel]) {
							acc.products[rowLabel] = {};
						}
						acc.products[rowLabel][colLabel] = cur;

						// Keep track of the unique row values
						if (!acc.rowKeys[rowLabel]) {
							acc.rowKeys[rowLabel] = {
								label: rowLabel,
								sort: rowSort,
								swatch: rowSwatch,
								thumb: rowThumb
							};
						}

						// Make sure we have a swatch and thumb
						if (!acc.rowKeys[rowLabel].swatch) {
							acc.rowKeys[rowLabel].swatch = rowSwatch;
						}
						if (!acc.rowKeys[rowLabel].thumb) {
							acc.rowKeys[rowLabel].thumb = rowThumb;
						}

						// Keep track of the unique column values
						acc.colKeys[colLabel] = {
							label: colLabel,
							sort: colSort
						};

						runHook('productDetailMatrixReduce', {
							parent: self,
							configs: {
								rowOpt: rowOpt,
								colOpt: colOpt,
								swatchOpt: swatchOpt
							},
							acc: acc,
							cur: cur
						});

						return acc;
					}, initial);

					runHook('productDetailMatrixBucketed', {
						parent: self,
						configs: {
							rowOpt: rowOpt,
							colOpt: colOpt,
							swatchOpt: swatchOpt
						},
						bucketed: bucketed
					});

					return result;
				}

				// Sort the rowKeys and colKeys
				function sortKeys(obj) {
					var list = _.values(obj);
					var sorted = _.sortBy(list, 'sort');
					return sorted;
				}

				function constructMatrix(bucketed) {
					// Construct the matrix, one row at a time
					var matrix = _.map(bucketed.rowKeys, function(row) {
						// Get values
						var label = row.label || '';
						var swatch = row.swatch || '';
						var thumb = row.thumb || 'images/no-image.png';

						// Generate the columns
						var cols = constructColumns(bucketed, row);

						// Return the results
						var row = {
							label: label,
							swatch: swatch,
							thumb: ko.observable(thumb), // Don't know why this is an observable, so leaving it
							cols: cols
						};

						runHook('productDetailMatrixRow', {
							parent: self,
							bucketed: bucketed,
							row: row
						});

						return row;
					});

					return matrix;
				}

				function constructColumns(bucketed, row) {
					var columns = _.map(bucketed.colKeys, function(col) {
						// Find the product that sits at the intersection of row and col
						var product = bucketed.products[row.label][col.label];

						var col = {
							label: col.label,
							product: product
						};

						runHook('productDetailMatrixCol', {
							parent: self,
							bucketed: bucketed,
							row: row,
							col: col
						});

						return col;
					});

					return columns;
				}
			}).extend({ deferred: true });

			if ((self.key() == oConfig.mainProductKey || oConfig.mainProductKey == '') && self.type !== 'parent') {
				self.setupQuestions();
			}

			// 2019-07-05 EJ - This only needs to run on the mainProduct on
			//                 the product detail page so I added a mainProductKey
			//                 var and check it against the current product's key
			if (self.key() == oConfig.mainProductKey && self.type === 'parent' && self.childSelectors().length === 0 && getOriginalPageName() === 'pc_product_detail.asp' && self.childDisplayType() == 'droplist') {

				if(!self.opt1 || self.opt1 == ''){
					//force this to stand-alone because it has bad data setup.
					self.type = 'stand-alone';
					console.log('This Parent product is set to "droplist" type but doesn\'t have a value in the opt1 field.  This is required for drop list type products.');
				}else{
					var selectorCount = 0;
					_.forEach(self, function (value, key) {
						var keyString = String(key);
						var matched = keyString.match(/^opt(\d)$/);

						if (matched && value) {
							selectorCount++;
							var selector = {};
							selector.field = matched[0];
							selector.label = value;
							selector.options = [];
							selector.selectedOption = ko.observable();
							selector.loading = ko.observable(matched[0] === 'opt1');
							selector.index = selectorCount;
							selector.showSelector = ko.observable(oConfig.displayDroplistPlaceholdersForLazyLoad);

							self.childSelectors.push(selector);
						}
					});

					// as third option:
					//   pass an array of options to do loading
					//   pass a shorter array to load up to that point then load first option from then on
					//   pass null/false to not do loading
					self.loadNextSelector(1, null, new (function() { // this is an inplace constructor
						this.array = oConfig.childOptionList,
						this.done = false;
						this.getArray = function() {
							if (this.done) return [];
							else return this.array;
						}
					})());
				}
			}

			self.removeRow = function(rowKey) {
				var index = _.findIndex(self.rowCollection(), function(row) {
					return row.selectedChild().rowKey === rowKey;
				});

				self.rowCollection.splice(index, 1);
			}

			self.currentParent = ko.observable(function() {
				if(self.type !== 'child') {
					return self;
				}

				if (self.currentparent && self.currentParent()) {
					return self.currentParent
				}

				if (self.type === 'child' && viewModel && ko.unwrap(viewModel.mainProduct)) {
					var matchingParent = self.parents().find(
						function(parent) {
							return parent.key() === ko.unwrap(viewModel.mainProduct).key();
						}
					)
					return matchingParent ? ko.unwrap(viewModel.mainProduct) : self;
				}

				return self;
			}());

			self.addRowsToCart = function() {
				var items = self.rowCollection().map(
													function(item) {
														return item.selectedChild();
													})
													.filter(
															function(item) {
																return item !== undefined
															});

				utils.addToCart(items, undefined, self.key(), true);
			}

			self.rowsAtcAttempted = ko.observable(false);

			self.questionsHaveValidAnswers = ko.computed(function() {
				var validOptions = true;

				if(self.useCartOptions()) {
					self.questions().some(function(question) {
						var answer = question.selectedAnswer();
						var answerPopulated = (answer !== '' && answer !== undefined);
						if(question.required() && !answerPopulated) {
							validOptions = false;
						}
						return !validOptions;
					});
				}

				return validOptions;
			});

			self.allRowsValid = ko.computed(function() {
				var rowsValid = true;

				self.rowCollection().some(function(row) {
					rowsValid = row.selectedChild() === undefined || row.selectedChild().questionsHaveValidAnswers();
					return !rowsValid;
				});

				return rowsValid;
			});

			// List of fields that will have legitimate HTML in them. Note - we
			// are intentionally not putting these in a site option in order to
			// force any changes to go through source control.
			var fieldsToDecode = [
				'inventory.stockMessage',
				'description',
				'name',
				'tabs>staticContent',
				'thumbAltText',
				'picAltText',
				'addOnLabel'
			];

			runHook('fieldsToDecodeFilter', { self: self, product: product, fieldsToDecode: fieldsToDecode });

   			// Set each field in the above list to the decoded version of itself
            fieldsToDecode.forEach(function(propName) {
                //using a > to denote a property on an array.
                if(propName.indexOf('>') > -1){
                    //get the array and the property on that array to be decoded
                    var collection = self[propName.split('>')[0]];
                    var propName = propName.split('>')[1];

                    //now check to see if the array is observable before looping
                    if(typeof collection == 'function'){
                        _.each(collection(), function(obj){
                            if (typeof obj()[propName] == 'function') { // If it is an observable
                                obj()[propName](utils.decodeHTML(obj()[propName]()) );
                            } else if (typeof obj()[propName] == 'string') { // If it is a string
                                obj()[propName] = utils.decodeHTML(obj()[propName]);
                            } else {
                                // Do nothing
                            }
                        })
                    }else{
                        _.each(collection, function(obj){
                            if (typeof obj[propName] == 'function') { // If it is an observable
                                obj[propName](utils.decodeHTML(obj[propName]()) );
                            } else if (typeof obj[propName] == 'string') { // If it is a string
                                obj[propName] = utils.decodeHTML(obj[propName]);
                            } else {
                                // Do nothing
                            }
                        })
                    }

                }else{
                    var field = _.get(self, propName);

                    if (typeof field == 'function') { // If it is an observable
                        field( utils.decodeHTML(field()) );
                    } else if (typeof field == 'string') { // If it is a string
                        _.set(self, propName, utils.decodeHTML(field));
                    } else {
                        // Do nothing
                    }
                }
            });

			if(self.currentParent()) {

				if(self.documents().length == 0 && self.currentParent().documents().length > 0 ){
					self.documents(self.currentParent().documents());
				}

				if(!self.description() && self.currentParent().description()) {
					self.description(self.currentParent().description())
				}

				//Handle Tab Inheritance at the individual tab instead of the array of tabs
				var newTabs = [];
				for(i=1; i <= oConfig.detailConfig.numberOfProductTabs; i++){
					var parentTab = _.filter(self.currentParent().tabs, function(tab){ return tab.index == i})[0];
					var childTab  = _.filter(self.tabs,                 function(tab){ return tab.index == i})[0];
					if(childTab){
						newTabs.push(childTab);
					}else if(!childTab && parentTab){
						//Inherit from the parent
						newTabs.push(parentTab);
					}
				}
				if(newTabs){
					self.tabs = newTabs;
				}

			}

			if (self.showAddOns)  {
				if (self.addOnDisplay == 'checkboxes')
					self.selectedAddOns = ko.observableArray([]);
				else //             ^ note difference in plural
					self.selectedAddOn  = ko.observable();
			}

			self.addOnOptions = function(){
				var options = [];
				
				if(self.addOns){
					options = _.map(self.addOns(), function(product){
						product.selectedQty(product.minQty() || 1);
						return ko.observable(product)
					})
				}
				return options;
			}();

			runHook('productModelBottom', { self: self, product: product });
		};

		var productMapping = {
			create: function (options) {
				return new productModel(options.data);
			}
		};

		var searchResultsPropertiesModel = function (properties) {
			var self = this;

			self.selectedSort = ko.observable(utils.getParameter('sortby') || oConfig.searchConfig.defaultSort);
			self.selectedRpp = ko.observable(utils.getParameter('rpp') || oConfig.searchConfig.rpp);
			self.startCount = ko.observable((oConfig.searchConfig.page - 1) * oConfig.searchConfig.rpp + 1);

			self.endCount = ko.observable(function () {
				var rpp = (oConfig.searchConfig.rpp === 0) ? oConfig.searchConfig.total : oConfig.searchConfig.rpp;
				return Math.min(((oConfig.searchConfig.page - 1) * rpp) + rpp, oConfig.searchConfig.total);
			}());

			self.maxPage = ko.observable(
				Math.ceil(oConfig.searchConfig.total / oConfig.searchConfig.rpp)
			);

			self.selectedLayout = ko.observable(
				utils.getCookie('productLayout')
			);

			self.changeRpp = function (value) {
				var sUrl = utils.setParameter('rpp', value);
				sUrl = sUrl + '&page=1';
				window.location =  sUrl;
			};

			self.layoutTemplate = ko.computed(function () {
				utils.setCookie('productLayout', self.selectedLayout());
				window.location.reload();
				return 'catalog.' + self.selectedLayout() + '_view'
			});

			runHook('searchResultsPropertiesModelBottom', { self: self, properties: properties });
		};

		function PagedArray(array, pageSize) {
			//' if array has already been processed, just return it
			if(array && array.all) {
				return array;
			}
			var self = this;
			self.all = ko.observableArray(array || []);
			self.pageSize = ko.observable(pageSize || 10);
			self.page = ko.observable(1).extend({ counter: 1 });
			self.numPages = ko.computed(function () {
				return Math.ceil(self.size() / self.pageSize());
			});
			self.size = ko.computed(function () {
				return self.all().length;
			});
			self.items = ko.computed(function () {
				var pageSize = self.pageSize();
				var start = (self.page() - 1) * pageSize;
				return self.all.slice(start, start + pageSize);
			});
		}
	</script>



		<script type="text/html" id="catalog.breadcrumbs">
			<ul id="detail_breadcrumbs" class="breadcrumb" itemprop="breadcrumb" vocab="http://schema.org/" typeof="BreadcrumbList">
				<!-- ko if: oConfig.activeBreadcrumb && oConfig.activeBreadcrumb.length > 0 -->
					<!-- ko foreach: oConfig.activeBreadcrumb -->
						<li data-bind="css: { active: !link }, attr: {'property': utils.breadCrumbProperty(link), 'typeof': utils.breadCrumbItemType(link)} ">
							<!-- ko if: link -->
								<a property="item" typeof="WebPage" data-bind="attr: { href: link }"><span data-bind="html: name" property="name"></span></a>
								<span class="divider"></span>
							<!-- /ko -->
							<span data-bind="html: link ? '' : utils.decodeHTML(name) "></span>
							<meta property="position" data-bind="attr: { 'content' : $index() + 1 }">
						</li>
					<!-- /ko -->
				<!-- /ko -->
				<!-- ko ifnot: oConfig.activeBreadcrumb && oConfig.activeBreadcrumb.length > 0 -->
					<!-- ko foreach: $data -->
						<li data-bind="css: { active: !link }, attr: {'property': utils.breadCrumbProperty(link), 'typeof': utils.breadCrumbItemType(link)} ">
							<!-- ko if: link -->
								<a property="item" typeof="WebPage" data-bind="attr: { href: link }"><span data-bind="html: name" property="name"></span></a>
								<span class="divider"></span>
							<!-- /ko -->
							<span data-bind="html: link ? '' : utils.decodeHTML(name) "></span>
							<meta property="position" data-bind="attr: { 'content' : $index() + 1 }">
						</li>
					<!-- /ko -->
				<!-- /ko -->
			</ul>
		</script>

	
		<script type="text/html" id="catalog.detail">
			<!-- ko if: mainProduct.selectedProduct -->
				<div id="detail_page_product">
					<span data-bind="template: { name: 'catalog.breadcrumbs', data: breadcrumbs }"></span>
					<span data-bind="template: { name: mainProduct.childDisplayType() === 'input-qty' || mainProduct.childDisplayType() === 'exploded-view' || mainProduct.childDisplayType() === 'matrix-all' || mainProduct.childDisplayType() == 'add-row' ? 'catalog.advanced_parent_layout' : 'catalog.product_view', data: mainProduct }"></span>
					<span data-bind="template: { name: 'catalog.additional_sections', data: mainProduct }"></span>
				</div>
			<!-- /ko -->
			<!-- ko ifnot: viewModel.mainProduct.selectedProduct -->
				<div id="detail_page_product">
					<div class="alert alert-warning" data-bind="html: oConfig.labels.productNotFound"></div>
				</div>
			<!-- /ko -->

		</script>
	
		<script type="text/html" id="catalog.results">
			<!-- ko ifnot: oConfig.searchConfig.pageType == 'category' && !$data.category -->
				<div id="list_wrap">
					<div id="list_wrap_pad">
						<div id="list_head" data-bind="
							template: $data.category ?
							{ name: 'catalog.category_header', data: category } :
							'catalog.page_title'
						"></div>
						<div id="products_header" class="list-toolbar products_header" data-bind="template: 'catalog.header'"></div>
						<div id="products_view" data-bind="attr : { 'data-layout' : getActiveLayout() }, template: getLayoutTemplate($data)"></div>
						<div id="products_footer" class="list-toolbar products_footer" data-bind="template: { name : 'catalog.footer' } "></div>
					</div>
				</div>
			<!-- /ko -->
			<!-- ko if: oConfig.searchConfig.pageType == 'category' && !$data.category -->
				<div id="list_wrap">
					<div id="list_wrap_pad">
						<div class="alert alert-warning" data-bind="html: oConfig.labels.categoryNotFound"></div>
					</div>
				</div>
			<!-- /ko -->
		</script>



	<script type="text/html" id="catalog.category_header">
		<!-- ko template: { name: 'catalog.breadcrumbs', data: breadcrumbs } --><!-- /ko -->
		<!-- ko if: slideShowDisplay == 'above' -->
			<!-- ko template: { name: 'catalog.slideshow' } --><!-- /ko -->
		<!-- /ko -->
		<div class="head_container">
			<!-- ko if: pic -->
				<div class="head_thumb">
						<img data-bind="attr: { src: utils.buildImagePath(pic) }"/>
				</div>
			<!-- /ko -->
			<div class="head_desc_container">
				<h1 class="head_title" data-bind="html: name"></h1>
				<!-- ko if: oConfig.searchConfig.showCategoryDescription && description -->
					<div class="head_desc" data-bind="html: description"></div>
				<!-- /ko -->
			</div>
		</div>
		<!-- ko if: slideShowDisplay == 'below' -->
			<!-- ko template: { name: 'catalog.slideshow' } --><!-- /ko -->
		<!-- /ko -->
		<!-- ko template: { name: 'catalog.category_list', data: children, if: children.length > 0 } --><!-- /ko -->
	</script>

	<script type="text/html" id="catalog.category_list">
		<div class="category-listings" data-layout="gallery" data-bind="foreach: $data">
			<div class="prod-card">
				<div class="prod-thumb" data-bind="visible: oConfig.searchConfig.showThumb && pic2">
					<a data-bind="attr: { href: link, title: utils.decodeHTML(name), 'data-key': key }">
						<img data-bind="attr: { src: utils.buildImagePath(pic2) }"/>
					</a>
				</div>
				<div class="prod-info">
					<div class="prod-desc">
						<div class="prod-nm">
							<a data-bind="attr: { href: link, title: utils.decodeHTML(name), 'data-key': key }, html: name"></a>
						</div>
					</div>
				</div>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.page_title">
		<!-- ko if: oConfig.searchConfig.pageTitle == '' -->
			<h1 data-bind="
					text: oConfig.searchConfig.labels.searchResultsHeader
					        .replace('<count>', oConfig.searchConfig.total)
						      .replace('<keyword>', '&lsquo;' + decodeURIComponent(utils.getParameter('search_keyword')) + '&rsquo;'),
					visible: utils.getParameter('search_keyword').length > 0
					">
			</h1>
			<h1 data-bind="
					text: oConfig.searchConfig.total + ' results',
					visible: utils.getParameter('search_keyword').length === 0 && utils.getParameter('queue_id').length === 0
					">
			</h1>
		<!-- /ko -->
		<!-- ko if: oConfig.searchConfig.pageTitle != '' -->
			<h1 data-bind="html: oConfig.searchConfig.pageTitle"></h1>
		<!-- /ko -->
		<!-- ko if: viewModel.failedLookups && viewModel.failedLookups.length -->
			<div class="alert alert-warning">
				<p>The following SKUs could not be found or could not be added because they are no longer available:</p>
				<ul>
					<!-- ko foreach: viewModel.failedLookups-->
						<li data-bind="text: sku"></li>
					<!-- /ko -->
				</ul>
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.header">
		<div id="sort_control" class="list-toolbar-control sort-control" data-bind="template: 'catalog.order_by'"></div>
		<div id="rpp_control" class="list-toolbar-control rpp-control" data-bind="template: 'catalog.rpp'"></div>
		<div id="layout_control" class="list-toolbar-control layout-control" data-bind="template: 'catalog.layout'"></div>
	</script>

	<script type="text/html" id="catalog.order_by">
		<label class="input-prepend" data-bind="if: oConfig.searchConfig.showSort">
			<span class="add-on toolbar__sort-by__text" data-bind="html: oConfig.searchConfig.labels.sort"></span>
			<select
				id="page_sort"
                class="toolbar__sort-by__drop"
				data-bind="
					foreach: oConfig.searchConfig.productSortOptions,
					value: getSelectedSort(),
					event: { change: changeSort }
			">
				<option data-bind="text: display, attr: { value: field ? field + '~' + direction : '' }"></option>
			</select>
		</label>
	</script>

	<script type="text/html" id="catalog.rpp">
		<label class="input-append" data-bind="if: oConfig.searchConfig.showRpp, visible: !utils.getParameter('favorites')" >
			<select
				id="rpp"
                class="toolbar__per-page__drop"
				data-bind="
					options: oConfig.searchConfig.rppOptions,
					value: getSelectedRpp(),
					event: { change: changeRpp }
				">
				</select>
			<span class="add-on toolbar__per-page__text" data-bind="html: oConfig.searchConfig.labels.rpp" ></span>
		</label>
	</script>

	<script type="text/html" id="catalog.page_count">
		<div data-bind="text: 'Showing ' + getStartCount() + ' - ' + getEndCount() + ' of ' + oConfig.searchConfig.total + ' results'"></div>
	</script>

	<script type="text/html" id="catalog.layout">
		<div data-bind="if: oConfig.searchConfig.showLayout && !utils.getParameter('modal') && !utils.getParameter('queue_id')">
			<span data-bind="html: oConfig.searchConfig.labels.layout"></span>
			<div class="btn-group btn-group-small layout-control__wrap">
				<button
					type="button"
					id="gallery_layout_toggle"
					data-bind="
						click: function () { setLayout('gallery') },
						css: { active: isActiveLayout('gallery') },
						html: oConfig.searchConfig.labels.galleryView
					"
					class="btn btn-default"
				></button>
				<button
					type="button"
					id="list_layout_toggle"
					data-bind="
						click: function () { setLayout('list') },
						css: { active: isActiveLayout('list') },
						html: oConfig.searchConfig.labels.listView
					"
					class="btn btn-default"
				></button>
			</div>
			<div class="results-download" data-bind="template: { if: oConfig.searchConfig.showDownload && oConfig.isLoggedIn}">
				<a href='javascript: window.location = utils.pageUrl + (utils.pageUrl.indexOf("?")>0?"&":"?") + "downloadasfile=1";' class='cust_download' title='Download'>
					<img data-bind="attr: { src: utils.buildImagePath('common_images/ddt_download.png') }" border="0" align="absmiddle">
					Download
				</a>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.no_product_found">
		<div class="alert alert-warning">Product Not Found.</div>
	</script>

	<script type="text/html" id="catalog.no_results">
		<!-- ko if: oConfig.searchConfig.pageType == 'favlist' -->
			<p>There are no products in this favorites list.</p>
		<!-- /ko -->
		<!-- ko if: oConfig.searchConfig.pageType == 'invoice' -->
			<p class="alert alert-info">No items are eligible for reorder on invoice #<span data-bind="text: oConfig.searchConfig.reorderNumber"></span>. 
			Click <a href="invoices.asp">here</a> to choose a new invoice.</p>
		<!-- /ko -->
		<!-- ko if: oConfig.searchConfig.pageType == 'salesorder' -->
			<p class="alert alert-info">No items are eligible for reorder on sales order #<span data-bind="text: oConfig.searchConfig.reorderNumber"></span>. 
			Click <a href="all_orders.asp">here</a> to choose a new sales order.</p>
		<!-- /ko -->
		<!-- ko if: oConfig.searchConfig.pageType != 'category' && oConfig.searchConfig.pageType != 'favlist' 
		     && oConfig.searchConfig.pageType != 'invoice' && oConfig.searchConfig.pageType != 'salesorder' -->
			<!-- ko  if : oConfig.labels.noResults -->
				<span data-bind=" html : oConfig.labels.noResults "></span>
			<!-- /ko -->
			<!-- ko ifnot : oConfig.labels.noResults -->
				<p class="alert alert-info">There are no products that match your search.</p>
				<h5>Search Tips:</h5>
				<ul>
					<li>You may want to broaden your search. This can be accomplished by shortening or generalizing the words you use in your search.</li>
					<li>If you are entering a part number, do not include any hyphens or other punctuation marks. You may even try using a portion of the number if it is a long one.</li>
					<li>Spelling does makes a difference. Be sure to check for spelling errors as this will affect your results.</li>
					<li>Mutations of a word also make a difference. For example, the word 'accessory' will return different results than 'accessories'.</li>
					<li>Plural makes a difference too. Adding an 's' may impact results. Often it is better to search for the singular.</li>
					<li>The search is not case sensitive, so you can type in all lower case, all caps, or any mixture.</li>
					<li>Contact customer service for assistance if you still cannot find what you are looking for.</li>
				</ul>
			<!-- /ko -->
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.paging">
		<div
			class="pagination"
			data-bind="if: oConfig.searchConfig.rpp > 0 && oConfig.searchConfig.total > oConfig.searchConfig.rpp"
		>
			<ul data-bind="foreach: pagingNodes()">
				<li data-bind="css: { active: page == oConfig.searchConfig.page, disabled: !page }">
					<!-- ko if: page && page !== oConfig.searchConfig.page -->
						<a data-bind="attr: { 'href': utils.setParameter('page', page) }">
							<span data-bind="html: text"></span>
						</a>
					<!-- /ko -->
					<!-- ko ifnot: page && page !== oConfig.searchConfig.page -->
						<span data-bind="html: text"></span>
					<!-- /ko -->
				</li>
			</ul>
		</div>
	</script>

	<script type="text/html" id="catalog.footer">
		<div id="results_paging" class="list-toolbar-control" data-bind="template: 'catalog.paging'"></div>
		<div id="results_text" class="list-toolbar-control" data-bind="template: 'catalog.page_count'"></div>
	</script>


	<script type="text/html" id="catalog.gallery_view">
		<div
			id="prod_listings"
			class="prod-listings"
			data-bind="fastForEach: results"
		>
			<!-- ko template: 'catalog.product_card' -->
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.gallery_actions">
		<span data-bind="template: 'catalog.atc_full'"></span>
	</script>


	<script type="text/html" id="catalog.list_view">
		<form
			name="atc_form"
			id="atc_form"
			class="frmAddToCart"
			method="POST"
			data-bind="attr: { action: oConfig.formAction, submit: submitForm($data) }"
		>
			<div
				id="prod_listings"
				class="prod-listings"
				data-bind="fastForEach: results"
			>
				<!-- ko template: { name: 'catalog.product_card' } -->
				<!-- /ko -->
			</div>
			<!-- ko if: oConfig.searchConfig.showAtc && showAddAllToCart() && !oConfig.showListViewATC -->
				<div class="multi-add" data-bind="template: 'catalog.list_view_atc'"></div>
			<!-- /ko -->
		</form>
	</script>

	<script type="text/html" id="catalog.list_view_atc">
		<div class="multi-add__content" >
			<button
				class="btn btn-block btn-primary multi-add__btn"
				data-bind="
					html: utils.atcListButtonText(),
					click: function(data,event) {addToCartWithValidation(results(), event);}">
			</button>
		</div>
	</script>

<script type="text/html" id="catalog.product_card_with_children">
	<!-- ko template: 'catalog.product_card' --><!-- /ko -->
</script>


<script type="text/html" id="catalog.product_card_no_children">
	<!-- ko template: 'catalog.product_card' --><!-- /ko -->
</script>

<script type="text/html" id="catalog.product_card">
	<div class="prod-card">
		<!-- ko if: isActiveLayout('gallery') || oConfig.pageName == 'pc_product_detail.asp' -->
			<div class="prod-thumb" data-bind="visible: oConfig.searchConfig.showThumb, css: { '-using-flags': oConfig.usingFlags } ">
				<span class="prod-thumb-img" data-bind="template: 'catalog.image_link'"></span>
				<span class="prod-thumb-flags" data-bind="template: 'catalog.flags_thumb'"></span>
			</div>

			<div class="prod-info">
				<div class="prod-desc">
					<div class="prod-nm">
						<!-- ko template: 'catalog.name_link' --><!-- /ko -->
					</div>
					<!-- ko template: 'catalog.rating_score' --><!-- /ko -->
				</div>
				<div class="prod-idp" data-bind="template: 'catalog.inventory', visible: inventory.isInventoryItem() && oConfig.useIdp"></div>
				<!-- ko if: $data.isDangerous -->
					<!-- ko template: 'catalog.hazmat' --><!-- /ko -->
				<!-- /ko -->
				<!-- ko template: { name: 'catalog.product_account_history_short',data: accountHistory, if: accountHistory && accountHistory.accountName }--><!-- /ko -->
				<div class="prod-pricing" data-bind="template: { name: priceDisplay, data: selectedProduct } "></div>
				<!-- ko if: oConfig.showChildrenSelection && $data.children -->
					<div class="prod-children" data-bind= "template:{
						name: 'catalog.children_selection',
						if: oConfig.showChildrenSelection && $data.children && children().length
					}"></div>
				<!-- /ko -->
				<div class="prod-actions" data-bind="template: 'catalog.product_actions'"></div>
				<div class="prod-details">
					<!-- ko template: { name: 'catalog.detail_info' } --><!-- /ko -->
				</div>
				<!-- ko if: utils.getParameter('favorites') && oConfig.pageName == 'pc_combined_results.asp' -->
					<!-- ko template: 'catalog.remove_fav_button' --><!-- /ko -->
				<!-- /ko -->
			</div>
		<!-- /ko -->
		<!-- ko if: isActiveLayout('list') -->
			<div class="prod-thumb" data-bind="visible: oConfig.searchConfig.showThumb, css: { '-using-flags': oConfig.usingFlags } ">
				<span class="prod-thumb-img" data-bind="template: 'catalog.image_link'"></span>
				<span class="prod-thumb-flags" data-bind="template: 'catalog.flags_thumb'"></span>
			</div>
			<div class="prod-info">
				<div class="prod-desc">
					<div class="prod-nm">
						<!-- ko template: 'catalog.name_link' --><!-- /ko -->
					</div>
					<div class="prod-ds" data-bind="
						html: selectedProduct().description,
						visible: oConfig.searchConfig.showDescription && selectedProduct().description()">
					</div>
					<!-- ko template: 'catalog.rating_score' --><!-- /ko -->
					<div class="prod-details">
						<!-- ko template: { name: 'catalog.detail_info' } --><!-- /ko -->
					</div>
				</div>
			</div>
			<!-- ko template: { name: 'catalog.product_account_history_short',data: accountHistory, if: accountHistory && accountHistory.accountName }--><!-- /ko -->
			<div class="prod-atc">
				<div class="prod-idp" data-bind="template: 'catalog.inventory'"></div>
				<div class="prod-pricing" data-bind="template: { name: priceDisplay, data: selectedProduct } "></div>
				<!-- ko if: oConfig.showChildrenSelection && $data.children -->
					<div class="prod-children" data-bind= "template:{
						name: 'catalog.children_selection',
						if: oConfig.showChildrenSelection && $data.children && children().length
					}"></div>
				<!-- /ko -->
				<div class="prod-actions" data-bind="template: 'catalog.product_actions'"></div>
			</div>
			<!-- ko if: utils.getParameter('favorites') && oConfig.pageName == 'pc_combined_results.asp' -->
				<!-- ko template: 'catalog.remove_fav_button' --><!-- /ko -->
			<!-- /ko -->
		<!-- /ko -->
	</div>
</script>

<script type="text/html" id="catalog.advanced_parent_layout">
	<!-- ko template: { name: "catalog.product_title", data: selectedProduct } --><!-- /ko -->
	<div id="product_view" class="product_view" data-bind="attr: { class: oConfig.detailConfig.gridRowClass }">
		<div data-bind="attr: { class: oConfig.detailConfig.gridLeftColumnClass + ' product-detail__left' }">
				<div id="product_images" data-bind="template: { name: 'catalog.image_gallery', data: selectedProduct }"></div>
		</div>
		<div data-bind="attr: { class: oConfig.detailConfig.gridRightColumnClass + ' product-detail__right' }">
			<div class="product_view__share-code" data-bind="template: 'catalog.share_code'"></div>
			<span class="product_view__detail-info" data-bind="template: 'catalog.detail_info'" ></span>
			<span class="product_view__rating-detail" data-bind="template: 'catalog.rating_detail'"></span>
			<div data-bind="
				template: {
					name: 'promotions.descriptions',
					if: promoDescriptions.length,
					data: {
						title: 'Product on Promotion',
						descriptions: promoDescriptions,
						selectedProduct: selectedProduct
					}
				}
			">
			</div>
			<div class="detail-docs" data-bind="template: { if: oConfig.detailConfig.showDocuments && !selectedProduct().usingDownloadsTab(), name: 'catalog.documents', data: documents() }"></div>
			<!-- ko if: oConfig.detailConfig.showProductDescriptionTop -->
				<span data-bind="template: { name: 'catalog.product_description', data: selectedProduct }"></span>
			<!-- /ko -->
			<a class="btn btn-primary scroll-to"
				 data-bind="
				   attr: { href: '#input-qty' },
					 html : oConfig.detailConfig.labels.inputQtyATCLabel,
					 click: function() {
						 scrollToTarget($element);
						 return false;
					 }
				">
			</a>
		</div>
	</div>
	<!-- ko template: 'catalog.additional_info' --><!-- /ko -->
	<span data-bind="template: { name: 'catalog.add_ons', data: selectedProduct }"></span>
	<h2 id="input-qty" data-bind="html : oConfig.detailConfig.labels.inputQty"></h2>
	<div id="atcform" data-bind="visible: !lazyLoadingInProgress(), template: childDisplayType() === 'matrix-all' ? 'catalog.matrix_form' : childDisplayType() === 'add-row' ? 'catalog.add_row_form' : 'catalog.input_qty_form'"></div>
	<div data-bind="if: lazyLoadingInProgress">
		<div class="sk-three-bounce" style="margin: 0 auto;">
			<div class="sk-child sk-bounce1"></div>
			<div class="sk-child sk-bounce2"></div>
			<div class="sk-child sk-bounce3"></div>
		</div>
		<div class="text-center">
			<small><em>Loading options...</em></small>
		</div>
	</div>

</script>

<script type="text/html" id="catalog.matrix_form">
	<form id="atc_form">
		<!-- ko template: 'catalog.matrix_table' --><!-- /ko -->

		<div class="form-actions">
			<button
				name="btnAddToCart"
				type="submit"
				class="btn btn-primary"
				data-bind="
					click: function (data, event) {
						var isSelected = _.flow(_.property('selectedQty'), ko.unwrap);
						var products = _.filter(children(), isSelected);
						addToCartWithValidation(products, event);
					},
					html : utils.atcListButtonText()
				"
			></button>
		</div>
	</form>
</script>

<script type="text/html" id="catalog.matrix_table">
	<div class="cim-matrix" data-bind="fastForEach: matrix">
		<div data-bind="template: 'catalog.matrix_row', css: 'cim-matrix__option cim-matrix__option-' + $index()"></div>
	</div><!-- .cim-matrix -->
</script>

<script type="text/html" id="catalog.matrix_row">
	<div class="cim-matrix__child__preview">
		<div class="cim-matrix__child__preview__wrap">
			<!-- ko if: swatch -->
				<div class="cim-matrix__child__preview__thumb" data-bind="style: { 'background-color': '#' + swatch() }"></div>
			<!-- /ko -->

			<!-- ko ifnot: swatch -->
				<div class="cim-matrix__child__preview__thumb">
					<img data-bind="attr: { src: utils.buildImagePath(thumb()) }" onerror="utils.handleImageError(this)">
				</div>
			<!-- /ko -->

			<h3 class="cim-matrix__child__preview__name"  data-bind="text: label"></h3>
		</div>
	</div><!-- cim-matrix__child__preview -->

	<div class="cim-matrix__children">
		<div class="cim-matrix__children__wrap" data-bind="fastForEach: cols">
			<div class="cim-matrix__child" data-bind="template: 'catalog.matrix_row_column'"></div>
		</div>
	</div><!-- .cim-matrix__children -->
</script>

<script type="text/html" id="catalog.matrix_row_column">
	<div class="cim-matrix__child__outer-wrap">
		<div class="cim-matrix__child__inner-wrap">
			<!-- ko if: product -->
				<p class="cim-matrix__child__size" data-bind="text: label"></p>
				<!-- ko template: { name: 'catalog.matrix_prod', data: product} --><!-- /ko -->
			<!-- /ko -->

			<!-- ko ifnot: product -->
				<!-- ko template: 'catalog.matrix_prod_not_found' --><!-- /ko -->
			<!-- /ko -->
		</div>
	</div><!-- /.cim-matrix__child -->
</script>

<script type="text/html" id="catalog.matrix_prod">
	<div class="cim-matrix__child__found">
		<div class="cim-matrix__child__pricing" data-bind="template: 'catalog.selected_product_price_display'"></div>
		<div class="cim-matrix__child__qty-input">
			<span data-bind="template: {name: 'catalog.atc_qty_input' }" ></span>
		</div>
		<div class="cim-matrix__child__idp">
			<p class="cim-matrix__child__idp-stock" data-bind="text: inventory.stock"></p>
			<p class="cim-matrix__child__idp-stock-msg" data-bind="html: inventory.stockMessage"></p>
		</div>
		<p class="cim-matrix__child__qty-price" data-bind="template: {name: priceBreaksTemplate }" ></p>
	</div>
</script>

<script type="text/html" id="catalog.matrix_prod_not_found">
	<div class="cim-matrix__child__not-found"><p> - </p></div>
</script>

<script type="text/html" id="catalog.input_qty_form">
	<form id="atc_form">
		<!-- ko template: 'catalog.input_qty_table' --><!-- /ko -->
		<!-- ko if: !oConfig.showListViewATC -->
			<div class="form-actions">
				<button
					name="btnAddToCart"
					type="submit"
					class="btn btn-large btn-block btn-primary"
					data-bind="
						click: function (data, event) {
							var isSelected = _.flow(_.property('selectedQty'), ko.unwrap);
							var products = _.filter(children(), isSelected);
							addToCartWithValidation(products, event, key());
						},
						html : utils.atcListButtonText()
					"
				></button>
			</div>
		<!-- /ko -->
	</form>
</script>

<script type="text/html" id="catalog.cart_options">
	<!-- ko if: oConfig.useCartOptions && hasCartOptions() -->
	<ul class="unstyled" data-bind="foreach: questions">
		<li class="form-inline" data-bind="template: { name: 'catalog.cart_option_' + type() }"></li>
	</ul>
	<!-- /ko -->
	<!-- ko if: oConfig.useCartOptions && !hasCartOptions()  -->
		<span class="mute">No options available</span>
	<!-- /ko -->
</script>

<script type="text/html" id="catalog.cart_option_textbox">
	<div class="control-group">
		<label class="control-label" data-bind="text: questionText"></label>
		<div class="controls">
			<input style="min-width: 180px !important /* temp fix for stretchy */;max-width: 80%;"
				data-bind="value: selectedAnswer,
				           attr: {required: required, maxlength: maxLength() == 0 ? '' : maxLength() },
									 init: function() { setSelectedCartOptionAnswer($data); }"
				type="text" />
			<span class="text-error" data-bind="text:requiredText, visible: required"></span>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.cart_option_textarea">
	<div class="control-group">
		<label class="control-label" data-bind="text: questionText"></label>
		<div class="controls">
			<textarea style="min-width: 180px !important /* temp fix for stretchy */;max-width: 80%;"
				data-bind="value: selectedAnswer,
				           attr: {required: required, maxlength: maxLength() == 0 ? '' : maxLength() },
									 init: function() { setSelectedCartOptionAnswer($data); }"></textarea>
			<span class="text-error" data-bind="text:requiredText, visible: required"></span>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.cart_option_select">
	<div class="control-group">
		<label class="control-label" data-bind="text: questionText"></label>
		<div class="controls">
			<select style="min-width: 162px !important /* temp fix for stretchy */;max-width: 80%;"
				data-bind="value: selectedAnswer,
				          attr: {required: required, maxlength: maxLength() == 0 ? '' : maxLength() },
									options: answers,
									optionsText: 'label',
									optionsValue: 'value',
									init: function() { setSelectedCartOptionAnswer($data); }">
				<option>-- Select One --</option>
			</select>
			<span class="text-error" data-bind="text:requiredText, visible: required"></span>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.add_row_form">
	<form id="atc_form" >
		<!-- ko template: 'catalog.add_row_table' --><!-- /ko -->
		<div class="text-error pull-right" data-bind="visible: !allRowsValid() && rowsAtcAttempted()">Please ensure all required fields are populated.</div>
		<div class="form-actions" data-bind="visible: !oConfig.childSkuMatch">
			<button class="btn btn-small" data-bind="click: function () { addRows(1) }"><i class="fas fa-fw fa-plus"></i> Add 1 Row</button>
			<button class="btn btn-small" data-bind="click: function () { addRows(5) }"><i class="fas fa-fw fa-plus"></i> Add 5 Rows</button>
			<button class="btn btn-primary pull-right" data-bind="click: addRowsToCart">Add To Cart</button>
		</div>
	</form>
	<!-- ko ifnot: showAtc -->
		<div data-bind="html: mapPriceMessage"></div>
	<!-- /ko -->
</script>

<script type="text/html" id="catalog.add_row_table">
	<div class="tablesaw-overflow qty-input-table">
		<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" role="presentation">
			<thead>
				<tr>
					<th width="1%">Option</th>
					<!-- ko fastForEach: tableColumns -->
					<th data-bind="
							html: utils.htmlDecode(ko.unwrap($data).label),
							css: ko.unwrap($data).headerClass,
							attr: {
								width: ko.unwrap($data).width
							}
						">
					</th>
					<!-- /ko -->
				</tr>
			</thead>
			<!-- ko template: { afterRender: function() { $(document).trigger('enhance.tablesaw'); } } -->
				<tbody data-bind="fastForEach: rowCollection">
					<tr>
						<td>
							<select style="width: auto;" data-bind="options: children, optionsText: 'name', optionsCaption: '-- Select Option --', value: selectedChild, optionsAfterRender: setOptionHtmlFromName">
								<!-- option data-bind="text: name, value: $data"></option -->
								<option data-bind="value: undefined">-- Select One--</option>
							</select>
						</td>
						<!-- ko fastForEach: $parent.tableColumns -->
							<!-- ko if: $parent.selectedChild() && $data.template -->
								<td data-bind="
										template: {name: template, data: $parent.selectedChild(), if: $parent.selectedChild },
										css: ko.unwrap($data).cellClass
									">
								</td>
							<!-- /ko -->

							<!-- ko if: $parent.selectedChild() && !$data.template -->
								<td data-bind="
										text: ($data.format || _.identity)($parent.selectedChild()[field]),
										css: ko.unwrap($data).cellClass
									">
								</td>
							<!-- /ko -->

							<!-- ko if: !$parent.selectedChild() -->
								<td><span data-bind="text: $data.placeholder ? $data.placeholder || '-' : '-'"></span></td>
							<!-- /ko -->
						<!-- /ko -->
					</tr>
				</tbody>
			<!-- /ko -->
		</table>
	</div>
</script>

<script type="text/html" id="catalog.input_qty_table">
	<div class="tablesaw-overflow qty-input-table">
		<table class="tablesaw tablesaw-stack" data-tablesaw-mode="stack" role="presentation">
			<thead>
				<tr data-bind="fastForEach: tableColumns">
					<th data-bind="
							html: utils.htmlDecode(ko.unwrap($data).label),
							css: ko.unwrap($data).headerClass,
							attr: {
								width: ko.unwrap($data).width
							}
						">
					</th>
				</tr>
			</thead>
			<!-- ko template: { afterRender: function() { $(document).trigger('enhance.tablesaw'); } } -->
				<tbody data-bind="fastForEach: children">
					<tr data-bind="fastForEach: $parent.tableColumns">
					<!-- ko if: $data.template -->
						<td data-bind="
								text: ko.unwrap($data).label != 'Image' ? ko.unwrap($data).label : '',
								css: ko.unwrap($data).label != 'Image' ? 'tablesaw__label-mobile' : '',
								visible: ko.unwrap($data).label != 'Image'
							">
						</td>
						<td data-bind="
								template: {name: template, data: ko.unwrap($parent) },
								css: ko.unwrap($data).cellClass
							">
						</td>
					<!-- /ko -->

					<!-- ko if: !$data.template -->
						<td data-bind="
								text: ko.unwrap($data).label != 'Image' ? ko.unwrap($data).label : '',
								css: ko.unwrap($data).label != 'Image' ? 'tablesaw__label-mobile' : '',
								visible: ko.unwrap($data).label != 'Image'
							">
						</td>
						<td data-bind="
								text: ($data.format || _.identity)(ko.unwrap($parent)[field]),
								css: ko.unwrap($data).cellClass
							">
						</td>
					<!-- /ko -->
					</tr>
				</tbody>
			<!-- /ko -->
		</table>
	</div>
</script>

<script type="text/html" id="catalog.product_title">
	<div class="page-header detail-title">
		<h1 data-bind="html: selectedProduct().name() || name()"></h1>
		<!-- ko template: 'catalog.product_links' --><!-- /ko -->
	</div>
</script>

<script type="text/html" id="catalog.product_view">
	<!-- ko template: { name: "catalog.product_title", data: selectedProduct } --><!-- /ko -->
	<div id="product_view" class="row-fluid product_view">
		<div data-bind="attr: { class: oConfig.detailConfig.gridLeftColumnClass + ' product-detail__left' }">
			<!-- ko if: !oConfig.detailConfig.showMainImage -->
				<!-- ko template: 'catalog.detail_info_container' --><!-- /ko -->
			<!-- /ko -->
			<!-- ko if: oConfig.detailConfig.showMainImage -->
				<div id="product_images" data-bind="template: { name: 'catalog.image_gallery', data: selectedProduct }"></div>
			<!-- /ko -->
		</div>
		<div data-bind="attr: { class: oConfig.detailConfig.gridRightColumnClass  + ' product-detail__right'}">
			<!-- ko if: !oConfig.detailConfig.showMainImage -->
				<span data-bind="template: { name: 'catalog.smart_lists', data: selectedProduct() }"></span>
			<!-- /ko -->
			<!-- ko if: oConfig.detailConfig.showMainImage -->
				<!-- ko template: 'catalog.detail_info_container' --><!-- /ko -->
			<!-- /ko -->
		</div>
	</div>
	<!-- ko template: 'catalog.additional_info' --><!-- /ko -->
</script>

<script type="text/html" id="catalog.detail_info_container">
	<div class="detail-product-info">
		<div data-bind="template: 'catalog.share_code'"></div>
		<span class="product_view__detail-info" data-bind="template: 'catalog.detail_info'"></span>
		<div class="detail-docs" data-bind="template: { if: oConfig.detailConfig.showDocuments && !selectedProduct().usingDownloadsTab(),  name: 'catalog.documents', data: selectedProduct().documents() }"></div>
		<div data-bind="
			template: {
				name: 'promotions.descriptions',
				if: promoDescriptions && promoDescriptions.length,
				data: {
					title: 'Product on Promotion',
					descriptions: promoDescriptions,
					selectedProduct: selectedProduct
				}
			}
		">
		</div>
		<!-- ko if: oConfig.detailConfig.showDescription && oConfig.detailConfig.showProductDescriptionTop -->
			<span data-bind="template: { name: 'catalog.product_description', data: selectedProduct }"></span>
		<!-- /ko -->
		<div class="detail-child-selector">
			<span data-bind="template: { name: 'catalog.child_selectors', if: $data.childSelectors, data: $data.childSelectors }"></span>
		</div>
		<span data-bind="template: 'catalog.rating_detail'"></span>
		<span data-bind="template: { name: 'catalog.add_ons', data: selectedProduct }"></span>
		<div id="atcform">
			<div data-bind="template: { name: 'catalog.atc_full', data: selectedProduct }"></div>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.child_selectors">
	<!-- ko foreach: $data -->
		<span data-bind="template: 'catalog.child_droplist_select'"></span>
	<!-- /ko -->
</script>

<script type="text/html" id="catalog.child_droplist_select">
	<div class="child-droplist-selector" style="clear: left;"
		 data-bind="visible: showSelector">
		<label data-bind="html: utils.htmlDecode(label), attr: { for: field }">
		</label>
		<select data-bind="
			attr: { id: field, name: field },
			options: options,
			optionsText: 'option',
			value: selectedOption,
			optionsCaption: '-- Select One --',
			optionsAfterRender: function (option, item) { setChildOptionDisable(field, option, item) },
			enable: !!options.length
		">
		</select>
	</div>
	<div data-bind="if: $data.loading">
		<div class="sk-three-bounce" style="float: left;">
			<div class="sk-child sk-bounce1"></div>
			<div class="sk-child sk-bounce2"></div>
			<div class="sk-child sk-bounce3"></div>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.product_description">
	<div class="product-detail__description-wrap" data-bind="if: description() || $parent.description()">
		<h2 class="product-detail__description-title" data-bind="html : oConfig.labels.description"></h2>
		<span class="product-detail__description-text" data-bind="html: description() || $parent.description()"></span>
	</div>
</script>

<script type="text/html" id="catalog.additional_info">
	<span data-bind="if: selectedProduct().useTabs(), attr: { 'data-layout' : oConfig.detailConfig.tabLayoutMode }" >
		<!-- ko template: 'catalog.advanced_tabs' --><!-- /ko -->
	</span>
</script>

<script type="text/html" id="catalog.additional_sections">
	<span data-bind="ifnot: selectedProduct().useTabs(), attr: { 'data-layout' : oConfig.detailConfig.pageLayoutMode }" >
		<!-- ko if: oConfig.detailConfig.showDescription && !oConfig.detailConfig.showProductDescriptionTop -->
			<span data-bind="template: { name: 'catalog.product_description', data: selectedProduct }"></span>
		<!-- /ko -->
		<span data-bind="template: { name: 'catalog.related_products', data: related().filter(function(item) { return !item.relatedGroup() }) }"></span>
		<span data-bind="template: { name: 'catalog.second_related_products', data: secondRelated }"></span>
		<span data-bind="template: 'catalog.reviews'"></span>
		<!-- ko if: oConfig.detailConfig.showMainImage -->
			<span data-bind="template: { name: 'catalog.smart_lists', data: selectedProduct() }"></span>
		<!-- /ko -->
	</span>

	<span data-bind="template: { name: 'catalog.also_bought', data: alsoBought }"></span>
	<span data-bind="template: { name: 'catalog.recently_viewed', data: $parent.recentlyViewed }"></span>
</script>



<script type="text/html" id="catalog.advanced_tabs">
	<div id="tabs" class="detail_desc">
		<div class="tabbable tabbable-detail" >
			<span data-bind="template: 'catalog.tab_header'"></span>
			<span data-bind="template: 'catalog.tab_content'"></span>
		</div>
	</div>
</script>

<script type="text/html" id="catalog.tab_header">
	<ul id="nav-tabs" class="nav nav-tabs" data-bind="foreach: selectedProduct().tabs">
		<!-- ko if: oConfig.detailConfig.useRelatedProducts || $data.dynamicSource != 'related_products' -->
		<li data-bind="attr: { 'data-tabtype': dynamicSource, id: 'tab' + ($index()+1) }">
			<a data-toggle="tab" data-bind="attr: { href: '#tab_section_' + ($index() + 1) }">
				<span data-bind="html: label || _.startCase(dynamicSource)"></span>
			</a>
		</li>
		<!-- /ko -->
	</ul>
</script>

<script type="text/html" id="catalog.tab_content">
	<div class="tab-content" data-bind="foreach: { data: selectedProduct().tabs, afterUpdate: selectFirstTab }">
		<!-- ko if: oConfig.detailConfig.useRelatedProducts || $data.dynamicSource != 'related_products' -->
		<div class="tab-pane" data-bind="attr: { id: 'tab_section_' + ($index() + 1) }">
			<p data-bind="html: staticPos === 'above' ? staticContent : ''"></p>
			<span data-bind="
				template: {
					name: 'catalog.tab_' + dynamicSource,
					data: {
						tab: $data,
						mainProduct: $parent
					}
			}">
			</span>
			<p data-bind="html: staticPos === 'below' ? staticContent : ''"></p>
		</div>
		<!-- /ko -->
	</div>
</script>

<script type="text/html" id="catalog.tab_description">
	<span data-bind="html: mainProduct.selectedProduct().description"></span>
</script>

<script type="text/html" id="catalog.tab_downloads">
	<ul class="doc_downloads" data-bind="with: mainProduct.selectedProduct().documents">
		<!-- ko foreach: $data -->
			<li data-bind="if: link() && name()">
				<a data-bind="attr: { href: utils.buildImagePath(link()) }, text: name" target="_blank" ></a>
			</li>
		<!-- /ko -->
	</ul>
</script>

<script type="text/html" id="catalog.tab_web_page">
	<span data-bind="template: 'catalog.web_page_get'"></span>
</script>

<script type="text/html" id="catalog.web_page_get">
	<span data-bind="
		load: {
			url: mainProduct.selectedProduct().getWebPage(tab.webPageId),
			cache: true
		}
	">
	</span>
</script>

<script type="text/html" id="catalog.tab_related_products">
	<span data-bind="template: { name: 'catalog.related_products', data: mainProduct.related().filter(function(item) { return item.relatedGroup() == tab.relatedProductsGroup }) }"></span>
</script>

<script type="text/html" id="catalog.tab_second_related_products">
	<span data-bind="template: { name: 'catalog.second_related_products', data: mainProduct.secondRelated }"></span>
</script>

<script type="text/html" id="catalog.tab_reviews">
	<!-- ko template: { name: 'catalog.reviews', data: mainProduct } --><!-- /ko -->
</script>

<script type="text/html" id="catalog.tab_smart_list">
	<span data-bind="template: { name: 'catalog.smart_lists', data: mainProduct.selectedProduct() }"></span>
</script>

<script type="text/html" id="catalog.tab_rys">
	<!-- ko template: { name: 'catalog.product_facets_table', data: mainProduct.selectedProduct() } --><!-- /ko -->
</script>

<script type="text/html" id="catalog.product_facets_table">
	<!-- ko if: facets -->
		<table class="table table-striped">
			<tbody>
				<tr data-bind="foreach: facets">
					<th data-bind="text: search_group"></th>
					<td data-bind="text: search_term"></td>
				</tr>
			</tbody>
		</table>
	<!-- /ko -->
</script>

<script type="text/html" id="catalog.tab_hook">
	<span data-bind="template: { name: 'tab_hook_' + tab.hook, data: viewModel }"></span>
</script>


<script type="text/html" id="catalog.tab_none">

</script>


	<script type="text/html" id="catalog.reviews">
		<!-- ko if: oConfig.useReviews -->
			<h2 data-bind="html : oConfig.labels.reviews"></h2>
			<div
				id="reviews"
				itemprop="aggregateRating"
				itemscope
				itemtype="http://schema.org/AggregateRating"
			>
				<!-- ko if: reviews.size() -->
					<div class="well reviews-header">
						<h4 data-bind=" html : oConfig.labels.averageRating"></h4>
						<p>
							<div class="raty" data-bind="raty: averageRating"></div>
							<small class="muted">
								<span itemprop="ratingValue" data-bind="text: averageRating().toFixed(1)"></span>
								out of
								<span itemprop="bestRating">5.0</span> stars
							</small>
						</p>
						<div class="btn-group">
							<!-- ko if: !oConfig.allowAddReviews -->
								<a class="btn btn-small" data-bind="attr: { href: utils.loginUrl }, html: oConfig.labels.reviewSignInText"></a>
							<!-- /ko -->
							<!-- ko if: oConfig.allowAddReviews -->
								<a
									class="global-modal btn btn-primary"
									data-size="large"
									data-backdrop="static"
									data-bind="
										attr: { href: 'ae_sf_review_comment.asp?contentkey=' + key() },
										html: oConfig.labels.reviewsAddText "
								></a>
							<!-- /ko -->
						</div>
					</div>
				<!-- /ko -->
				<!-- ko template: { name: 'catalog.reviews_list', data: reviews } --><!-- /ko -->
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.reviews_list">
		<div class="media-list reviews-list">
			<!-- ko template: { name: 'catalog.review', if: size, foreach: items } --><!-- /ko -->
		</div>
		<!-- ko ifnot: size -->
			<p class="alert alert-info">This product has not been reviewed.</p>
			<!-- ko ifnot: oConfig.allowAddReviews -->
				<a class="btn" data-bind="attr: { href: utils.loginUrl }, html: oConfig.labels.reviewSignInText"></a>
			<!-- /ko -->
			<!-- ko if: oConfig.allowAddReviews -->
				<a
					class="global-modal btn btn-primary"
					data-bind="
						attr: { href: 'ae_sf_review_comment.asp?contentkey=' + $parent.key() },
						html: oConfig.labels.reviewsAddText "
					data-size="large"
				></a>
			<!-- /ko -->
		<!-- /ko -->
		<div class="btn-group reviews-paging" data-bind="if: numPages() > 1">
			<button class="btn" data-bind="click: page.decrement, enable: page() > 1">
				Prev
			</button>
			<button class="btn" data-bind="click: page.increment, enable: page() < numPages()">
				Next
			</button>
		</div>
	</script>

	<script type="text/html" id="catalog.review">
		<div class="media">
			<div class="media-body">
				<div class="media-heading">
					<div data-bind="raty: rating"></div>
					<small class="muted">By <span data-bind="text: name || 'Anonymous User'"></span> on <span data-bind="text: new Date(create_date).toDateString()"></span></small>
				</div>
				<div class="text-small" data-bind="text: comments"></div>
			</div>
			<!-- ko template: { name: 'catalog.review', if: children, foreach: children } --><!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.rating_detail">
		<div data-bind="if: oConfig.useReviews" class="average-rating-header">
			<div class="detail_rating detail_info">
				<!-- ko template: 'catalog.rating_score' --><!-- /ko -->
				<span data-bind="template: { name: 'catalog.read_reviews', if: ratingsCount }"></span>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.rating_score">
		<!-- ko if: oConfig.useReviews -->
			<div class="raty" data-bind="raty: averageRating"></div>
			<span class="muted text-xsmall" data-bind="text: ratingsCount() ? '(' + ratingsCount() + ' ' + utils.plural('review', ratingsCount()) + ')' : ''"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.read_reviews">
		<a
			href="#"
			class="btn btn-small btn-link"
			data-bind="
				text: oConfig.detailConfig.labels.readReviews,
				click: _.partial(utils.scrollTo, '#reviews')
			"
		></a>
	</script>

	<script type="text/html" id="catalog.product_actions">
		<!-- ko if: selectedProduct().showQuickAtc -->
			<!-- ko if: selectedProduct().isInCart -->
				<div class="already-in-cart muted text-small"><i class="fas fa-shopping-cart"></i> Already in Cart</div>
			<!-- /ko -->
			<div class="input-prepend input-append">
				<!-- ko if: hasQuantityRestrictions -->
					<a href="#0"
						class="add-on"
						data-bind="popover, attr: { 'data-content': quantityRestrictionsHtml, 'data-key' : key, 'id': 'pop-' + $.escapeSelector(sku().replace(/([^A-Za-z0-9[\]{}_.:-])\s?/g, '_')) }"
						data-trigger="hover"
						data-html="true"
						data-placement="top"
					>
						<i class="icon-question-sign"></i>
					</a>
				<!-- /ko -->
				<input
					data-bind="
						value: selectedProduct().selectedQty,
						init: function () {
							if (setSelectedQty()) {
								if(typeof qty != 'undefined' && qty() >= minQty()){
									selectedQty(qty());
								}else{
									selectedQty(minQty() || 1)
								}
							};
						},
						attr: {
							'min' : oConfig.useMinimumQuantity && minQty()  || 1,
							'step': oConfig.useQuantityIncrement && stepQty() || 1,
							'max' : oConfig.useMaximumQuantity && maxQty()
						},
						visible: !isChild() || oConfig.allowChildATC,
						validateQty
					"
					type="number"
					pattern="\d*"
					class="qty-input"
					placeholder="Qty"
					aria-label="Qty"
				>
				<!-- ko template: {name: 'catalog.product_actions_add', if: selectedProduct().childDisplayType() !== 'matrix-all'} --><!-- /ko -->
			</div>
			<div class="text-error" data-bind="visible: !questionsHaveValidAnswers() && currentParent().rowsAtcAttempted()">Please ensure all required fields are populated.</div>
		<!-- /ko -->

		<!-- ko if: !selectedProduct().showQuickAtc() && !allowQuickAddModal() -->
			<a class="btn btn-primary btn-view-details" data-bind="
				attr: { href: link },
				visible: (isParent()) || ((!isChild() || oConfig.allowChildATC) && (showAtc) && !(oConfig.showChildrenSelection && selectedProduct().isChild())),
				html: oConfig.labels.selectOptionsLabel "></a>
		<!-- /ko -->
		<!-- ko if: !selectedProduct().showQuickAtc() && oConfig.allowQuickAdd && allowQuickAddModal() -->
			<a
				class="btn btn-primary btn-view-details global-modal quick-add"
				data-bind="
					html: oConfig.labels.selectOptionsLabel,
					attr: { href: utils.buildQuickAddLink($data), id: 'quick-add_' + key() },
					visible: (isParent()) || ((!isChild() || oConfig.allowChildATC) && (showAtc) && !(oConfig.showChildrenSelection && selectedProduct().isChild())),
                    addModalHandler: { 'element' : $('.quick-add'), 'handler' : function(data){  fncReloadCartWindow();  viewModel.activeCart(data);} }
				"
			></a>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.product_actions_add">
		<div class="btn-group">
			<button type="button"
				class="prod-card__atc btn btn-primary btn-cart-add"
				data-bind="
					html: atcButtonText(),
					click: addToCart,
					visible: function(){
						if(currentParent().childDisplayType() === 'input-qty' && !oConfig.showListViewATC){
							return false;
						}else{
							return (!isChild() || oConfig.allowChildATC) && (getActiveLayout() !== 'list' || oConfig.showListViewATC) && (!(currentParent().childDisplayType() === 'add-row') || !!oConfig.childSkuMatch)
						}
					}() ,
					enable: isQtyValid()
				">
			</button>
			<!-- ko if: oConfig.showFavLink && oConfig.useSavedCarts  -->
				<button class="btn btn btn-primary dropdown-toggle" data-toggle="dropdown">
						<i class="icon-angle-down"></i>
				</button>
				<ul class="dropdown-menu pull-right prod-card__atwrap">
					<!-- ko if: oConfig.showFavLink && oConfig.searchConfig.pageType != 'favlist' && currentParent().childDisplayType() !== 'add-row' -->
						<li class="prod-card__atf" data-bind="template: 'catalog.fav_link'"></li>
					<!-- /ko -->
					<!-- ko if: oConfig.useSavedCarts  -->
						<li class="prod-card__ats">
							<a href="#0" data-bind="click: addToSavedCart">
								<span data-bind="html: oConfig.labels.savedCartsLabels.addToSavedCart"></span>
							</a>
						</li>
					<!-- /ko -->
				</ul>
			<!-- /ko -->
			<!-- ko if: (oConfig.showFavLink && !oConfig.useSavedCarts) && oConfig.searchConfig.pageType != 'favlist' && currentParent().childDisplayType() !== 'add-row' -->
				<a class="btn btn btn-primary global-modal" data-bind="attr: {
						title: utils.decodeHTML(oConfig.labels.favLink),
						'data-title': utils.decodeHTML(oConfig.labels.favLink),
						href: 'add_product_to_favorites.asp?p_id=' + key(),
						'aria-label': utils.decodeHTML(oConfig.labels.favLink)
					}, tooltip"
					data-icon="heart"
					data-size="small">
					<i class="icon-heart"></i>
				</a>
			<!-- /ko -->
			<!-- ko if: !oConfig.showFavLink && oConfig.useSavedCarts -->
				<button type="button" class="btn btn btn-primary" data-bind="attr: {
						title: utils.decodeHTML(oConfig.labels.savedCartsLabels.addToSavedCart)
					}, click: addToSavedCart, tooltip">
					<i data-bind="attr: {
							class: oConfig.labels.savedCarts.toLowerCase() == 'quote' ? 'icon-comments' : 'icon-save'
						}"></i>
				</button>
			<!-- /ko -->
		</div>
		<!-- ko if: (currentParent().childDisplayType() == 'add-row') -->
			<button type="button" class="btn btn-danger add-row__remove-btn" data-bind="attr: {
					title: utils.decodeHTML(oConfig.labels.addRowRemoveRowLink) || 'Remove',
					'data-title': oConfig.labels.addRowRemoveRowLink || 'Remove'
					}, click: function() { currentParent().removeRow($data.rowKey) }">
				<i class="icon-trash"></i>
			</button>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.atc_full">
		<!-- ko ifnot: $data.type === 'parent' -->
			<!-- ko if: oConfig.useIdp -->
				<!-- ko template: 'catalog.inventory' --><!-- /ko -->
			<!-- /ko -->
			<fieldset id="cart_options" data-bind="visible: oConfig.useCartOptions && selectedProduct().hasCartOptions() ">
			<legend>Additional Options</legend>
				<!-- ko template: { name: 'catalog.cart_options', data: selectedProduct, if: selectedProduct().questions().length > 0 } --><!-- /ko -->
			</fieldset>
			<!-- ko template: 'catalog.configurator' --><!-- /ko -->
			<!-- ko if: oConfig.UseTaxExempt -->
				<!-- ko template: 'catalog.tax_exempt' --><!-- /ko -->
			<!-- /ko -->
		<!-- /ko -->
		<!-- ko if: $data.isDangerous -->
			<!-- ko template: 'catalog.hazmat' --><!-- /ko -->
		<!-- /ko -->
		<!-- ko if: oConfig.detailConfig.showSoftGoodAuthorizations -->
			<!-- template: 'catalog.softgoods' -->
		<!-- /ko -->
		<div class="prod-pricing" data-bind="template: { name: priceDisplay, data: selectedProduct } "></div>
		<!-- ko if: utils.isMainProduct($data) ? showAtc : selectedProduct().showAtc -->
			<!-- ko template: { name: 'catalog.atc_form_submit', data: selectedProduct } --><!-- /ko -->
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.product_quantity">
		<div>
			<div class="input-prepend product-detail__qty-wrap">
				<label class="add-on product-detail__qty-label" data-bind="for: 'next'">QTY:</label>
				<input
					data-bind="
						value: selectedQty,
						init: function () { if (setSelectedQty()) selectedQty(minQty() || 1); },
						attr: {
							'min' : oConfig.useMinimumQuantity && (minQty() || stepQty()) || 1,
							'step': oConfig.useQuantityIncrement && stepQty() || 1,
							'max' : oConfig.useMaximumQuantity && maxQty(),
							'id'  : 'qty_'+key()+'_0'
						},
						validateQty
					"
					onclick="this.focus();this.select();"
					type="number"
					pattern="\d*"
					class="qty-input product-detail__qty-input"
				>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.atc_form_submit">
		<div id="atc_large" class="atc-large">
			<!-- ko if: atcErrorText() != "" -->
				<div class="alert alert-error" data-bind="html:atcErrorText"></div>
			<!-- /ko -->
			<div data-bind="template: 'catalog.product_quantity'"></div>
			<div class="media-body">
				<div class="btn-group">
					<button
						type="button"
						class="btn btn-large btn-primary product-detail-atc__button"
						data-bind="
							click: addToCart,
							html: atcButtonText()"
					></button>
				</div>
				<div data-bind="template: { name: 'catalog.saved_cart_form_submit', if: oConfig.useSavedCarts }"></div>
			</div>
		</div>
		<div data-bind="template: { name: 'catalog.qty_restrictions', if: hasQuantityRestrictions }"></div>
	</script>

	<script type="text/html" id="catalog.atc_qty_input">
		<div class="prod-actions" data-bind="template: 'catalog.product_actions'"></div>
	</script>


	<script type="text/html" id="catalog.atc_popup">
		<div id="atc_msg_product">
			<div style="margin: 5px auto;text-align: center;">
				<span data-bind="text: details.length"></span> <span data-bind="plural: details">product</span> added to cart.
				<span data-bind="if: details.length === 1">
					<h3 data-bind="text: details[0].name"></h3>
					<img
						data-bind="
							if: details[0].pic(),
							attr: {
								src: utils.buildImagePath(details[0].pic() || oConfig.defaultImage),
								alt: details[0].thumbAltText() || details[0].name()
							}
						"
						onerror="utils.handleImageError(this)"
					/>
				</span>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.atc_popup_buttons">
		<div style="margin: 5px auto;text-align: center;">
			<a id="atc_msg_btn_close" class="btn btn-default" href="#" data-dismiss="modal" data-bind="text: oConfig.labels.continueShoppingLink"></a>
			<a id="atc_msg_btn_cart" class="btn btn-primary"  href="showcart.asp" data-bind="text: oConfig.labels.showCartLink"></a>
		</div>
	</script>

	<script type="text/html" id="catalog.atc_splash">
		<div class="sk-wave">
			<div class="sk-rect sk-rect1"></div>
			<div class="sk-rect sk-rect2"></div>
			<div class="sk-rect sk-rect3"></div>
			<div class="sk-rect sk-rect4"></div>
			<div class="sk-rect sk-rect5"></div>
		</div>
	</script>

	<script type="text/html" id="catalog.atc_body">
		<!-- ko template: 'catalog.atc_popup' --><!-- /ko -->
		<!-- ko ifnot: cart -->
			<!-- promoMessages: details -->
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.promo_bar">
		<div data-bind="promoMessages: details"></div>
	</script>

	<script type="text/html" id="catalog.atc_invalid_qty">
		<div class="catalog__atc-invalid-qty" data-bind="text: oConfig.labels.invalidQtyText"></div>
	</script>

	<script type="text/html" id="catalog.saved_cart_select_popup">
		<div class="saved-cart-popup__container">
			<!-- ko if: oConfig.isLoggedIn -->
				<h5><span data-bind="text: oConfig.labels.savedCartsLabels.modalCreateNew"></span></h5>
				<div class="input-append">
					<input type="text" id="nickname" data-bind="attr: { placeholder: oConfig.labels.savedCartsLabels.modalCreateNewInputPlaceholder }">
					<button
						id="saved_cart_add"
						class="btn btn-primary input-append"
						data-bind="
							init: function () {
								$data.errorMessage = ko.observable();
							},
							click: function () {
								var input = $('#nickname');
								var nickname = input.val().trim();

								if (!nickname) {
									input.val('');
									errorMessage('Please enter a nickname');
								} else if (_.includes(_.pluck(ko.toJS(savedCarts), 'nickname'), nickname)) {
									errorMessage('That nickname is already in use');
								} else {
									selectedCart({ key: utils.createGuid(), nickname: nickname });
								}
							},
							text: oConfig.labels.savedCartsLabels.modalCreateNewSaveButton"
					>
						<i class="icon-save"></i>
						</button>
				</div>
				<!-- ko if: errorMessage -->
					<div class="alert alert-error" data-bind="text: errorMessage"></div>
				<!-- /ko -->
				<h5 data-bind="html: oConfig.labels.savedCartsLabels.modalExisting"></h5>
				<!-- ko template: 'catalog.saved_carts_table'--><!-- /ko -->
			<!-- /ko -->
			<!-- ko ifnot: oConfig.isLoggedIn -->
				<div class="text-center">
					<p class="alert alert-info without-close">You must be signed in to take this action.</p>
					<a data-bind="attr: { href: utils.loginUrl }" class="btn btn-primary btn-block">Sign In Now</a>
					<button type="button" class="btn btn-block" data-dismiss="modal">Cancel</button>
				</div>
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.saved_carts_table">
		<!-- ko if: savedCarts.length > 0 -->
			<div class="list-group" data-bind="foreach: { data: savedCarts, as: 'cart' }">
				<a href="#"
					 data-bind="
					 	click: function () {
					 		$parent.selectedCart(cart);
					 	},
						spacedtext: cart.nickname || cart.refId,
						attr: { title: cart.nickname || cart.refId }
					 " class="list-group-item">
				</a>
			</div>
		<!-- /ko -->
		<!-- ko ifnot: savedCarts.length > 0 -->
			<div class="list-group">
				<div class="list-group-item">None found</div>
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.saved_cart_form_submit">
		<span data-bind="if: showQuickAtc">
			<button class="btn btn-small btn-secondary" data-bind="click: addToSavedCart, html: oConfig.labels.savedCartsLabels.addToSavedCart"></button>
		</span>
	</script>

	<script type="text/html" id="catalog.saved_cart_confirmation_body">
		<div class="saved-cart-popup__container">
			<div class="text-center" style="display: block;">
				<h4 class="text-success">
					<span data-bind="plural: details, text: oConfig.labels.savedCartsLabels.itemText"></span>
					<span data-bind="text: oConfig.labels.savedCartsLabels.modalConfirmationSubHeader"></span>
				</h4>
				<p><strong class="cart-sc-nm" data-bind="text: cart.nickname"></strong></p>
				<div class="well well-small">
					<a
						class="btn btn-block"
						data-bind="attr: {
							href : oConfig.sessionData.orderfrontUrl + '/payment.asp?o_key=' + cart.key
						}"
					>
						<span data-bind="text: oConfig.labels.savedCartsLabels.modalConfirmationViewButton"></span>
					</a>
					<a href="pending_orders.asp" class="btn btn-block"><span data-bind="text: oConfig.labels.savedCartsLabels.modalConfirmationManageButton"></span></a>
					<a href="#" class="btn btn-block" data-dismiss="modal"><span data-bind="text: oConfig.labels.savedCartsLabels.modalConfirmationCloseButton"></span></a>
				</div>
			</div>
		</div>
	</script>


	<script type="text/html" id="catalog.qty_restrictions">
		<div class="text-small muted" data-bind="attr: { 'data-key' : key() } ">
			<div id="qty_controls_msg" >
				<span data-bind="if: oConfig.useMinimumQuantity && selectedUom().minQty() > 0">
					<span data-bind="text: oConfig.labels.minQty"></span>: <span data-bind="text: selectedUom().minQty()"></span><br>
					<input type="hidden" data-bind="attr: { name: 'minQty_'+ key() }, value: selectedUom().minQty()" />
				</span>

				<span data-bind="if: oConfig.useMaximumQuantity && selectedUom().maxQty() > 0">
					<span data-bind="text: oConfig.labels.maxQty"></span>: <span data-bind="text: selectedUom().maxQty()"></span><br>
					<input type="hidden" data-bind="attr: { name: 'maxQty_'+ key() }, value: selectedUom().maxQty()" />
				</span>

				<span data-bind="if: oConfig.useQuantityIncrement && selectedUom().step() && selectedUom().step() !== 1">
					<span data-bind="text: oConfig.labels.step"></span>: <span data-bind="text: selectedUom().step()"></span><br>
					<input type="hidden" data-bind="attr: { name: 'qty_increment_'+ key() }, value: selectedUom().step()" />
				</span>
			</div>
		</div>
	</script>

	<script type="text/html" id="catalog.inventory">
		<span data-bind="if: inventory.isInventoryItem() && oConfig.useIdp">
			<span data-bind="template: warehouseTemplate"></span>
		</span>
	</script>

	<script type="text/html" id="catalog.selected_product_price_display">
		<span data-bind="if: unitPrice() === 0 && oConfig.showZeroPriceMessage && showPrice">
			<ul class="unstyled prod-pricing__wrap">
				<li class="retail">
					<span data-bind="text: oConfig.zeroPriceMessage"></span>
				</li>
				<li class="text-small" data-bind="template: { name: priceBreaksTemplate, if: oConfig.useBreaks }"></li>
			</ul>
		</span>
		<span data-bind="if: !(unitPrice() === 0 && oConfig.showZeroPriceMessage) && showPrice && uomPrice()">
			<ul class="price-display__wrap unstyled">
				<!-- ko if: priceTrace -->
				<li class="text-small">
					<div class="alert alert-info" data-bind="html: priceTrace().replace(/\n/gi,'<br>') "></div>
				</li>
				<!-- /ko -->
				<li class="retail">
					<b data-bind="html: utils.formatPrice(unitPrice())"></b>
					<span class="prod-uom" data-bind="template: 'catalog.uom'"></span>
				</li>
				<!-- ko if: showYouSave -->
					<li class="sretail">
						<del data-bind="html: utils.formatPrice(suggestedPrice())"></del>
						<span class="yousave" data-bind="spacedtext: oConfig.labels.youSaveLabel + ' ' + youSavePercent()"></span>
					</li>
				<!-- /ko -->
				<li class="text-small" data-bind="template: { name: priceBreaksTemplate, if: oConfig.useBreaks }"></li>
			</ul>
		</span>
		<!-- ko if: (!showPrice || !showAtc) && oConfig.showPricingOrderEntry -->
			<div class="retail" data-bind="html: $data.mapPriceMessage"></div>
		<!-- /ko -->

		<!-- ko if: !oConfig.showPricingOrderEntry -->
			<div class="hidden-price" data-bind="html: utils.drawHidePriceMessage()"></div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.configurator_price_display">
		<div class="retail">
			<b data-bind="html: utils.formatPrice(unitPrice())"></b>
			<span class="prod-uom" data-bind="template: 'catalog.uom'"></span>
		</div>
	</script>

	<script type="text/html" id="catalog.input_qty_sku_display">
		<!-- ko if : oConfig.detailConfig.inputQtyLinkToChild -->
			<a data-bind="html: sku, attr: { 'href' : link}"></a>
		<!-- /ko -->
		<!-- ko if : !oConfig.detailConfig.inputQtyLinkToChild -->
			<span data-bind="html: sku"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.input_qty_nm_display">
		<!-- ko if : oConfig.detailConfig.inputQtyLinkToChild -->
			<a data-bind="html: name, attr: { 'href' : link}"></a>
		<!-- /ko -->
		<!-- ko if : !oConfig.detailConfig.inputQtyLinkToChild -->
			<span data-bind="html: name"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.input_qty_thumb_display">
		<!-- ko if : oConfig.detailConfig.inputQtyLinkToChild -->
			<a data-bind="attr: { 'href' : link}">
				<img data-bind=" attr: { src: utils.buildImagePath(thumb()), alt: name }" onerror="utils.handleImageError(this)">
			</a>
		<!-- /ko -->
		<!-- ko if : !oConfig.detailConfig.inputQtyLinkToChild -->
			<img data-bind=" attr: { src: utils.buildImagePath(thumb()), alt: name }" onerror="utils.handleImageError(this)">
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.input_qty_promo_display">
		<!-- ko if : promoDescriptions.length -->
			<div class="promo-icon" data-bind="attr: { title: utils.decodeHTML(setPromoDescriptionTitleText(promoDescriptions)) }">P</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.price_start_at">
		<!-- ko if: !oConfig.showPricingOrderEntry -->
			<div class="hidden-price" data-bind="html: utils.drawHidePriceMessage()"></div>
		<!-- /ko -->
		<!-- ko if: oConfig.showPricingOrderEntry && childStartingPrice -->
			<span class="starting-price" data-bind="html: oConfig.searchConfig.labels.pricesStartingAt + utils.formatPrice(childStartingPrice())"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.qty_breaks">
		<span data-bind="if: showPrice && selectedUom().hasBreaks() && processedBreaks().length > 1">
			<a href="#" data-bind="text: oConfig.labels.breaks, click: function() { showBreaks(!showBreaks()); }"></a><br>
		</span>
		<span data-bind="visible: showBreaks">
			<!-- ko template: 'catalog.qty_breaks_table' --><!-- /ko -->
		</span>
		<!-- ko if: !oConfig.showPricingOrderEntry -->
			<div class="hidden-price" data-bind="utils.drawHidePriceMessage()"></div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.qty_breaks_table">
		<span data-bind="if: showBreaks && showPrice && processedBreaks().length > 1">
			<table id="breaks_table" class="table table-bordered" border="0" cellpadding="0" cellspacing="0">
				<caption data-bind="html: oConfig.priceBreaksTableHeader"></caption>
				<tr>
					<td>Quantity Range</td>
					<td>Price Each</td>
				</tr>
				<tbody data-bind="fastForEach: processedBreaks">
					<!-- ko if: range -->
					<tr>
						<td data-bind="text: range"></td>
						<td data-bind="text: utils.formatPrice(price)"></td>
					</tr>
					<!-- /ko -->
				</tbody>
			</table>
		</span>

		<!-- ko if: !oConfig.showPricingOrderEntry -->
			<div class="hidden-price" data-bind="html: utils.drawHidePriceMessage()"></div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.breaks_off">

	</script>



	<script type="text/html" id="catalog.related_products">
		<div id="related_products" class="clearfix detail_related" data-bind="if: oConfig.detailConfig.useRelatedProducts">
			<span data-bind="if: $data.length > 0">
				<h2 data-bind="html: oConfig.detailConfig.labels.relatedProducts"></h2>
				<span data-bind="template: 'catalog.simple_product_gallery'"></span>
			</span>
		</div>
	</script>

	<script type="text/html" id="catalog.second_related_products">
		<div id="second_related_products" class="clearfix detail_related" data-bind="if: oConfig.detailConfig.useSecondRelatedProducts">
			<span data-bind="if: $data.length > 0">
				<h2 data-bind="html: oConfig.detailConfig.labels.secondRelatedProducts"></h2>
				<span data-bind="template: 'catalog.simple_product_gallery'"></span>
			</span>
		</div>
	</script>

	<script type="text/html" id="catalog.also_bought">
		<div id="also_bought" class="clearfix detail_related" data-bind="if: oConfig.detailConfig.useAlsoBoughtProducts">
			<span data-bind="if: $data.length > 0">
				<h2 data-bind="html: oConfig.detailConfig.labels.alsoBoughtProducts"></h2>
				<span data-bind="template: 'catalog.simple_product_gallery'"></span>
			</span>
		</div>
	</script>

	<script type="text/html" id="catalog.add_ons">
		<div id="add_ons" class="clearfix detail_related" data-bind="if: oConfig.detailConfig.useAddOnProducts">
			<!-- ko if: selectedProduct().showAddOns && selectedProduct().addOns().length > 0 && Array('droplist', 'checkboxes', 'radio').includes(selectedProduct().addOnDisplay) -->
				<div class="add-on-container well">
					<p data-bind="html: selectedProduct().addOnLabel"></p>
					<span data-bind="template: 'catalog.add_on_' + selectedProduct().addOnDisplay "></span>
				</div>
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.add_on_droplist">
			<select style="width: auto;" data-bind="
				options: selectedProduct().addOnOptions,
				optionsText: function(item){ 
					return '(' + utils.formatPrice(item().selectedUom().price()) + ') ' + item().name(); 
				},
				value: selectedProduct().selectedAddOn,
				optionsCaption: '-- Select One --',
				"
			>
			</select>
			<!-- ko if: selectedProduct().selectedAddOn -->
				<label class="product-add-on-label product-detail__qty-label" data-bind="for: 'next'" for="for_binding_1">QTY:</label>
				<input 
					type="number"
					pattern="\d*"
					data-bind="
						value: selectedProduct().selectedAddOn().selectedQty || 1,
						attr: {
							'min' : oConfig.useMinimumQuantity && (selectedProduct().selectedAddOn().minQty() || selectedProduct().selectedAddOn().stepQty()) || 1,
							'step': oConfig.useQuantityIncrement && selectedProduct().selectedAddOn().stepQty() || 1,
							'max' : oConfig.useMaximumQuantity && selectedProduct().selectedAddOn().maxQty(),
							'id': 'qty_' + selectedProduct().selectedAddOn().key() +'_0'
						},
						validateQty
					" 
					class="qty-input product-detail__qty-input add-on-qty"
				>
				<p class="add-on-info" 
				   data-bind="
					html: 
						utils.formatPrice(selectedProduct().selectedAddOn().selectedUom().price()) + ' ' + 
						selectedProduct().selectedAddOn().inventory.stockMessage()
					" 
				></p>
			<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.add_on_radio">
		<div >
			<ul class="add-on-radio-list">
			<!-- ko foreach: selectedProduct().addOnOptions -->
				<li>
					<input 
						type="radio"
						name = "add-on-radio"
						data-bind="
							value: $data,
							checked: $parent.selectedProduct().selectedAddOn,
							attr: {
								'id': 'key_'+key()
							}"
					>
					<label class="add-on-prod-name" data-bind="html: name(), attr: { 'for':  'key_'+key() }"></label>
					<p class="add-on-info" data-bind="html: utils.formatPrice(selectedUom().price()) + ' ' + inventory.stockMessage()"></p>
				</li>
			<!-- /ko -->
			</ul>
			<!-- ko if: selectedProduct().selectedAddOn -->
				<label class="product-add-on-label product-detail__qty-label" data-bind="for: 'next'" for="for_binding_1">QTY:</label>
				<input 
					type="number"
					pattern="\d*"
					data-bind="
						value: selectedProduct().selectedAddOn().selectedQty || 1,
						attr: {
							'min' : oConfig.useMinimumQuantity && (selectedProduct().selectedAddOn().minQty() || selectedProduct().selectedAddOn().stepQty()) || 1,
							'step': oConfig.useQuantityIncrement && selectedProduct().selectedAddOn().stepQty() || 1,
							'max' : oConfig.useMaximumQuantity && selectedProduct().selectedAddOn().maxQty(),
							'id': 'qty_' + selectedProduct().selectedAddOn().key() +'_0'
						},
						validateQty
					" 
					class="qty-input product-detail__qty-input add-on-qty"
					style="width: 80px"
				>
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.add_on_checkboxes">
		<ul class="add-on-checkbox-list" >
			<!-- ko foreach: selectedProduct().addOnOptions -->
				<li style="padding-bottom: 10px;">
					<div class="pull-left" style="width: 66%; overflow: hidden;" >
						<input 
							type="checkbox"
							data-bind="
								value: $data,
								checked: $parent.selectedProduct().selectedAddOns,
								attr: {
									'id': 'key_'+key()
								}"
						>
						<label class="add-on-prod-name" data-bind="html: name(), attr: { 'for':  'key_'+key() }"></label>
						<p class="add-on-info" data-bind="html:utils.formatPrice(selectedUom().price()) + ' ' + inventory.stockMessage()" style="font-size: .85em; margin: -10px 0 0 35px;"></p>
					</div>
					<div class="pull-right">
						<label class="product-add-on-label product-detail__qty-label" data-bind="for: 'next'" for="for_binding_1">QTY:</label>
						<input 
							type="number"
							pattern="\d*"
							data-bind="
								init: function(){ console.log($data.minQty()); return $data.minQty() || 1; },
								value: $data.selectedQty,
								attr: {
									'min' : oConfig.useMinimumQuantity && ($data.minQty() || $data.stepQty()) || 1,
									'step': oConfig.useQuantityIncrement && $data.stepQty() || 1,
									'max' : oConfig.useMaximumQuantity && $data.maxQty(),
									'id': 'qty_' + $data.key() +'_0'
								},
								validateQty
							" 
							class="qty-input product-detail__qty-input add-on-qty"
							style="width: 80px; text-align: right;"
						>
					</div>
				</li>
			<!-- /ko -->
		</ul>
	</script>

	<script type="text/html" id="catalog.recently_viewed">
		<div id="recently_viewed_products"
				 class="clearfix detail_related recently-viewed"
				 data-bind="if: oConfig.detailConfig.useRecentlyViewedProducts && $data && $data.length > 0 && oConfig.searchConfig.pageType != 'favlist'">
			<span data-bind="if: oConfig.centerRecentlyViewed">
				<h2 class="recently-viewed__title -centered" data-bind="html: oConfig.detailConfig.labels.recentlyViewedProducts"></h2>
				<span class="recently-viewed__gallery -centered" data-bind="template: 'catalog.simple_product_gallery'"></span>
			</span>
			<span data-bind="if: !oConfig.centerRecentlyViewed">
				<h2 class="recently-viewed__title" data-bind="html: oConfig.detailConfig.labels.recentlyViewedProducts"></h2>
				<span class="recently-viewed__gallery" data-bind="template: 'catalog.simple_product_gallery'"></span>
			</span>
		</div>
	</script>

	<script type="text/html" id="catalog.simple_product_gallery">
			<div class="prod-listings" data-bind=" fastForEach: { data: $data }" data-layout="gallery">
				<!-- ko template: 'catalog.product_card' --><!-- /ko -->
			</div>
	</script>



	<script type="text/html" id="catalog.flags">
		<!-- ko foreach: flags -->
			<div data-bind="if: $data, attr: { 'id': 'flag' + ($index() + 1) }" class="product_flags">
				<!-- ko if: oConfig.flags[$index()].link && oConfig.flags[$index()].link != "\"\""-->
					<a data-bind="
						attr: {
							href: oConfig.flags[$index()].link,
							title: utils.decodeHTML(oConfig.flags[$index()].title)
						}"
						class="global-modal"
					>
						<img data-bind="attr: { src: utils.buildImagePath(oConfig.flags[$index()].pic) }" />
					</a>
				<!-- /ko -->
				<!-- ko ifnot: oConfig.flags[$index()].link && oConfig.flags[$index()].link  != "\"\""-->
					<img data-bind="attr: { src: utils.buildImagePath(oConfig.flags[$index()].pic) }" />
				<!-- /ko -->
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.flags_thumb">
		<!-- ko foreach: flags -->
			<div data-bind="if: $data, attr: { 'id': 'flag' + ($index() + 1) }" class="product_flags">
					<!-- ko if: oConfig.flags[$index()].link && oConfig.flags[$index()].link != "\"\""-->
					<a data-bind="
						attr: {
							href: oConfig.flags[$index()].link,
							title: utils.decodeHTML(oConfig.flags[$index()].title)
						}"
						class="global-modal"
					>
						<img data-bind="attr: { src: utils.buildImagePath(oConfig.flags[$index()].thumb) }" />
					</a>
				<!-- /ko -->
				<!-- ko ifnot: oConfig.flags[$index()].link && oConfig.flags[$index()].link  != "\"\""-->
					<img data-bind="attr: { src: utils.buildImagePath(oConfig.flags[$index()].thumb) }" />
				<!-- /ko -->
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.uom">
		<!-- ko if: selectedProduct().showQuickAtc -->
			<span data-bind="template: selectedProduct().uomTemplate"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.uom_select">
		<!-- ko if: oConfig.useUom -->
			/
			<select data-bind="
				options: selectedProduct().uomPrice,
				optionsText: 'description',
				value: selectedProduct().selectedUom
				"
			>
			</select>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.uom_input">
		<!-- ko if: oConfig.useUom && oConfig.useMultiUomMultiCurrency && uomPrice().length > 0 && uomPrice()[0].UomId -->
			<input type="hidden" data-bind="attr: { name: 'uom_id_'+ key() }, value: uomPrice()[0].UomId()">
			<small>/ <span data-bind="html: uomPrice()[0].UomName()"></span></small>
		<!-- /ko -->

		<!-- ko if: oConfig.useUom && !oConfig.useMultiUomMultiCurrency && uomPrice().length > 0  -->
			<input type="hidden" data-bind="attr: { name: 'uom_'+ key() }, value: uomPrice()[0].description">
			<small>/ <span data-bind="html: uomPrice()[0].description()"></span></small>
		<!-- /ko -->
	</script>

	<script type="text/html" id="warehouse_off">
				<!-- ko if: (inventory.showQty && inventory.showQty()) || !$.isNumeric(inventory.stock()) -->
			<div class="idp-instock__qty" data-bind="html: inventory.stock"></div>
		<!-- /ko -->

		<!-- ko if: inventory.showMessage -->
			<div class="idp-stock__message" data-bind="html: inventory.stockMessage"></div>
		<!-- /ko -->

		<!-- ko if: (inventory.inventoryStatus() === 'out' || inventory.inventoryStatus() === 'onorder') && oConfig.showInventoryWatch && show_inv_watch-->
			<span class="prod-inv-watch">
				<a
					data-bind="
						html: oConfig.searchConfig.labels.inventoryWatchLinkText,
						attr: {
							href: 'prod_inv_watch_add.asp?p_id=' + key() + '&p_nm=' + name() + '&p_sku=' + sku(),
							title: utils.decodeHTML(oConfig.labels.inventoryWatch),
							'data-title': oConfig.labels.inventoryWatch
						},
						tooltip: {
							placement: 'top',
							container: 'body'
						}"
					class="prod-inv-watch__btn global-modal btn btn-secondary"
					data-size="small"
				></a>
			</span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="warehouse_droplist">

		<label data-bind="
			attr : { 'for' : 'pw_id_' + key() },
			html: oConfig.labels.warehouses
		"></label>
		<select class="wh-droplist" data-bind="
			options: inventory.warehouses,
			optionsText: function(item){ return getInventoryDisplay( $data, item, true); },
			optionsValue: $data,
			value: selectedWarehouse,
			attr: {
				'id': 'pw_id_' + key(),
				'name': 'pw_id_' + key()
			}
		">
		</select>

	</script>

	<script type="text/html" id="warehouse_table">
		<table class="table table-bordered">
			<tr><th data-bind=" html : oConfig.labels.warehouses"></th>
			<th data-bind=" html : oConfig.labels.inventoryStatus"></th></tr>
			<tbody data-bind=" foreach: inventory.warehouses">
				<tr data-bind=" css : { default_warehouse : isDefault }">
					<td data-bind=" html: name"></td>
					<td data-bind=" html: getInventoryDisplay($parent, $data, false)"></td>
				</tr>
			</tbody>
		</table>
		<input type="hidden" data-bind="
			attr : {
				'id' : selectedWarehouse().key,
				'name' : selectedWarehouse().key,
				'value' : selectedWarehouse().key
			}
		">
	</script>

	<script type="text/html" id="warehouse_info">
		<div class="idp-warehouse clearfix" data-bind="if: selectedWarehouse().key">
			<div class="wh-selected">
				<div class="wh-selected-nm" data-bind="
					attr : { 'id' : 'selected_warehouse_' + selectedWarehouse.key },
					html : selectedWarehouse().name()
				"></div>
				<span data-bind="
					attr : { 'id' : 'stock_message_' + key() },
					html : getInventoryDisplay($parent, selectedWarehouse(), false)
				"></span>
			</div>
			<input type="hidden" data-bind="
				attr : {
					'id' : selectedWarehouse().key,
					'name' : selectedWarehouse().key,
					'value' : selectedWarehouse().key
				}
			">
		</div>
	</script>

<script>
function getInventoryDisplay(model, item, showWarehouseName){
	var quantity = item.qty_available();
	var message = '';

	if( model.inventory.inventoryStatus() == 'in' && model.inventory.inStockShowQty() ){
		if(quantity >= 0 || !$.isNumeric(quantity)){
			message = quantity;
		}else{
			message = '0';
		}
						
		if(model.inventory.useQtyLessThan() && quantity < model.inventory.qtyLessThanValue()){
			message = model.inventory.qtyLessThanDisplay();
		}

		if(model.inventory.useQtyGreaterThan() && quantity > model.inventory.qtyGreaterThanValue()){
			message = model.inventory.qtyGreaterThanDisplay();
		}
	}
	
	if( (model.inventory.inventoryStatus() == 'in' && model.inventory.inStockShowMessage()) || 
		(model.inventory.inventoryStatus() == 'out' && model.inventory.outStockShowMessage()) || 
		(model.inventory.inventoryStatus() == 'onorder' && model.inventory.onOrderShowMessage()) ){

		if(model.inventory.showMessage){
			message = message + ' ' + utils.removeHTML(model.inventory.stockMessage());
		}
	}

	if(showWarehouseName && message !== ''){
		message = '(' + message + ')';
	}

	if(showWarehouseName){
		message = item.name() + ' ' + message;
	}
	return message;
}
</script>


	<script type="text/html" id="catalog.image_gallery">
		<div class="detail-img-gallery">
			<div class="detail-img">
				<div class="detail-img-container">
					<div data-bind="template: 'catalog.flags'"></div>
					<!-- ko if: largePic() || $parent.largePic() -->
					<a
						id="detail_large"
						data-bind="
							attr: {
								href: utils.buildImagePath(largePic() || $parent.largePic()),
								title: utils.decodeHTML((picAltText() || $parent.picAltText() || name() || $parent.name()))
							},
							venobox
						"
						data-gall="detailmultipic"
						class="detail-img-main"
					>
						<!-- template: 'catalog.thumbnail_image' -->
					</a>
					<!-- /ko -->
					<!-- ko ifnot: largePic() || $parent.largePic() -->
						<!-- template: 'catalog.thumbnail_image' -->
					<!-- /ko -->
				</div>
				<div class="detail-img-enlarge" data-bind="if: largePic() || $parent.largePic()" >
					<a href="#" class="btn btn-small btn-link" onclick="$('#detail_large').click(); return false;">
						<i class="icon-zoom-in icon-fixed-width"></i>View Larger
					</a>
				</div>
			</div>
			<!-- ko if: multiPic().length > 0 || $parent.multiPic().length > 0 -->
				<div class="detail-img-multi" data-bind="foreach: { data: multiPic().length ? multiPic(): $parent.multiPic() }">
					<a class="detail-img-multi-item venobox vbox-item"
						 data-bind="attr: { href: utils.buildImagePath(link() || image()), title: utils.decodeHTML(alt()) }, venobox"
						 data-gall="detailmultipic">
						<img data-bind="attr: { src: utils.buildImagePath(image()) }">
					</a>
				</div>
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.thumbnail_image">
		<img
			data-bind="
				attr: {
					src: utils.buildImagePath(pic() || $parent.pic()),
					alt: thumbAltText() || $parent.thumbAltText() || name() || $parent.name()
				}
			"
			id="prodpicthumb"
			name="prodpic"
			itemprop="image"
			onerror="utils.handleImageError(this)"
		>
	</script>

	<script type="text/html" id="catalog.name_link">
		<a class="detail_link" data-bind="attr: { href: link, title: utils.decodeHTML(name()), 'data-key': key }, html: name"></a>
	</script>

	<script type="text/html" id="catalog.image_link">
		<a class="detail_link" data-bind="attr: { href: link, title: utils.decodeHTML(thumbAltText() || name()), 'data-key': key }">
			<img
				data-bind="
					attr: {
						src: utils.buildImagePath(thumb()),
						alt: thumbAltText() || name()
					}"
				onerror="utils.handleImageError(this)">
		</a>
	</script>


	<script type="text/html" id="catalog.details_link">
	</script>

	<script type="text/html" id="catalog.product_links">
		<div class="detail-links button-group">
			<!-- ko if: oConfig.showEmailFriend -->
				<!-- ko template: 'catalog.email_friend' --><!-- /ko -->
			<!-- /ko -->
			<!-- ko if: oConfig.showFavLink -->
				<!-- ko template: 'catalog.fav_button' --><!-- /ko -->
			<!-- /ko -->
			<!-- ko if: oConfig.showRFQLink -->
				<!-- ko template: 'catalog.rfq_button' --><!-- /ko -->
			<!-- /ko -->
		</div>
	</script>


	<script type="text/html" id="catalog.children_selection">
		<!-- ko foreach: $data.childSelectors -->
			<label data-bind="text: label, attr: { for: field }">
			</label>
			<select data-bind="
				attr: { id: field, name: field },
				options: options,
				optionsText: 'option',
				value: selectedOption,
				optionsCaption: '-- Select One --',
				optionsAfterRender: setOptionHTML
				"
			></select>
	<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.email_friend">
		<a class="btn btn-link global-modal"
			 data-bind="attr: { href: 'email_friend_request.asp?key=' + key() }"
			 data-icon="envelope"
			 data-size="small"
		>
			<i class="icon-envelope"></i>
			<span data-bind="html: oConfig.labels.emailFriend"></span>
		</a>
	</script>

	<script type="text/html" id="catalog.fav_link">
		<a class="global-modal"
			 data-bind="attr: { href: 'add_product_to_favorites.asp?p_id=' + key() }"
			 data-icon="heart"
			 data-size="small"
		>
			<span data-bind="html: oConfig.labels.favLink"></span>
		</a>
	</script>

	<script type="text/html" id="catalog.fav_button">
		<a class="btn btn-link global-modal"
			 data-bind="attr: { href: 'add_product_to_favorites.asp?p_id=' + key() }"
			 data-icon="heart"
			 data-size="small"
		>
			<i class="icon-heart"></i>
			<span data-bind="html: oConfig.labels.favLink"></span>
		</a>
	</script>

	<script type="text/html" id="catalog.remove_fav_button">
		<div class="remove-from-faves prod-fav-remove">
			<a
			   data-bind="
				   click: function() { fncRemoveItem(key(), selectedProduct()); },
				   attr: { title: utils.decodeHTML(oConfig.labels.removeFavLink),
				   href: 'javascript:void(0);'
				   }">
			   <i class="icon-remove"></i>
			   <span data-bind="html: oConfig.labels.removeFavLink"></span>
			</a>
		</div>
	</script>

	<script type="text/html" id="catalog.rfq_button">
		<a class="btn btn-link global-modal"
			 data-bind="attr: { href: 'rfq_ae.asp?lightbox=1&p_id=' + key() }"
			 data-icon="usd"
		>
			<i class="icon-usd"></i>
			<span data-bind="html: oConfig.labels.rfqLinkLabel"></span>
		</a>
	</script>

	<script type="text/html" id="catalog.share_code">

	</script>

	<script type="text/html" id="catalog.hazmat">
		<div class="hazmat">
			<span class="hazmat__label" data-bind="html: oConfig.labels.hazmat"></span>
			<!-- ko if: oConfig.hazmatLink-->
				<a class="global-modal hazmat__help" data-bind="html: oConfig.labels.hazmatHelpText, attr: { href: oConfig.hazmatLink }"></a>
			<!-- /ko -->
			<!-- ko if: dangerousRatio() !== 1 -->
				<div class="hazmat__ratio" data-bind="html: '(' + oConfig.labels.hazmatBoxRatio + ' ' + dangerousRatio() + ')'"></div>
			<!-- /ko -->
		</div>
	</script>

	<script type="text/html" id="catalog.softgoods">
		<!-- ko if: createSoftGoodsAuth -->
			<span data-bind="text: oConfig.labels.softgoods"></span>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.documents">
		<ul class="doc_downloads unstyled">
			<!-- ko if: $data.length > 0 -->
				<li data-bind="html: oConfig.labels.downloads"></li>
				<!-- ko foreach: $data -->
					<li data-bind="if: link() && name() ">
						<a data-bind="attr: { href: utils.buildImagePath(link()) }, text: name" target="_blank" ></a>
					</li>
				<!-- /ko -->
			<!-- /ko -->
		</ul>
	</script>

	<script type="text/html" id="catalog.product_account_history_short">
		<!-- ko if: oConfig.showProductHistory && oConfig.isLoggedIn && isOrdered -->
			<table class="tablesaw mini-prod-history smart-lists-container" >
				<tbody class="mini-prod-history__tbody" data-bind="if: isOrdered">
					<tr class="mini-prod-history__row total-qty-ordered">
						<td class="mini-prod-history__cat">Total Qty Ordered</td>
						<td class="mini-prod-history__data" data-bind="text: sumQty"></td>
					</tr>
					<tr class="mini-prod-history__row total-times-ordered">
						<td class="mini-prod-history__cat">Total Times Ordered</td>
						<td class="mini-prod-history__data" data-bind="text: orderCount"></td>
					</tr>
					<tr class="mini-prod-history__row most-recent-order-date">
						<td class="mini-prod-history__cat">Most Recent Order</td>
						<td class="mini-prod-history__data" data-bind="text: mostRecentOrderDate"></td>
					</tr>
				</tbody>
			</table>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.smart_lists">
		<!-- ko if: oConfig.showProductHistory && oConfig.isLoggedIn-->
			<h2 data-bind="html: oConfig.labels.productHistory"></h2>
			<div class="prod-history">
				<div class="prod-history__list">
					<!-- ko ifnot: (accountHistory && accountHistory.accountName) -->
						<p class="alert alert-warning">No additional information available.</p>
					<!-- /ko -->
					<!-- ko if: accountHistory && accountHistory.accountName -->
						<div class="clearfix prod-history__meta">
							<div class="pull-left" data-bind="if: accountHistory.accountName">
								<strong>Account:</strong>
								<span data-bind="html: accountHistory.accountName"></span>
							</div>
							<div class="pull-right" data-bind="if: accountHistory.lastUpdate">
								<strong>Last Updated:</strong>
								<span data-bind="text: accountHistory.lastUpdate"></span>
							</div>
						</div>
						<!-- ko template: { name: 'catalog.smart_lists_panels', data: accountHistory, if: accountHistory && accountHistory.accountName } --><!-- /ko -->
					<!-- /ko -->
				</div>
			</div>
		<!-- /ko -->
	</script>

	<script type="text/html" id="catalog.smart_lists_panels">
		<div class="row-fluid">

			<div class="span4">
				<table class="prod-history__table tablesaw order-stats" role="presentation">
					<thead class="panel-heading">
						<tr class="prod-history__row">
							<th class="prod-history__title" colspan="2">
								Order Stats
								<a class="prod-history__view-more btn btn-mini" data-bind="attr: { href: $parent.getSmartListLinkOrderStats($parent) }, visible: isOrdered">
									View Details <i class="icon-angle-right"></i>
								</a>
							</th>
						</tr>
					</thead>
					<tbody class="prod-history__tbody list-group">
						<!-- ko if: isOrdered -->
							<tr class="prod-history__row total-qty-ordered">
								<td class="prod-history__cat">Total Qty Ordered</td>
								<td class="prod-history__data" data-bind="text: sumQty"></td>
							</tr>
							<tr class="prod-history__row total-times-ordered">
								<td class="prod-history__cat">Total Times Ordered</td>
								<td class="prod-history__data" data-bind="text: orderCount"></td>
							</tr>
							<tr class="prod-history__row most-recent-order-date">
								<td class="prod-history__cat">Most Recent Order</td>
								<td class="prod-history__data" data-bind="text: mostRecentOrderDate"></td>
							</tr>
							<tr class="prod-history__row oldest-order-date">
								<td class="prod-history__cat">Oldest Order</td>
								<td class="prod-history__data" data-bind="text: oldestOrderDate"></td>
							</tr>

						<!-- /ko -->
						<!-- ko ifnot: isOrdered -->
							<tr class="prod-history__row previously-ordered">
								<td class="prod-history__cat">Previously Ordered</td>
								<td class="prod-history__data">No</td>
							</tr>
						<!-- /ko -->
					</tbody>
				</table>

			</div>

			<div class="span4">
				<table class="prod-history__table tablesaw invoice-stats" role="presentation">
					<thead class="panel-heading">
						<tr class="prod-history__row">
							<th class="prod-history__title" colspan="2">
							Invoice Stats
							<a class="prod-history__view-more btn btn-mini" data-bind="attr: { href: $parent.getSmartListLinkInvoiceStats($parent) }, visible: isInvoiced">
								View Details <i class="icon-angle-right"></i>
							</a>
							</th>
						</tr>
					</thead>
					<tbody class="list-group">
						<!-- ko if: isInvoiced -->
							<tr class="prod-history__row total-qty-invoiced">
								<td class="prod-history__cat">Total Qty Invoiced</td>
								<td class="prod-history__data" data-bind="text: sumInvoiceQty"></td>
							</tr>
							<tr class="prod-history__row total-times-invoiced">
								<td class="prod-history__cat">Total Times Invoiced</td>
								<td class="prod-history__data" data-bind="text: invoiceCount"></td>
							</tr>
							<tr class="prod-history__row most-recent-invoice-date">
								<td class="prod-history__cat">Most Recent Invoice</td>
								<td class="prod-history__data" data-bind="text: mostRecentInvoiceDate"></td>
							</tr>
							<tr class="prod-history__row oldest-invoice-date">
								<td class="prod-history__cat">Oldest Invoice</td>
								<td class="prod-history__data" data-bind="text: oldestInvoiceDate"></td>
							</tr>
							<tr class="prod-history__row amount-invoiced-mtd">
								<td class="prod-history__cat">Invoiced MTD</td>
								<td class="prod-history__data" data-bind="html: utils.formatMoney(sumInvoicedMtd)"></td>
							</tr>
							<tr class="prod-history__row amount-invoiced-last-month">
								<td class="prod-history__cat">Invoiced Last Month</td>
								<td class="prod-history__data" data-bind="html: utils.formatMoney(sumInvoicedLastMonth)"></td>
							</tr>
							<tr class="prod-history__row amount-invoiced-ytd">
								<td class="prod-history__cat">Invoiced YTD</td>
								<td class="prod-history__data" data-bind="html: utils.formatMoney(sumInvoicedYtd)"></td>
							</tr>
							<tr class="prod-history__row amount-invoiced-last-year">
								<td class="prod-history__cat">Invoiced Last Year</td>
								<td class="prod-history__data" data-bind="html: utils.formatMoney(sumInvoicedLastYear)"></td>
							</tr>
							<tr class="prod-history__row total-amount-invoiced">
								<td class="prod-history__cat">Total Invoiced</td>
								<td class="prod-history__data" data-bind="html: utils.formatMoney(sumInvoiced)"></td>
							</tr>
						<!-- /ko -->
						<!-- ko ifnot: isInvoiced -->
							<tr class="prod-history__row previously-invoiced">
								<td class="prod-history__cat">Previously Invoiced</td>
								<td class="prod-history__data">No</td>
							</tr>
						<!-- /ko -->
					</tbody>
				</table>

			</div>

			<div class="span4">
				<table class="prod-history__table tablesaw other-stats" role="presentation">
					<thead class="panel-heading">
						<tr class="prod-history__row">
							<th class="prod-history__title" colspan="2">Other Stats</th>
						</tr>
					</thead>
					<tbody class="list-group">
						<!-- ko if: viewedCount -->
							<tr class="prod-history__row times-viewed">
								<td class="prod-history__cat">Times Viewed</td>
								<td class="prod-history__data" data-bind="text: viewedCount"></td>
							</tr>
							<tr class="prod-history__row most-recent-view-date">
								<td class="prod-history__cat">Most Recent View</td>
								<td class="prod-history__data" data-bind="text: mostRecentViewDate"></td>
							</tr>
						<!-- /ko -->
						<tr data-bind="visible: oConfig.smartListShowFavorites" class="prod-history__row on-favorites-list">
							<td class="prod-history__cat" data-bind="html: oConfig.smartListFavoritesText"></td>
							<td class="prod-history__data" data-bind="text: isOnFavList ? 'Yes' : 'No'"></td>
						</tr>
						<tr data-bind="visible: oConfig.smartListShowInventoryWatch" class="prod-history__row on-inventory-watch">
							<td class="prod-history__cat" data-bind="html: oConfig.smartListInventoryWatchText"></td>
							<td class="prod-history__data" data-bind="text: isOnInventoryWatch ? 'Yes' : 'No'"></td>
						</tr>
						<tr data-bind="visible: oConfig.smartListShowAbandonedCart" class="prod-history__row in-abandoned-cart">
							<td class="prod-history__cat" data-bind="html: oConfig.smartListAbandonedCartText"></td>
							<td class="prod-history__data" data-bind="text: isInAbandonedCart ? 'Yes' : 'No'"></td>
						</tr>
					</tbody>
				</table>

			</div>
	</script>

	<script type="text/html" id="catalog.smart_lists_table">
		<table class="table table-bordered">
			<tr class="header-row order-stats">
				<th colspan="2">
					Order Stats
					<!-- ko if: isOrdered -->
						-
						<a data-bind="
							attr: {
								href: $parent.getSmartListLinkOrderStats($parent)
							}
						">
							View Details
						</a>
					<!-- /ko -->
				</th>
			</tr>
			<!-- ko if: isOrdered -->
				<tr class="total-qty-ordered">
					<td>Total Qty Ordered</td>
					<td data-bind="text: sumQty"></td>
				</tr>
				<tr class="total-times-ordered">
					<td>Total Times Ordered</td>
					<td data-bind="text: orderCount"></td>
				</tr>
				<tr class="most-recent-order-date">
					<td>Most Recent Order Date</td>
					<td data-bind="text: mostRecentOrderDate"></td>
				</tr>
				<tr class="oldest-order-date">
					<td>Oldest Order Date</td>
					<td data-bind="text: oldestOrderDate"></td>
				</tr>
			<!-- /ko -->
			<!-- ko ifnot: isOrdered -->
				<tr class="previously-ordered">
					<td>Previously Ordered</td>
					<td>No</td>
				</tr>
			<!-- /ko -->

			<tr class="header-row invoice-stats">
				<th colspan="2">
					Invoice Stats
					<!-- ko if: isInvoiced -->
						-
						<a data-bind="
							attr: {
								href: $parent.getSmartListLinkInvoiceStats($parent)
							}
						">
							View Details
						</a>
					<!-- /ko -->
				</th>
			</tr>
			<!-- ko if: isInvoiced -->
				<tr class="total qty invoiced">
					<td>Total Qty Invoiced</td>
					<td data-bind="text: sumInvoiceQty"></td>
				</tr>

				<tr class="total-times-invoiced">
					<td>Total Times Invoiced</td>
					<td data-bind="text: invoiceCount"></td>
				</tr>

				<tr class="most-recent-invoice-date">
					<td>Most Recent Invoice Date</td>
					<td data-bind="text: mostRecentInvoiceDate"></td>
				</tr>

				<tr class="oldest-invoice-date">
					<td>Oldest Invoice Date</td>
					<td data-bind="text: oldestInvoiceDate"></td>
				</tr>

				<tr class="amount-invoiced-mtd">
					<td>Amount Invoiced MTD</td>
					<td data-bind="html: utils.formatMoney(sumInvoicedMtd)"></td>
				</tr>

				<tr class="amount-invoiced-last-month">
					<td>Amount Invoiced Last Month</td>
					<td data-bind="html: utils.formatMoney(sumInvoicedLastMonth)"></td>
				</tr>

				<tr class="amount-invoiced-ytd">
					<td>Amount Invoiced YTD</td>
					<td data-bind="html: utils.formatMoney(sumInvoicedYtd)"></td>
				</tr>

				<tr class="amount-invoiced-last-year">
					<td>Amount Invoiced Last Year</td>
					<td data-bind="html: utils.formatMoney(sumInvoicedLastYear)"></td>
				</tr>

				<tr class="total-amount-invoiced">
					<td>Total Amount Invoiced</td>
					<td data-bind="html: utils.formatMoney(sumInvoiced)"></td>
				</tr>
			<!-- /ko -->
			<!-- ko ifnot: isInvoiced -->
				<tr class="previously-invoiced">
					<td>Previously Invoiced</td>
					<td>No</td>
				</tr>
			<!-- /ko -->

			<tr class="header-row other-stats">
				<th colspan="2">Other Stats</th>
			</tr>
			<!-- ko if: isOnFavList -->
				<tr class="on-favorites-list">
					<td>On Favorites List</td>
					<td>Yes</td>
				</tr>
			<!-- /ko -->
			<!-- ko if: viewedCount -->
				<tr class="times-viewed">
					<td>Times Viewed</td>
					<td data-bind="text: viewedCount"></td>
				</tr>
				<tr class="most-recent-view-date">
					<td>Most Recent View Date</td>
					<td data-bind="text: mostRecentViewDate"></td>
				</tr>
			<!-- /ko -->
			<!-- ko if: isOnInventoryWatch -->
				<tr class="on-inventory-watch">
					<td>On Inventory Watch</td>
					<td>Yes</td>
				</tr>
			<!-- /ko -->
			<tr class="in-abandoned-cart">
				<td>In Abandoned Cart</td>
				<td data-bind="text: isInAbandonedCart ? 'Yes' : 'No'"></td>
			</tr>
		</table>
	</script>

	<script type="text/html" id="catalog.detail_info">
		<dl class="prod-searchfields">
			<!-- ko template: 'catalog.sku_label' --><!-- /ko -->
			<!-- ko template: { name: 'catalog.searchfields', foreach: _.values(selectedProduct().searchfields) } --><!-- /ko -->
		</dl>
	</script>

	<script type="text/html" id="catalog.sku_label">
		<dt data-bind="html: oConfig.labels.sku"></dt>
		<dd itemprop="sku" data-bind="html: selectedProduct().sku"></dd>
	</script>

	<script type="text/html" id="catalog.searchfields">
		<!-- ko if: oConfig.showSearchFields && $data && show() -->
			<dt class="prod-searchfields__label" data-bind="html: label"></dt>
			<dd class="prod-searchfields__value" data-bind="html: value"></dd>
		<!-- /ko -->
	</script>

	<script type="text/html" id="promotions.descriptions">
		<div class="promo-panel-container">
			<h4 class="promo-panel-heading" data-bind="text: title"></h4>
			<ul class="promo-panel-content" data-bind="foreach: descriptions">
				<li
					class="promo-panel"
					data-bind="
						text: description,
						css: {
							faded: $parent.selectedProduct().type !== 'parent' && !_.contains(targetKeys, $parent.selectedProduct().key())
						}
				">
				</li>
			</ul>
		</div>
	</script>

	<script type="text/html" id="catalog.configurator">
		<form id="frmAddToCart">
			<div id="configurator" data-bind="configurator: $data"></div>
		</form>
	</script>
	<script type="text/javascript">
		// The configurator markup cannot be placed directly in a template
		// because it can contain scripts and scripts cannot be nested. Instead,
		// a surrogate is used to allow the scripts to run and then its contents
		// are moved when the template is called. This means that each surrogate
		// can only be used once, and thus, only one product per page can
		// display a configurator form. However, this isn't a new limitation to
		// configurator since configurator uses generic IDs for all the elements
		// it creates.
		ko.bindingHandlers.configurator = {
			init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
				var product = ko.unwrap(valueAccessor());
				var data = product.configuratorEditData
				var $surrogate = $('#configurator_surrogate').detach();
				var $element = $(element);
				// Remove the scripts to prevent jQuery from running them again upon insertion.
				// Form builder does not allow disabling the use of form actions.
				$surrogate.find('script, .form-actions').remove();
				// In order to preserve bindings and jQuery data, the elements
				// are moved from the surrogate rather than copied. This won't
				// cause a reflow because the surrogate has `display: none`.
				$element.html($surrogate);
				$surrogate.children(':first-child').unwrap();

				//Stretchy.js is adding a style tag with height and width to text inputs and textareas.
				//This will remove those hardcoded heigths/widths but leave any "StyleOverride" props in place.
				_.each($element.find('textarea, input[type="text"]'), function(child){
					$(child).css('height','');
					$(child).css('width','');
				});

				if (data) {
					_.each(data.choices, function (choice) {
						var $inputs = $element.find('[name="' + choice.name + '"]');
						var answerVal;

						if (oConfig.configuratorUseAnswerIdNotName) {
							answerVal = choice.answer;
						} else {
							answerVal = choice.answerText;
						}

						if ($inputs.is(':checkbox, :radio')) {
							$inputs.filter('[value="' + answerVal + '"]').prop('checked', true);
						} else {
							$inputs.val(answerVal);
						}

						// Update display activators.
						$inputs.change();
					})

					product.selectedQty(data.qty);
				}

				runHook('afterBindingHandlersConfigInit', {product: product});
			},
			update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
				var product = ko.unwrap(valueAccessor());
				var $inputs = getInputs(product.key());

				// Trigger the input change after they have loaded so the price will calc on page load
				if ($inputs) {
					$inputs.change();
				}
			}
		};

		ko.bindingHandlers.validateQty = {
			init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {

				$(element).on("click blur", function (event) {
					var min        = parseFloat($(element).attr('min'));
					var max        = parseFloat($(element).attr('max')) || 0;
					var step       = parseFloat($(element).attr('step'));
					var currentQty = parseFloat($(element).val());
					var newQty     = currentQty;
					var lowerBound;
					var minFound = false;
					var maxFound = false;
					var accessor = valueAccessor() || [];

					viewModel.updateQty = function(args){
						if(viewModel.orderDetailKey){
							viewModel.qty(args);
						}else{
							viewModel.selectedQty(args);
						}
					};

					if($(element).val() == ''){
						if((isActiveLayout('gallery') && event.type == 'blur') || event.type == 'click' ) {
							viewModel.updateQty(min);
							$(element).select();
							return;
						}
					}

					if(currentQty < min){
						newQty = min;
						viewModel.updateQty(newQty);
						invalidQtyNotification(bindingContext.$data)
						return;
					}

					if(currentQty > max && max > 0){
						newQty = max;
						viewModel.updateQty(newQty);
						invalidQtyNotification(bindingContext.$data)
						return;
					}

					var stepMod = parseFloat((currentQty - min) % step);
					if(stepMod != 0 && (!maxFound && !minFound)){
						newQty = Math.ceil((currentQty - min) / step) * step + min;

						viewModel.updateQty(newQty);
						invalidQtyNotification(bindingContext.$data)
						return;
					}

				});
			}
		};

		ko.bindingHandlers.validateQtyControlInput = {
			init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {

				$(element).on("click blur", function (event) {
					var min        = parseFloat($(element).attr('min'));
					var max        = parseFloat($(element).attr('max')) || 0;
					var step       = parseFloat($(element).attr('step'));
					var currentQty = parseFloat($(element).val());
					var newQty     = currentQty;
					var lowerBound;
					var minFound = false;
					var maxFound = false;
					var accessor = valueAccessor() || allBindings().value;

					if(currentQty !== 0 && currentQty < min){
						newQty = min;
						accessor(newQty);
						return;
					}

					if(currentQty > max && max > 0){
						newQty = max;
						accessor(newQty);
						return;
					}

					var stepMod = parseFloat((currentQty - min) % step);
					if(stepMod != 0 && (!maxFound && !minFound)){
						if(ko.unwrap(valueAccessor())) {
							newQty = Math.ceil((currentQty - min) / step) * step + min;
						} else {
							newQty = Math.floor((currentQty - min) / step) * step + min;
						}
						accessor(newQty);
						return;
					}

				});
			}
		};

		ko.bindingHandlers.addModalHandler = {
			init: function(element, valueAccessor, allBindings){
				var bindings = allBindings.get('addModalHandler');
				modal.addCompletionHandler(bindings.element, bindings.handler);
			}
		};

		function getInputs(productKey) {
			var keyAttribute = 'data-configurator-product-key';
			// The container will vary based on whether this function is called
			// before or after the `catalog.configurator` template is used.
			var $container = $('#configurator_surrogate');
			if (!$container.length) $container = $('#configurator');
			var $dataElement = $container.find('[' + keyAttribute + ']');
			return $dataElement.attr(keyAttribute) === productKey ? $container.find(':input') : null;
		}

		function getPrice($inputs) {
			var price = 0;
			$inputs
				.filter(':visible:not(:disabled)')
				.find(':selected')
				.add($inputs.filter(':checked'))
				.each(function () {
					price += $(this).data('price') || 0;
				});

			return price;
		}

		(function () {

			window.buildConfiguratorPriceObservable = function (productKey) {
				var priceObservable = ko.observable(0);
				var $inputs = getInputs(productKey);

				if ($inputs) {
					priceObservable(getPrice($inputs));

					$inputs.change(function () {
						// modify the price for product configurator option
						runHook('modifyConfigOptionPrice', { 'inputs' : $inputs });

						var newPrice = getPrice($inputs);
						if (priceObservable() !== newPrice) priceObservable(newPrice);
					});
				}

				return priceObservable;
			};

			window.buildConfiguratorPostData = function (productKey) {
				var $inputs = getInputs(productKey);
				var postData = {};

				if ($inputs) {
					var ary = $inputs.filter(':not(:disabled)').serializeArray(); // can't exclude non-visible items; configurator uses them a lot!
					_.each(ary, function (datum) {
						if (datum.value) {
							if (postData.hasOwnProperty(datum.name)) {
								if(!Array.isArray(postData[datum.name])) {
									postData[datum.name] = [ postData[datum.name] ];
								}
								postData[datum.name].push(datum.value);
							} else {
								postData[datum.name] = datum.value;
							}
						}
					});
					postData['use_config_questions_' + productKey] = true;
				}
				return postData;
			};
		}());
	</script>
	<div id="configurator_surrogate" style="display: none">
		<div class="configurator">
		</div>
	</div>

	<script type="text/html" id="catalog.slideshow">
	</script>
	
<script>

	function invalidQtyNotification(data) {
		// change where key is derived from (different on payment page than catalog)
		var elementSelector = data.key ? '*[data-key="'+ data.key() + '"]' : '*[data-key="'+ data.orderDetailKey() + '"]';
		element = $(elementSelector);
		if ($(element).length){
			if(oConfig.preventATCInvalidQty) data.isQtyValid(false);
			$(element).popover('show').addClass('text-error') ;
			setTimeout(function () {
				$(element).popover('toggle').removeClass('text-error');

				// check to see if prop exists (doesn't on payment page)
				if(data.isQtyValid) {
					data.isQtyValid(true);
				}
			}, 3000 );
		}
	}

	function changeSort(data, event) {
		var sort = event.target.value;
		var sortField = sort.split('~')[0];
		var sortOrder = sort.split('~')[1];
		var url = utils.setParameter('sortby', sortField );
		url = utils.setParameter('sortorder', sortOrder, url );
		window.location = url;
	}

	function getSelectedSort() {
		if(utils.getParameter('sortby')){
			return decodeURI(utils.getParameter('sortby') + '~' + utils.getParameter('sortorder'));
		}else{
			return oConfig.searchConfig.defaultSort;
		}
	}

	function changeRpp(data, event) {
		var sUrl = utils.setParameter('rpp', event.target.value);
		sUrl = utils.setParameter('page', 1, sUrl);
		window.location = sUrl;
	}

	function getSelectedRpp() {
		if(utils.getParameter('favorites')){
			//force a single page for favorites lists.
			oConfig.searchConfig.rpp = 9999;
		}else{
			return utils.getParameter('rpp') || oConfig.searchConfig.rpp;
		}
	}

	function isActiveLayout(layout) {
		return getActiveLayout() === layout;
	}

	function getActiveLayout() {
		var layout = null;
		if(oConfig.pageName === 'pc_combined_results.asp'){
			if(utils.getParameter("modal") || utils.getParameter('queue_id')){
				layout = 'list';
			}else{
				var defaultLayout = oConfig.searchConfig.layout;
				var cookieLayout;
				var categoryLayout;
				if(oConfig.searchConfig.showLayout){
					cookieLayout = utils.getCookie('productLayout');
				}
				if(viewModel.category){
					if(viewModel.category.defaultView != ''){
						categoryLayout = viewModel.category.defaultView;
					}
				}
				//Priority = cookie > category > default
				layout = cookieLayout || categoryLayout || defaultLayout;
			}
		}else{
			layout = null;
		}
		return layout;
	}

	function getStartCount() {
		var startCount = (oConfig.searchConfig.page - 1) * oConfig.searchConfig.rpp + 1;
		return startCount;
	}

	function getEndCount() {
		var rpp = oConfig.searchConfig.rpp || oConfig.searchConfig.total;
		var endCount = Math.min(((oConfig.searchConfig.page - 1) * rpp) + rpp, oConfig.searchConfig.total);
		return endCount;
	}

	function maxPage() {
		return Math.ceil(oConfig.searchConfig.total / oConfig.searchConfig.rpp);
	}

	function setLayout(layout) {
		utils.setCookie('productLayout', layout);
		window.location.reload();
	}

	function getLayoutTemplate(data) {
		if(data.results().length == 0 && !data.category && oConfig.isUsingFacetedSearch){
			hideSidebar();
		}

		if(data.results().length == 0){
			hideSearchTools();
			return 'catalog.no_results'
		} else {
			return 'catalog.' + (getActiveLayout() || oConfig.searchConfig.layout) + '_view';
		}
	}

	function hideSidebar(){
		$('#catalog-sidebar').hide();
		$('.main-content').removeClass('span9');
	}

	function hideSearchTools(){
		$('#products_header, #products_footer, .hidesearchtools').hide()
	}

	function pagingNodes() {
		var page = oConfig.searchConfig.page;
		var labels = oConfig.searchConfig.labels;
		var maxPage = window.maxPage();

		nodes = [
			{
				if: page > 1 && labels.prevPage,
				page: page - 1,
				text: labels.prevPage
			},
			{
				if: page > 2,
				page: 1,
				text: labels.firstPage || 1
			},
			{
				if: page > 3,
				text: '&hellip;'
			},
			{
				if: page > 1,
				page: page - 1
			},
			{
				if: true,
				text: page,
				page: page
			},
			{
				if: page < maxPage,
				page: page + 1
			},
			{
				if: page < maxPage - 2,
				text: '&hellip;'
			},
			{
				if: page < maxPage - 1,
				page: maxPage,
				text: labels.maxPage || maxPage
			},
			{
				if: page < maxPage && labels.nextPage,
				page: page + 1,
				text: labels.nextPage
			},
		];

		return _.compact(_.map(nodes, function (node) {
			return node.if ?
				{
					page: node.page,
					text: node.text || node.page
				} : null;
		}));
	}

	function getATCModalSize(){
		if(oConfig.usePromos){
			return '';
		}else{
			return 'small';
		}
	}

	function isTextSelected(input) {
			if (typeof input.selectionStart == "number") {
					return input.selectionStart == 0 && input.selectionEnd == input.value.length;
			} else if (typeof document.selection != "undefined") {
					input.focus();
					return document.selection.createRange().text == input.value;
			}
	}
	
	function setOptionHTML(optionElement, item) {
		var itemText = item ? item.name : '-- Select Option --';
		ko.applyBindingsToNode(optionElement, {html: itemText}, item);
	}
	
	function setOptionHtmlFromName(optionElement, item) {
		var itemText = item ? item.name : '-- Select Option --';
		ko.applyBindingsToNode(optionElement, {html: itemText}, item);
	}

	function setChildOptionDisable(field, optionElement, item) {
		function isInvalidChildOption(children, options, field, item) {
			return ko.computed(function () {
				var match = {};
				_.forEach(options, function (option) {
					// Don't unwrap unnecessary observables.
					if (option.field === field) return;
					var selected = option.selectedOption();
					if (selected) match[option.field] = selected.option;
				});
				match[field] = item.option;
				return !_.find(children, match);
			});
		}

		if (item && ko.unwrap(viewModel.mainProduct).children() && ko.unwrap(viewModel.mainProduct).children().length) {
			var obs = isInvalidChildOption(
				ko.unwrap(viewModel.mainProduct).children(),
				ko.unwrap(viewModel.mainProduct).childSelectors(),
				field,
				item
			);
			var itemText = item ? item.option : '-- Select Option --';
			ko.applyBindingsToNode(optionElement, {disable: obs, html: itemText}, item);
		} else {
			var itemText = item ? item.option : '-- Select Option --';
			ko.applyBindingsToNode(optionElement, {html: itemText}, item);
		}
	}

	function addToCartWithValidation(products, event, parentKey) {
		var invalidQtyIndex = _.findIndex(products, function(product) {return !product.isQtyValid()});
		var addingFromPayment = utils.getParameter('modal') == '1' && (pageType == 'favlist' || pageType == 'bulkadd' || pageType == 'invoice' || pageType == 'salesorder');
		var pendingProducts = _.filter(products, function(product){
			return !product.showQuickAtc() && !product.isInCart();
		})

		//If the total quantity selected on the page is <=0 then display an error message
		var iTotalQtyToAtc = _.filter(products,function(product) {return product.selectedProduct().selectedQty() > 0; }).length;
		if (iTotalQtyToAtc <= 0) {
			var data = { products: products, event: event };
			utils.openModal({
				body	: oConfig.atcInvalidQtyTemplate,
				size	: getATCModalSize(),
				title	: oConfig.labels.invalidQtyTitle
			}, data);
			return;
		}

		if(oConfig.preventATCInvalidQty && invalidQtyIndex != -1) {
			utils.scrollTo('[data-key="' + products[invalidQtyIndex].key() + '"');
		} else {
			utils.addToCart(
				_.filter(products, function (product) {
					return product.selectedProduct().selectedQty() > 0;
			}), undefined, parentKey);
		}

	}

	function replaceSavedCartKeywordWithGlobal(sLabel) {
		return sLabel.replace('<cart>', "Quote");
	}

	$(function () {
		
		runHook('modifyConfigSettings', oConfig); //called here so that the hooks are all registered first.

		ko.bindingHandlers.raty = {
			init: function () {
				return { controlsDescendantBindings: true };
			},
			update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
				var value = ko.unwrap(valueAccessor());
				var isRated = value != null;
				var $element = $(element);
				// This is no longer necessary since we are displaying ratings all the time,
				// plus it was setting inline style of 'block' when element needed 'inline-block' - jonr 2016-10-25
				// $element.toggle(isRated);

				if (isRated) {
					var options = typeof value === 'object' ? value : { score: value };
					_.defaults(options, {
						path: utils.buildImagePath('/gfx/').split('?')[0],
						space: false,
						readOnly: true,
						width: 90,
						hints: oConfig.ratingNames
					});
					$(element).html($('<div>').raty(options));
				}
			}
		};

		ko.applyBindings();

		runHook('afterApplyBindings', { });
	});

	function setPromoDescriptionTitleText(promoDescription) {
		var productPromotions = "";

		_.forEach(promoDescription, function (descriptions) {
			productPromotions += descriptions.description + '\n';
		});
		return productPromotions;
	}

	function setSelectedQty() {
		if(!!viewModel.mainProduct && !!ko.unwrap(viewModel.mainProduct).configuratorEditData && !!ko.unwrap(viewModel.mainProduct).configuratorEditData.qty) {
			ko.unwrap(viewModel.mainProduct).selectedProduct().selectedQty(ko.unwrap(viewModel.mainProduct).configuratorEditData.qty);
			return false;
		}
		//Preload the previous quantity when using the bulk order tools
		if(utils.getParameter('queue_id') || oConfig.searchConfig.pageType == 'salesorder' || oConfig.searchConfig.pageType == 'invoice'){
			return true;
		}
		if (oConfig.pageName === "pc_combined_results.asp") {
			return getActiveLayout() !== 'list' || oConfig.showListViewATC;
		}
		else if(oConfig.pageName === "pc_product_detail.asp") {
			return viewModel.mainProduct.childDisplayType() !== 'input-qty' && viewModel.mainProduct.childDisplayType() !== 'exploded-view' && viewModel.mainProduct.childDisplayType() !== 'matrix-all' && !viewModel.mainProduct.configuratorEditData;
		}
		else {
			return true;
		}
	}

	function setSelectedCartOptionAnswer(question) {
		if(viewModel.mainProduct && ko.unwrap(viewModel.mainProduct).configuratorEditData) {
			var editAnswer = ko.unwrap(viewModel.mainProduct).configuratorEditData.choices.filter(function(item) {
				return item.question === question.q_key();
			});

			if(editAnswer && editAnswer.length) {
				var editAnswerText = editAnswer[0].answerText;

				if(question.type() === 'select') {
					questionAnswer = question.answers().filter(function(answer) {
						return ko.unwrap(answer.value) === editAnswerText;
					});

					if(!!questionAnswer.length) {
						question.selectedAnswer(ko.unwrap(questionAnswer[0].value));
					}
				} else {
					question.selectedAnswer(editAnswerText);
				}
			}
		}
	}

	//AJAX Call to remove item from favorites list.
	function fncRemoveItem (sProdKey , product) {
		jQuery.ajax({
			url: 'pc_combined_results.asp',
			data: 'ajax=removefavitems&modal=1&p_key=' + sProdKey + '&fl_key=' + utils.getParameter('fl_key'),
			type: 'GET',
			dataType: 'text',
			success: function () {
				//remove from viewmodel
				viewModel.results.remove(product);
			}
		});
	}

	//If no products can be added to cart in list view then do not display the ATC button at the bottom of the page.
	function showAddAllToCart() {
		var productsShowingAtc = _.filter(viewModel.results(), function(result) { return result.showQuickAtc(); }).length;
		return productsShowingAtc > 0;
	}

	var pageType = "";
	var defaultHomeLink = "default.asp";
	var breadcrumbKey = "";
	var breadcrumbObj = utils.getStoredBreadcrumbs() || {breadcrumbs:{}};
	var activeBreadcrumb = breadcrumbObj.breadcrumbs[breadcrumbKey];
	
		$(document).on('click', '#prod_listings .detail_link', function(){
			var productKey = $(this).data('key');
			var productName = $(this).attr('title');

			var defaultBreadcrumb = [{ name: 'Home', link: window.location.pathname + window.location.search }];
			if(window.location.search != '' && window.location.pathname == '/pc_combined_results.asp'){
				if(utils.getParameter('queue_id')){
					homeName = 'Bulk Add Queue';
				}else{
					homeName = 'Search Results';
				}
				defaultBreadcrumb = [{ name: homeName, link: window.location.pathname + window.location.search }];
			}
			var productBreadcrumb = activeBreadcrumb || defaultBreadcrumb;
			productBreadcrumb.push({
				name: productName,
				link: ''
			});

			var breadcrumbObj = utils.getStoredBreadcrumbs() || {breadcrumbs: {}};
			breadcrumbObj.breadcrumbs[productKey] = productBreadcrumb;
			utils.setStoredBreadcrumbs(breadcrumbObj);
		});

		$(document).on('click', '.category-listings a', function(){
			var categoryKey = $(this).data('key');
			var categoryName = $(this).attr('title');
			var categoryLink = $(this).attr('href');

			var categoryBreadcrumb = activeBreadcrumb;
			categoryBreadcrumb.push({
				name: categoryName,
				link: categoryLink
			});

			var breadcrumbObj = utils.getStoredBreadcrumbs() || {breadcrumbs: {}};
			breadcrumbObj.breadcrumbs[categoryKey] = categoryBreadcrumb;
			utils.setStoredBreadcrumbs(breadcrumbObj);
		});

		$(document).on('click', '#category-window a, #header__prodcat a, .linkset .prodcat a', function(){
			if($(this).data('key')){
				var parentName = [];
				var parentHref = [];
				if($(this).data('parent-name') ){
					parentName = $(this).data('parent-name').split('|');
					parentHref = $(this).data('parent-href').split('|');
				}
				var contentKey = $(this).data('key');
				var categoryName = $(this).text();
				var categoryUrl = $(this).attr('href');

				var parents = [];
				for( i = 0; i < parentName.length ; i++ ){
					parents.push({
						name: parentName[i],
						link: parentHref[i]
					});
				}

				var home = [];
				home.push(
					{
						name: 'Home',
						link: defaultHomeLink
					}
				);
				var breadcrumb = home.concat(parents);
				var breadcrumbObj = utils.getStoredBreadcrumbs() || {breadcrumbs: {}};
				breadcrumbObj.breadcrumbs[contentKey] = breadcrumb;
				utils.setStoredBreadcrumbs(breadcrumbObj);
			}
		});
	

	var oConfig = {
		pageName: "signin.asp",
		mainProductKey: "",
		isModal: false,
		atcSplashTemplate: 'catalog.atc_splash',
		atcInvalidQtyTemplate : 'catalog.atc_invalid_qty',
		savedCartPopupTemplate: 'catalog.saved_cart_select_popup',
		ratingNames: ['Bad', 'Poor', 'Good', 'Very Good', 'Excellent'],
		formValidationKey: "",
		isUsingFacetedSearch: false,
		overrideCartKey: "" || "" || "" || "46BEA28609664F59B6B4C42CB5ADFD17",
		activeBreadcrumb: activeBreadcrumb,
		showCloneInstanceLink: false,

		sessionData : {
			sc_id : "46BEA28609664F59B6B4C42CB5ADFD17",
			sessionKey : "1AD9CAFADF6F46278D5D4D367AAEBAF0",
			storefrontUrl : "https://www.descovac.com",
			orderfrontUrl : "https://www.descovac.com",
			cdnUrl: "https://dqmy05zjbnp6b.cloudfront.net",
			isSuperUserSession : false
		},

		detailConfig : {
			productKey                 : '',
			useAdvancedTabs            : false,
			useRelatedProducts         : true,
			useSecondRelatedProducts   : true,
			useAlsoBoughtProducts      : false,
			useAddOnProducts           : false,
			useRecentlyViewedProducts  : true,
			useAliases                 : false,
			useSkuDisplay              : false,
			selectChildProductOnLoad   : true,
			tabLayoutMode              : "gallery",
			numberOfProductTabs        : "8",
			pageLayoutMode             : "gallery",
			showDocuments              : true,
			inputQtyLinkToChild        : false,
			globalUnitPriceDecimalPlaces : 2,
			gridRowClass               : "",
			gridLeftColumnClass        : "",
			gridRightColumnClass       : "",
			showProductDescriptionTop  : false,
			showSoftGoodAuthorizations : false,
			showDescription            : true,
			showMainImage              : true,

			labels : {
				relatedProducts        : "Related Products",
				secondRelatedProducts  : "Additional Products",
				alsoBoughtProducts     : "Customers Who Bought This Also Bought...",
				readReviews            : "Read Reviews",
				inputQty               : "Options",
				inputQtyATCLabel       : "Add to Cart Below <i class=\"icon-arrow-down\"></i>",
				recentlyViewedProducts : "Recently Viewed",
				pricesStartingAt       : "Starting at "
			}
		},

		searchConfig : {
			pageType                   : '',
			page                       : 0,
			total                      : 0,
			showAtc                    : true,
			hideAtcShowInv             : false,
			showLayout                 : true,
			layout                     : "list" || 'gallery',
			showRpp                    : true,
			rppOptions                 : [25,50,100],
			showSort                   : true,
			productSort                : {
		"field"     : "p.sku",
		"direction" : "asc",
		"display"   : "SKU (a-z)"
	},
			productSortOptions         : [{
		"field"     : "p.sku",
		"direction" : "asc",
		"display"   : "SKU (a-z)"
	},{
		"field"     : "p.sku",
		"direction" : "desc",
		"display"   : "SKU (z-a)"
	},{
		"field"     : "p.nm",
		"direction" : "asc",
		"display"   : "Name (a-z)"
	},{
		"field"     : "p.nm",
		"direction" : "desc",
		"display"   : "Name (z-a)"
	}],
			showDownload               : false,
			gridListViewRowClass       : "",
			gridListViewATCColumnClass : "",
			showDescription            : true,
			showCategoryDescription    : true,
			showThumb                  : true,
			requireAddOnSelection      : false,

			labels : {
				layout                    : "",
				sort                      : "Sort by",
				rpp                       : "per page",
				firstPage                 : "",
				maxPage                   : "",
				prevPage                  : "<i class=\"icon-angle-left\"></i> Prev",
				nextPage                  : "Next <i class=\"icon-angle-right\"></i>",
				favListRemoveColumnHeader : "",
				searchResultsHeader       : "<count> results for <keyword>",
				pricesStartingAt          : "Starting at ",
				galleryView               : "<i class=\"icon-th\"></i> Gallery",
				listView                  : "<i class=\"icon-list-ul\"></i> List",
				inventoryWatchLinkText    : "<i class=\"icon-eye-open\"></i> Watch"
			}
		},

		formAction : "https://www.descovac.com/i_i_add_to_cart.asp",
		isLoggedIn : false,
		showChildrenSelection: false,
		allowQuickAdd: true,

		usePromos                : false,
		useIdp                   : false,
		useUom                   : (false || false),
		useSalesUom              : false,
		useMultiUomMultiCurrency : false,
		useMinimumQuantity       : false,
		useMaximumQuantity       : false,
		useQuantityIncrement     : false,
		useReviews               : false,
		allowAddAnonymousReviews : false,
		get allowAddReviews()
			{
				return this.isLoggedIn || this.allowAddAnonymousReviews;
			},
		useBreaks                : false,
		useBreaksTable           : true,
		priceBreaksTableHeader   : "Quantity Price Breaks",
		useSavedCarts            : false,
		useTaxExempt             : false,
		showInventoryWatch       : false,
		showEmailFriend          : true,
		showFavLink              : true,
		showRFQLink              : false,
		showProductHistory		   : true,
		showProductHistoryResults: true,
		showWarehouses           : false,
		showProdYouSave          : false,
		allowWarehouseSelection  : false,
		useWarehousesTable       : false,
		defaultWarehouse         : "",
		hazmatLink               : "help/about-dangerous-goods",
		allowChildATC            : true,
		showListViewATC          : true,
		showNameCol              : true,
		showImgCol 				 : true,
		preventATCInvalidQty 	 : false,
		showZeroPriceMessage	 : false,
		zeroPriceMessage		 : "Pricing is not currently available on this product. If purchased you will be contacted with pricing and updated order totals before processing your order.",
		showPricingOrderEntry    : true,
		configuratorUseAnswerIdNotName: false,
		useCartOptions : false,
		showSearchFields: false,
		searchFieldsShell: {"searchfield1":{"label":"","show":false},"searchfield2":{"label":"","show":false},"searchfield3":{"label":"","show":false},"searchfield4":{"label":"","show":false},"searchfield5":{"label":"","show":false}},

		labels : {
			pic                              : "Pic",
			price                            : "Price",
			sku                              : "SKU",
			uom                              : "Unit:",
			description                      : "Description",
			reviews                          : "Reviews",
			productHistory                   : "Product History",
			qty                              : "QTY",
			breaks                           : "Qty Pricing",
			inventoryWatch                   : "Add to Watch List",
			warehouses                       : "Warehouses",
			inventoryStatus                  : "Status",
			downloads                        : "Downloads:",
			suggestedPrice                   : "List Price",
			nameCol                          : "Name",
			imgCol                          : "Image",
			emailFriend                      : "Email a Friend",
			favLink                          : "Add to Favorites",
			step                             : "Qty Increment",
			minQty                           : "Min Qty",
			minQtyPopover 					 : "Minimum Qty: <min_qty>",
			maxQty                           : "Max Qty",
			showCartLink                     : "Proceed to Cart",
			continueShoppingLink             : "Continue Shopping",
			hazmat                           : "<span class=\"label label-warning\"><i class=\"fas fa-exclamation-triangle\"></i> Dangerous</span>",
			hazmatBoxRatio                   : "Box Ratio:",
			hazmatHelpText                   : "What's this?",
			softgoods						 : "Purchasing this item provides a digital file that will be delivered upon placing the order.",
			invalidQtyText                   : "You have to enter a valid quantity in at least one of the products on this page to add them to this quote.",
			invalidQtyTitle                  : "Missing Quantity",
			youSaveLabel                     : "You Save",
			removeFavLink                    : "Remove From Favorites",
			rfqLinkLabel                     : "Request a Custom Quote",

			savedCarts			: "Quote",
			savedCartsLabels 	: {
				addToSavedCart                   : replaceSavedCartKeywordWithGlobal("Add to <cart>"),
				itemText	                     : replaceSavedCartKeywordWithGlobal("Product"),
				modalHeader                      : replaceSavedCartKeywordWithGlobal("Add Item to <cart>"),
				modalCreateNew                   : replaceSavedCartKeywordWithGlobal("Create a new <cart>"),
				modalCreateNewSaveButton         : replaceSavedCartKeywordWithGlobal("Save"),
				modalCreateNewInputPlaceholder   : replaceSavedCartKeywordWithGlobal("<cart> Name"),
				modalExisting                    : replaceSavedCartKeywordWithGlobal("Add to Existing <cart>"),
				modalConfirmationHeader          : replaceSavedCartKeywordWithGlobal("Added to <cart>"),
				modalConfirmationSubHeader       : replaceSavedCartKeywordWithGlobal("Added to <cart>"),
				modalConfirmationViewButton      : replaceSavedCartKeywordWithGlobal("View <cart>"),
				modalConfirmationManageButton    : replaceSavedCartKeywordWithGlobal("Manage <cart>s"),
				modalConfirmationCloseButton     : replaceSavedCartKeywordWithGlobal("Close")
			},

			addToCart     : "<i class=\"icon-shopping-cart\"></i> Add",
			addToCartList : "<i class=\"icon-shopping-cart\"></i> Add to Cart",
			updateCartItem: "Update",
			taxExempt     : "Tax Exempt?",

			selectOptionsLabel : "Select options<i class=\"icon-angle-right icon-fixed-width\"></i>",

			noResults : "",

			productNotFound : "Product Not Found.",
			categoryNotFound : "Category Not Found.",

			averageRating    : "Average Rating",
			reviewSignInText : "Sign in to add a review",
			reviewsAddText   : "Add a Review",
			cloneInstanceLink: "",
			cloneInstanceTitle:"",
		},

		mapBehaviorMessages : {
			showMessage            : "Call for Price",
			requireLoginMessage    : "<div class=\"text-small muted\"><a class=\"global-modal\" data-size=\"small\" data-backdrop=\"static\" title=\"Sign in to Your Account\" href=\"security_logon.asp?autopage=/signin.asp?autopage=%2Fsitemap.asp&target=_parent\">Sign in</a> to see price</div>",
			requireAtcMessage      : "<div class=\"text-small muted\">View price in cart</div>",
			requireLoginAtcMessage : "<div class=\"text-small muted\"><a class=\"global-modal\" data-size=\"small\" data-backdrop=\"static\" title=\"Sign in to Your Account\" href=\"security_logon.asp?autopage=/signin.asp?autopage=%2Fsitemap.asp&target=_parent\">Sign in</a> to add to cart</div>",
			requireLoginOrAtcMessage: "<div class=\"text-small muted\"><a class=\"global-modal\" data-size=\"small\" data-backdrop=\"static\" title=\"Sign in to Your Account\" href=\"security_logon.asp?autopage=/signin.asp?autopage=%2Fsitemap.asp&target=_parent\">Sign in</a> or add to cart to see price</div>"
		},

		flags : [
			{
				link  : "",
				title : "Page 1",
				pic   : "flag1_n.png",
				thumb : "flag1_t.png"
			},
			{
				link  : "",
				title : "",
				pic   : "flag2_n.png",
				thumb : "flag2_t.png"
			},
			{
				link  : "",
				title : "",
				pic   : "flag3_n.png",
				thumb : "flag3_t.png"
			},
			{
				link  : "",
				title : "",
				pic   : "flag4_n.png",
				thumb : "flag4_t.png"
			}
		],

		childOptionList                        : [],
		childSkuMatch                          : "",
		defaultImage                           : "no-image.png" || 'no-image.png',
		noImagePath                            : "images/no-image.png" || 'images/no-image.png',
		displayDroplistPlaceholdersForLazyLoad : false,
		centerRecentlyViewed                   : false,
		smartListShowFavorites                 : true,
		smartListFavoritesText                 : "On Favorites List?",
		smartListShowInventoryWatch            : false,
		smartListInventoryWatchText            : "On Inventory Watch?",
		smartListShowAbandonedCart             : false,
		smartListAbandonedCartText             : "In Abandoned Cart?",
		t_analytics                            : "none",
		t_tracking_company             		   : "",
		t_tracking_id                          : "",
		t_gtm                                  : false,
		t_gtm_id                               : "",
		t_gtm_add_to_cart_event_name           : "EEaddToCart",
	};

	oConfig.usingFlags = oConfig.flags.reduce(function(anyFlagSet, flag) {
		var flagSet = flag.pic || flag.thumb
		return flagSet || anyFlagSet
	}, false);

</script>
</div>

<div class="cart-templates-scripts">

<script type="text/javascript">

    addTimer("start of ko model");
    $( document ).ready(function() {

        if('signin.asp' == 'payment.asp' ){
            $(document).on('hidden', '#global_modal', function () {
                if( $('#handle-modal-exit').val() == 'true'){
                    $('#handle-modal-exit').val(false);
                    viewModel.genericModalComplete();
                }
            });
        }
        addTimer("cart_templates: document.ready");

    });

    function emptyHandler(){}

    function scrollToSection(id) {
         $('html, body').animate({
            // subtracting body padding-top accounts for toolbars with absolute
            // position, such as the SU bar
            scrollTop: $(id).offset().top - parseInt($("body").css('padding-top'))
         }, 300,
        function(){
            $('html, body').clearQueue();
        });
    }

    function reloadPage() {
        viewModel.processing(true);
        location.reload();
	}

	function sendError(message) {
		if (window['insightRUM']) {
			insightRUM.rawErrors.push(["Error", sPageName, 1, 1, new Error(message.substring(0,149))]);
		}
	}

    function buildContinueShoppingUrl(){
        var url = ofConfig.continueShopPage;
        if(ofConfig.guestLoggedIn){
            url = utils.setParameter('action','logout',url);
        }
        return url;
    }

    function isValidRequestedDate(date) {
		try {
			isBusinessDay = businessDaySettings[1][""].work_days_of_week == undefined || businessDaySettings[1][""].work_days_of_week.indexOf(date.getDay()+1) > -1;
			isHoliday = businessDaySettings[1][""].holiday_dates != undefined && businessDaySettings[1][""].holiday_dates.indexOf(moment(date).format("MM/DD/YYYY")) > -1;
			if(isBusinessDay && !isHoliday) {
				return true;
			} else {
				return false;
			}
		} catch (error) {
			sendError("isValidRequestedDate: " + error.message);
			return true;
		}
    }

    function calculateAdjustedLeadTimeDays(effectiveOrderDate, leadTimeDays) {
        /*
            EJ - 2016-11-10 - adding 1 initially due to JS interpreting the date from the db as UTC date
                              when in fact it is a local date at midnight.  This causes the date
                              in JS to be the day before at 7pm (-5) or 8pm (-4) depending on time
                              of year.
                              Since we are only really concerned with the day, we can add one to
                              compensate for this.
        */
        var adjustedLeadTimeDays = leadTimeDays;

        /* EJ - 2016-11-10 - This if block helps mitigate when the cuttoff time has passed, but the
                             effective_order_date on the SelectedShipVia has not be recalced by the
                             ordering object yet.  It essentially checks the cutoff if the effective_order_date
                             is today.  Otherwise, there is no need to calculate it.
        */
        if(moment(effectiveOrderDate).date() <= moment().date()) {
            var currentDateTime = new Date();
            var currentUTCSeconds = currentDateTime.getUTCSeconds() + (60 * currentDateTime.getUTCMinutes()) + (60 * 60 * currentDateTime.getUTCHours());

            if(currentUTCSeconds > businessDaySettings[1][""].utc_cutoff_time_seconds) {
                adjustedLeadTimeDays += 1;
            }
        }

        var startingDate = moment();

        for(var i = 1; i < adjustedLeadTimeDays + 1; i++) {
            if(!isValidRequestedDate(startingDate.add(1, "days").toDate())) {
                adjustedLeadTimeDays += 1;
            }
        }

        return adjustedLeadTimeDays;
    }

    function autoAllocateItems() {
        if((!viewModel.useMultiShipEditUI()) || (viewModel.shipments().length === 1
            && viewModel.shipments()[0].shipTo().key() != ""
            && viewModel.shipments()[0].shipTo().key() != null)) {
                if(viewModel.shipments()[0].details().length === 0) {
                    viewModel.moveAllItemsToShipment(viewModel.shipments()[0]);
                }
        }
    }

    //This div is contained in the SU dashboard bar.
    utils.setActiveQuote = function (orderKey) {
        if(orderKey != ofConfig.SessionOrderKey) {
             jQuery.ajax({
                url: 'payment.asp' + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=setActiveQuote&quote_id=' + orderKey + '&randomnum=' + new Date().getTime()
                , cache: false
                , success: function(data,status,request){

                }
                , error: function(data) {
                    alert('Error posting Recurring Order Settings');
                }
                , complete: function(data) {
                }
            });
        }
    }

    utils.removeActiveQuote = function (bStartNewQuote) {
        utils.setActiveQuote('');
        if(bStartNewQuote){
            window.location = 'payment.asp' + (ofConfig.isModal ? '?modal=1' : '');
        }else{
            $('.active-quote-message').hide();
        }
    };

    var orderInfoPostUrl = 'payment.asp'; //'https://' + window.location.hostname + window.location.pathname;
    var orderInfoPostApiUrl = "/ordering/";
    var countries = [];
    var newCustomer = false;
    var viewModel;
    var order;

    function addAddressHandler() {
        viewModel.allocateShipments(false);
        apiGetShippingAddresses();
    }

    function changeAddressFromFinder(response, object){
        console.log(response);
        var address = new addressInfo({ key: response.sha_key.value, state: '', city: '', zipCode: '', country: '', name: response.sha_key_disp.value, address1: '', global: 0 });
        object.shipTo(address);
    }

    function getAddressOptFields(){
        var addressOptFields = [];
        for(i=1; i <= 5; i++){
            if(ofConfig['showAddressOpt'+i]){
                addressOptFields.push(i);
            }
        }
        return addressOptFields;
    }

    function apiGetShippingAddresses(editedKey) {
        $.ajax({
            url: orderInfoPostUrl + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=apiGetShippingAddresses',
            success: function(data) {
                // viewModel.shippingAddresses = processShippingAddresses(JSON.parse(data))();
                // viewModel.shippingAddresses.notifySubscribers();
                var newVarForTesting = processShippingAddresses(JSON.parse(data))();
				var editedShaKey = editedKey || '';
				var bFound;
                _.each(newVarForTesting, function(newItem){
                    _.each(viewModel.shippingAddresses(),function(oldItem){
                        if(editedShaKey != ''){
                            if(oldItem.key() == editedShaKey && newItem.key() == editedShaKey){
                                oldItem.name(newItem.name());
                                oldItem.phone(newItem.phone());
                                oldItem.address1(newItem.address1());
                                oldItem.address2(newItem.address2());
                                oldItem.address3(newItem.address3());
                                oldItem.address4(newItem.address4());
                                oldItem.address5(newItem.address5());
                                oldItem.city(newItem.city());
                                oldItem.state(newItem.state());
                                oldItem.zipCode(newItem.zipCode());
                                oldItem.opt1(newItem.opt1());
                                oldItem.opt2(newItem.opt2());
                                oldItem.opt3(newItem.opt3());
                                oldItem.opt4(newItem.opt4());
                                oldItem.opt5(newItem.opt5());
                                return false;
                            }
                            bFound = true;
                        }else{
                            bFound = false;
                            if(oldItem.key() == newItem.key()){
                                bFound = true;
                                return false;
                            }
                        }
                    });
                    if(!bFound && editedShaKey == ''){
                        viewModel.shippingAddresses.push(ko.mapping.fromJS(newItem, shippingAddressMappingOptions));
                        return false;
                    }
                });
                viewModel.availableAddresses = viewModel.shippingAddresses;
            },
            error: function(){
                alert('error getting shipping addresses');
            }
        });
    }

    var shippingAddressMappingOptions = {
        create: function(options) {
            var address = new addressInfo(options.data);
            address.summaryLine = ko.computed(function() {
                var lineText = '';

                function separator(separatorText) {
                    return lineText === '' ? '' : separatorText;
                }

                function addField(field, separatorText) {
                    if(!separatorText) { separatorText = ', '}
                    lineText += field ? separator(separatorText) + field : '';
                }

                addField(address.name());
                addField(address.company());
                addField(address.attention());
                addField(address.firstName());
                addField(address.lastName(), address.firstName() ? ' ' : '');
                addField(address.address1());
                addField(address.address2());
                addField(address.address3());
                addField(address.address4());
                addField(address.address5());
                addField(address.global());
                addField(address.city());
                addField(address.state());
                addField(address.zipCode(), ' ');
                addField(address.country());

                return lineText;
            });
            return address;
        }
    }

    function getNewAddress() {
        return {
            name: "",
            firstName: "",
            lastName: "",
            company: "",
            attention: "",
            address1: "",
            address2: "",
            address3: "",
            address4: "",
            address5: "",
            country: "USA",
            city: "",
            state: "",
            county: "",
            zipCode: "",
            phone: "",
            email: "",
            global: "0",
            opt1: "",
            opt2: "",
            opt3: "",
            opt4: "",
            opt5: "",
            key: utils.createGuid()
        }
    }

    function getShippingFromBilling() {
        var newAddress = JSON.parse(ko.toJSON(viewModel.Account));

        newAddress.firstName = viewModel.Customer().firstName();
        newAddress.LastName = viewModel.Customer().LastName();
        newAddress.Email = viewModel.Customer().Email();
        newAddress.Phone = viewModel.Customer().Phone();
        newAddress.Name = "";
        newAddress.Attention = viewModel.Customer().firstName() + ' ' + viewModel.Customer().LastName();
        newAddress.key = utils.createGuid();

        return newAddress;
    }

    function getNewShipment() {
        return new Shipment({
            Key: utils.createGuid(),
            SelectedShipVia: {},
            ShipViaChoices: [],
            Details: [],
            LeadTimeDays: null,
            ShipTo: getNewAddress(),
            Comments: "",
            availableAddresses: shippingAddresses
        });
    }

    function generateRefId(){
        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var yyyy = today.getFullYear();
        var rand = Math.floor(Math.random() * 1000000)

        if(dd<10) {
            dd='0'+dd
        }

        if(mm<10) {
            mm='0'+mm
        }

        today = yyyy+mm+dd+'-'+rand;
        return today;
    }

    var StateChoice = function(code, name) {
        var self = this;

        var choice = {};
        choice["code"] = code;
        choice["name"] = name;

        ko.mapping.fromJS(choice, {}, self);
    }

    var detailLineInstanceSort = function (a, b) {
            var aInstance = a.instance();
            var bInstance = b.instance();
            var aParentId = a.parentProductID().trim();
            var bParentId = b.parentProductID().trim();

            if(aInstance == bInstance) {
                return (aParentId < bParentId) ? -1 : (aParentId > bParentId) ? 1 : 0;
            } else {
                return (aInstance < bInstance) ? -1 : 1;
            }
    }

    var shipmentDetailsInstanceSort = function(a, b) {
        return detailLineInstanceSort(a.orderDetail, b.orderDetail);
    }

    var addressInfo = function(addressData, addressType) {
        var self = this;

        if(!addressData) {
            addressData = getNewAddress();
        }

        // Order JSON returns isGlobalAddress while the rest of the template loads in data relying on global
        if('isGlobalAddress' in addressData && !('global' in addressData)){
            addressData.global = addressData.isGlobalAddress;
        }
        
        addressData.addressType = ko.observable(addressType || 'shipping');

        ko.mapping.fromJS(addressData, {}, self);

        if(!self.state()) {
            self.state(undefined);
        }

        for(var prop in self) {
            if(self.hasOwnProperty(prop) && typeof self[prop] === 'function') {
                if(self[prop]() === null || self[prop]() === 'null') {
                    self[prop]('');
                }
            }
        }

        self.address1.extend({ required: true });
        self.country.extend({ required: true });
        self.city.extend({ required: true });
        self.state.extend({ required: ofConfig.bRequireStateForShipping });
        self.zipCode.extend({ required: ofConfig.bRequireZIPCodeForShipping });

        if(!self.country()) {
            self.country("USA");
        }

        self.stateChoices = ko.observableArray();

        self.editing = ko.observable(false);

        self.loadStates = function() {
            countries.forEach(function(country) {
                if(country.iso3 === self.country()) {
                    self.stateChoices(country.states);
                }
            });
            if(!self.country()){
                self.stateChoices.removeAll();
            }
        }

        self.country.subscribe(function() {
            self.loadStates();
        });

        self.loadStates();
    }

    var detailMap = function(detailLine, shipment, order) {
        var self = this;
        self.detailLine = detailLine;
        self.shipment = shipment;
        self.totalOrderQty = ko.computed(function() { return detailLine.qty(); });
        self.qtyToShip = ko.observable();
        self.qtyInShipment = ko.observable(function() {
                self.qtyToShip(self.shipment.details().reduce(function(prev, curr, index, arr) {
                    if(curr.orderDetailId() == detailLine.orderDetailKey()) {
                        return prev + Number(curr.qtyToShip());
                    } else {
                        return prev;
                    }
                }, 0));
                return self.qtyToShip();
            }()
        );

        self.qtyInAllShipments = ko.computed(function() {
            var theKey = self.shipment.key();
            var allShipmentsTotal = order.shipments().reduce(function(runningTotal, individualShipment) {
                var individualShipmentTotal = individualShipment.details().reduce(function(runningSubTotal, detail) {
                    if(detail.orderDetailId() == detailLine.orderDetailKey()) {
                        return runningSubTotal + Number(detail.qtyToShip() || 0);
                    } else {
                        return runningSubTotal;
                    }
                }, 0);
                return runningTotal += individualShipmentTotal;
            }, 0);

            var currentShipmentTotal = self.shipment.details().reduce(function(runningSubTotal, detail) {
                if(detail.orderDetailId() == detailLine.orderDetailKey()) {
                    return runningSubTotal + Number(detail.qtyToShip() || 0);
                } else {
                    return runningSubTotal;
                }
            }, 0)

            var otherShipmentsTotal = allShipmentsTotal - currentShipmentTotal;

            return otherShipmentsTotal + Number(self.qtyToShip() || 0);
        });

        self.unallocatedQty = ko.computed(function() { return self.detailLine.qty() - self.qtyInAllShipments(); });
        self.toggleItemSelect = ko.computed({
            read: function() {
                return this.qtyToShip() > 0;
            },
            write: function(isChecked) {
                if(isChecked){
                    this.qtyToShip(1);
                } else {
                    this.qtyToShip(0);
                }
            }
        }, self);

        runHook('detailLineModelBottom', { self: self, detailLine: self });
    };

    var Shipment = function(shipmentData) {
        var self = this;
        ko.mapping.fromJS(shipmentData, {
            shipTo : shippingAddressMappingOptions,
            shipViaChoices : {
                create: function(options) {
                    if(options.data == null) {
                        return ko.mapping.fromJS([]);
                    } else {
                        return ko.mapping.fromJS(options.data);
                    }
                }
            },
            selectedShipVia : {
                create: function(options) {
                    if(options.data == null) {
                        return ko.mapping.fromJS({requestDate: "0001-01-01T00:00:00"});
                    } else {
                        return ko.mapping.fromJS(options.data);
                    }
                }
            },
            details: {
                create: function(options) {
                    options.data.orderDetail.configuratorJson = options.data.orderDetail.configuratorJson ? JSON.parse(options.data.orderDetail.configuratorJson) : {};
                    if(options.data.orderDetail.configuratorJson && options.data.orderDetail.configuratorJson.choices) {
                        options.data.orderDetail.configuratorJson.choices = options.data.orderDetail.configuratorJson.choices.sort(function(a, b) {
                            if(a.pos == b.pos) {
                                return 0;
                            }
                            return a.pos < b.pos ? -1 : 1;
                        });
                    }
                    if(options.data.orderDetail.configuratorJson) {
                        options.data.orderDetail.configuratorJson.configType = options.data.orderDetail.configuratorJson.configType || 'configurator';
                    }
                    options.data.orderDetail.parentProductID  = options.data.orderDetail.parentProductID.trim() || '';
                    options.data.orderDetail.editing = false;

                    return ko.mapping.fromJS(options.data);
                }
            }
        }, self);

        self.details().forEach(function(detail) {
            var detailLine = detail.orderDetail;
            detailLine.instanceChildren = self.details().filter(function(item) {
                                            return item.orderDetail.instance() == detailLine.instance() && item.orderDetail.parentProductID().trim() != '' && item.orderDetail != detailLine;
                                        }).map(function(item) { return item.orderDetail; }) || [];

            var mainProductArray = self.details().filter(function(item) {
                                            return item.orderDetail.instance() == detailLine.instance() && item.orderDetail.removeType() == 'instance';
                                        });
            var mainProduct = mainProductArray.length > 0 ? mainProductArray[0].orderDetail : detailLine;

            var mainProductQty = mainProduct.qty();

            detailLine.instanceUnitPrice = ko.observable(self.details().reduce(function(current, item) {
                if(item.orderDetail.instance() == detailLine.instance()) {
                    //This IF block is attempting to account for calculating the unit price on "nested" configurator lines.  Any other product type should fall into
                    //  The else block so it just pulls the quantity from the od lines.
                    //TODO:  Account for configurator products AND split by address as this calculation will likely not work in that scenario.
                    //       In this scenario, it should use the extended quantity on the shipment not the one from the OD line.
                    if(item.orderDetail.parentProductID().trim() != '' && item.orderDetail.removeType() != 'instance' && item.orderDetail.removeType() != 'OD_Key') {
                        return current += ((item.orderDetail.priceBeforeAdjustment() || item.orderDetail.price()) * item.qtyToShip()) / mainProductQty;
                    } else {
                        return current += (item.orderDetail.priceBeforeAdjustment() || item.orderDetail.price());
                    }
                } else {
                    return current;
                }
            },0));

            detailLine.instanceUnitPriceDisplay = ko.computed(function(){
                return utils.formatMoney(detailLine.instanceUnitPrice());
            });

            detailLine.instanceExtPrice = ko.observable(self.details().reduce(function(current, item) {
                if(item.orderDetail.instance() == detailLine.instance()) {
                    return current += (item.orderDetail.priceBeforeAdjustment() || item.orderDetail.price()) * item.qtyToShip();
                    // return current += item.orderDetail.extTotal();
                } else {
                    return current;
                }
            },0));
        });

        self.availableAddresses = shippingAddresses;

        self.shipTo = ko.observable(self.shipTo);

        self.availableAddresses().forEach(function(address,index){
            if(!self.shipTo()){
                self.shipTo(address);
                return false;
            }
            if(address.key() == self.shipTo().key()){
                self.shipTo(address);
            }
        });

        self.earliestShipDate = ko.observable(
            function() {
                if(self.selectedShipVia && self.selectedShipVia.effectiveOrderDate) {
                    var adjustedLeadTimeDays = calculateAdjustedLeadTimeDays(self.selectedShipVia.effectiveOrderDate(), self.leadTimeDays());
                    return moment(self.selectedShipVia.effectiveOrderDate()).add(adjustedLeadTimeDays, "days").format("MM/DD/YYYY");
                } else {
                    return moment(new Date(self.ExpectedShipDate)).format("MM/DD/YYYY");
                }
            }()
        );

        self.requestedShipDate = ko.observable(
            function() {
                if(self.selectedShipVia && self.selectedShipVia.requestDate()) {
                    if(self.selectedShipVia.requestDate() >= self.earliestShipDate()) {
                        return moment(new Date(self.selectedShipVia.requestDate())).format("MM/DD/YYYY");
                    } else {
                        return self.earliestShipDate();
                    }
                } else {
                    if(self.selectedShipVia && self.selectedShipVia.effectiveOrderDate) {
                        var adjustedLeadTimeDays = calculateAdjustedLeadTimeDays(self.selectedShipVia.effectiveOrderDate(), self.selectedShipVia.leadTimeDays());
                        return moment(self.selectedShipVia.effectiveOrderDate()).add(adjustedLeadTimeDays - 1, "days").format("MM/DD/YYYY");
                    } else {
                        return moment(new Date(self.ExpectedShipDate)).format("MM/DD/YYYY");
                    }
                }
            }()
        );

        if(self.selectedShipVia && self.selectedShipVia.shippingAccountId){
            self.selectedShipVia.shippingAccountId = ko.validatedObservable(self.selectedShipVia.shippingAccountId() || '').extend({ required: true, message: 'Please select a shipping account.'});

            self.selectedShipVia.shippingAccountId.subscribe(function(shippingAccountKey){
                var postData = {};
                var orderShipViaDetails = [];

                orderShipViaDetails = [
                    {
                        "osvd_key" : self.selectedShipVia.orderShipViaDetailKey(),
                        "sa_id" : shippingAccountKey
                    }
                ]

                postData =
                {
                    "Tables": [
                        {
                            "TableName" : "orders_ship_via_details",
                            "TableKeyField" : "osvd_key",
                            "UserKeyField" : "osvd_key",
                            "UserKeyIsPrimaryKey" : "True",
                            "Data" : orderShipViaDetails
                        }
                    ]
                };

                postLogicJsonAjax(postData, true);
            });
        }else{
            self.selectedShipVia = {};
            self.selectedShipVia.shippingAccountId = ko.observable('');
            self.selectedShipVia.collectShippingAccount = ko.observable(false);
            self.selectedShipVia.name = ko.observable('');
            self.selectedShipVia.description = ko.observable('');
            self.selectedShipVia.total = ko.observable(0);
            self.selectedShipVia.shipViaChoiceID = ko.observable('');
            self.selectedShipVia.sv_ref_id = ko.observable('');
        };

        if(self.shipViaChoices && self.shipViaChoices().length > 0){
            self.selectedShipViaChoice = ko.observable(self.shipViaChoices().find(function(choice) {
                return (choice.shipViaChoiceKey() == self.selectedShipVia.shipViaChoiceID() || choice.shipViaRefID() == self.selectedShipVia.sv_ref_id());
            }) || self.shipViaChoices()[0]);
        }else{
            self.selectedShipViaChoice = ko.observable();
        }

        self.shipToValid = ko.computed(function() {
            return ko.validatedObservable(self.shipTo()).isValid();
        });

        self.saveShipToAddress = function(shipment) {

            var shipmentArray = [];

            var details = shipment.details().map(function(map, index, array) {
                return {
                    orderDetailId : map.orderDetailId(),
                    qtyToShip: map.qtyToShip()
                }
            });

            var shipmentInfo = {
                "Key": shipment.key(),
                "ShipmentId": shipment.key(),
                "ShipTo": {
                    key         : shipment.shipTo().key(),
                    name        : shipment.shipTo().name(),
                    company     : shipment.shipTo().company(),
                    attention   : shipment.shipTo().attention(),
                    address1    : shipment.shipTo().address1(),
                    address2    : shipment.shipTo().address2(),
                    address3    : shipment.shipTo().address3(),
                    address4    : shipment.shipTo().address4(),
                    address5    : shipment.shipTo().address5(),
                    city        : shipment.shipTo().city(),
                    state       : shipment.shipTo().state(),
                    zipCode     : shipment.shipTo().zipCode(),
                    county      : shipment.shipTo().county(),
                    country     : shipment.shipTo().country(),
                    email       : shipment.shipTo().email(),
                    firstName   : shipment.shipTo().firstName(),
                    lastName    : shipment.shipTo().lastName(),
                    phone       : shipment.shipTo().phone(),
                    global      : shipment.shipTo().global(),
                    opt1        : shipment.shipTo().opt1(),
                    opt2        : shipment.shipTo().opt2(),
                    opt3        : shipment.shipTo().opt3(),
                    opt4        : shipment.shipTo().opt4(),
                    opt5        : shipment.shipTo().opt5()
                },
                "Details": details
            };

            shipmentArray.push(shipmentInfo);

            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)),
                success: function(data) {
                    autoAllocateItems();
                    self.showShippingAddressEdit(false);
                },
                error: function() {
                    alert('error saving shipping address');
                }
            }

            postInfo(postOptions, 'updateShipToAddress', shipment.key());
        };

        self.setShippingToBilling = function(shipment) {
            var newAddress = getShippingFromBilling();
            shipment.shipTo(ko.mapping.fromJS(newAddress,shippingAddressMappingOptions));
            shipment.saveShipToAddress(shipment);
        }

        self.showShippingAddressEdit = ko.computed({
            read: function() {
                if(!self.shipToValid()) {
                    self.shipTo().editing(true);
                }
                return self.shipTo().editing();
            },
            write: function(newValue) {
                if(!newValue && self.shipToValid()) {
                    self.shipTo().editing(false);
                } else {
                    self.shipTo().editing(true);
                }
            }
        });

        // self.EarliestShipDate.extend();
        // self.RequestedShipDate.extend({ min: self.EarliestShipDate });
        // self.RequestedShipDate.extend({ min: { params: self.EarliestShipDate, message: "The earliest ship date available is {0}" } });

        self.detailsMap = ko.observableArray([]);

        self.valid = ko.computed(function() {
            return self.shipToValid() && self.details().length > 0; // && self.RequestedShipDate.isValid();
        });

        self.itemsSelected = ko.computed(function() {
            return self.details().length > 0;
        });

        self.selectItemsComplete = function(shipment) {

            var shipmentArray = [];

            var lineMappings = shipment.detailsMap().map(function(map, index, array) {
                return {
                    OrderDetailId : map.detailLine.orderDetailKey(),
                    QtyToShip: map.qtyToShip()
                }
            });

            var shipmentInfo = {
                Key: shipment.key(),
                ShipmentId: shipment.key(),
                Details: []
            };
            shipmentInfo.Details = lineMappings;
            shipmentArray.push(shipmentInfo);

            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)),
                error: function() {
                    alert('error saving item list on shipment');
                }
            }

            postInfo(postOptions, 'updateShipToAddress');

            $('#modal_add_prods[tabindex="-1"]:hidden').remove()
            $('#modal_add_prods').modal('hide');
        };

        self.selectedShipViaChoice.subscribe(function(newShipViaChoiceValue) {
            var shipViaChoiceKey = newShipViaChoiceValue.shipViaChoiceKey();
            var shipmentKey = self.key();

            var postOptions = {
                url: orderInfoPostUrl + '?ajax=true&pageaction=setShipmentShipVia&o_key=' + viewModel.orderKey()  + '&shipViaChoiceKey=' + shipViaChoiceKey + '&shipmentKey=' + shipmentKey,
                error: function() {
                    alert('error setting Shipping Method');
                }
            }

            postInfo(postOptions, 'setShipmentShipVia');

        });

        self.comments.subscribe(function(newComment) {

            var shipmentCommentPostData = {};

            var shipmentInfo = [{
                "os_key": self.key(),
                "comments": newComment
            }];

            shipmentCommentPostData =
            {
                "Tables": [
                    {
                        "TableName"           : "order_shipments",
                        "TableKeyField"       : "os_key",
                        "UserKeyField"        : "os_key",
                        "UserKeyIsPrimaryKey" : "True",
                        "Data"                : shipmentInfo
                    }
                ]
            };

            postLogicJsonAjax(shipmentCommentPostData);
        });

        self.requestedShipDate.subscribe(function(newRequestedShipDate) {

            if (!(newRequestedShipDate instanceof Date) || isNaN(newRequestedShipDate.valueOf())) {
                console.log('requestedShipDate is not a date');
                return;
            }

            var postOptions = {
                data: "shipmentId=" + encodeURIComponent(self.key()) + "&requestedShipDate=" + encodeURIComponent(moment(newRequestedShipDate).format('MM/DD/YYYY')),
                error: function() {
                    alert('error setting shipment requested ship date');
                }
            }

            postInfo(postOptions, 'setRequestedShipDate');
        });

        self.details().forEach(function(thisLine) {
            thisLine.hasChildProducts = ko.observable(function() {
                return self.details().filter(function(outerLine) {
                    return outerLine.orderDetail.instance() == thisLine.orderDetail.instance()
                            && thisLine.orderDetail.removeType() != 'instance'; // main product has removeType of instance
                }).length > 1;
            }());

            thisLine.orderDetail.hasParentInCart = ko.observable(function() {
                return self.details().filter(function(outerLine) {
                    return outerLine.orderDetail.orderDetailKey() != thisLine.orderDetail.orderDetailKey()
                            && outerLine.orderDetail.instance() == thisLine.orderDetail.instance()
                            && outerLine.orderDetail.removeType() == 'instance';
                }).length > 0;
            }());
        });

        if(ofConfig.useAccountDefaultShipVia && self.shipViaChoices && self.shipViaChoices().length > 0) {
            var filteredChoice = self.shipViaChoices().find(function(choice) {
                return choice.shipViaChoiceKey() == ofConfig.accountDefaultShipViaKey ||
                choice.shipViaRefID() == ofConfig.accountDefaultShipViaCode
            });

            if(filteredChoice) {
                self.shipViaChoices([ filteredChoice ]);
            }
        }

        self.shipTo.subscribe(function(shipTo) {
            if(viewModel && viewModel.setShipTo) {
                viewModel.setShipTo(self, shipTo);
            }
        })

        runHook('shipmentModelBottom', { self: self, shipmentData: shipmentData });
    }

    var Customer = function(customerData) {
        var self = this;

        ko.mapping.fromJS(customerData, {}, self);

        self.firstName.extend({ required: true });
        self.lastName.extend({ required: true });
        self.email.extend({ email: { message: 'A valid email address is required.', params: true }, required: { message: 'A valid email address is required.', params: true} });
        self.phone.extend({ required: true });
    }

    /*
    var Account = function(accountData) {
        var self = this;

        ko.mapping.fromJS(accountData, {
            create: function(options) {
                return new addressInfo(options.data);
            }
        }, self);

        if(!self.Country()) {
            self.Country('USA');
        }

        self.Company.extend({ required: true });
        self.Address1.extend({ required: true });
        self.Country.extend({ required: true });
        self.City.extend({ required: true });
        if(!self.State()) {
            self.State("");
        }
        self.State.extend({ required: true });
        self.ZipCode.extend({ required: true });
    }
    */

    var Order = function(orderData) {
        addTimer("start order mapping");
        var self = this;

        self.activeAjaxRequestCount = ko.observable(0);

        ko.mapping.fromJS(orderData, {
            detailLines : {
                create: function(options) {
                    options.data.configuratorJson = options.data.configuratorJson ? JSON.parse(options.data.configuratorJson) : {};
                    options.data.parentProductID  = options.data.parentProductID.trim() || '';
                    options.data.editing = false;
                    return ko.mapping.fromJS(options.data);
                }
            },
            orderActions : {
                create: function(options) {
                    if(options.data) {
                        if(!options.data.hasOwnProperty('showPaymentMethods')) {
                            options.data.showPaymentMethods = true;
                        }
                    }
                    return ko.mapping.fromJS(options.data);
                }
            },
            shipments : {
                create: function(options) {
                    return new Shipment(options.data);
                }
            },
            customer : {
                create: function(options) {
                    return options.data ? new Customer(options.data) : {};
                }
            },
            account : {
                create: function(options) {
                    return new addressInfo(options.data);
                }
            },
            paymentMethod : {
                create: function(options) {
                    if(options.data == null || options.data == '') {
                        return ko.mapping.fromJS({
                            paymentMethodKey: "",
                            paymentType: "",
                        });
                    } else {
                        options.data.paymentType = (options.data.paymentType || "").toLowerCase();
                        return ko.mapping.fromJS(options.data);
                    }
                }
            },
            vaultedPayment : {
                create: function(options) {
                    if(options.data == null) {
                        return ko.mapping.fromJS({
                            key: "",
                            vaultKey: "",
                            nickName: "",
                            nameOnCard: "",
                            cardType: "",
                            expMonth: 0,
                            expYear: 0,
                            first2: "0",
                            last4: "0",
                            address1: "",
                            address2: "",
                            city: "",
                            state: "",
                            zip: "",
                            country: "",
                            status: true,
                            merchantId: "",
                            customerId: "",
                            accountId: "",
                            gatewayInfoDirty: false,
                            accountLast4: "",
                            achAccountType: "",
                            bankName: "",
                            routingLast4: "",
                            type: "",
                            customerProfileId: ""
                        });
                    } else {
                        return ko.mapping.fromJS(options.data);
                    }
                }
            },
            roRunDate : {
                update: function(options) {
                    //Quick fix to hide invalid expiration.
                    //ToDo: update to check for other "invalid" dates.
                    date = new Date(options.data);

                    var isValid = date instanceof Date && !isNaN(date);
                    if(moment(date).format("MM/DD/YYYY") == '01/01/0001' || moment(date).format("MM/DD/YYYY") == '01/01/2001'){
                        isValid = false;
                    }

                    if(!isValid) {
                        return moment().format("MM/DD/YYYY");
                    } else {
                        return moment(date).format("MM/DD/YYYY");
                    }
                }
            },
            roRecCase : {
                update: function(options) {
                    if(!options.data) {
                        return 'month';
                    } else {
                        return options.data;
                    }
                }
            },
            roRecQty : {
                update: function(options) {
                    if(!options.data || options.data == 0) {
                        return 1;
                    } else {
                        return options.data;
                    }
                }
            },
            'ignore': ["errorMessages"]
        }, self);

        self.showCredits = ko.observable(false);
        self.allowQtyControls = ko.observable(false);

        self.detailLines().forEach(function(detailLine) {
            // We can't debounce/trottle an observable
            // so we add a computed to track qty changes.
            // We use this in a subscription to call
            // update cart to update qty change in bulk atc
            // to avoid loading the qty change without posting
            // and updating the entire order model (for perf)
            detailLine.qtyTracker = ko.computed(function() {
                return detailLine.qty();
            }).extend({throttle: 500});
            detailLine.qtyTracker.subscribe(function (newQty) {
                self.postQtyUpdate();
            }, detailLine);
            
            detailLine.workerPriceTracker = ko.computed(function() {
                return detailLine.price();
            }).extend({throttle: 500});
            detailLine.workerPriceTracker.subscribe(function (newQty) {
                self.setWorkerPriceOverride(detailLine);
            }, detailLine);

            detailLine.workerQtyLimitsTracker = ko.computed(function() {
                return {
                    removeType: detailLine.removeType(),
                    minQty: detailLine.minQty(),
                    maxQty: detailLine.maxQty(),
                    qtyIncrement: detailLine.qtyIncrement()
                };
            }).extend({throttle: 500});
            detailLine.workerQtyLimitsTracker.subscribe(function (newValue) {
                self.setWorkerQtyLimits(detailLine);
            });

            detailLine.instanceChildren = self.detailLines().filter(function(item) {
                                            return item.instance() == detailLine.instance() && item != detailLine;
                                        }) || [];

            var mainProduct = self.detailLines().filter(function(item) {
                                            return item.instance() == detailLine.instance() && item.removeType() == 'instance';
                                        })[0] || detailLine;

            var mainProductQty = mainProduct.qty();

            detailLine.instanceUnitPrice = ko.observable(self.detailLines().reduce(function(current, item) {
                if(item.instance() == detailLine.instance()) {
                    if(item.parentProductID().trim() != '' && item.removeType() != 'instance') {
                        return current += item.extTotal() / mainProductQty;
                    } else {
                        return current += item.price();
                    }
                } else {
                    return current;
                }
            },0));

            detailLine.instanceUnitPriceDisplay = ko.computed(function(){
                return utils.formatMoney(detailLine.instanceUnitPrice());
            });

            detailLine.instanceExtPrice = ko.observable(self.detailLines().reduce(function(current, item) {
                if(item.instance() == detailLine.instance()) {
                    return current += item.extTotal();
                } else {
                    return current;
                }
            },0));
        });

        self.needToChoosePromos = ko.observable();

        self.paymentMethodSelected = ko.observable(function() {
                return typeof self.paymentMethod.paymentType == 'function';
            }()
        );

        self.termsAgreement = ko.observable(function() {
                return self.legalResponse() == 'agreed';
            }()
        );

        //self.detailLines.sort(detailLineInstanceSort);

        self.shipments.sort(function(left, right) {
            return left.position() == right.position() ? 0 : (left.position() < right.position() ? -1 : 1);
        });

        self.processing = ko.observable(false);
        self.populatingShippingAddresses = ko.observable(false);
        self.availableShippingAddresses = ko.observableArray([]);
        self.newCouponCode = ko.observable("");
        self.newGiftCertificate = ko.observable("");
        if(!self.errorMessages) {
            self.errorMessages = ko.observableArray();
        };
        // self.orderPlaced = ko.observable(false);

        self.orderPlaced = ko.computed(function() {
            return self.completed()
        });

        self.Customer = ko.validatedObservable(self.Customer);
        self.Account = ko.validatedObservable(self.Account);

        self.shippingAddresses = shippingAddresses;

        self.addressTypes = function(){
            var addressTypes = [];
            addressTypes.push({
                label: ofConfig.addressBookLabel,
                global: '0'
            });
            if(ofConfig.useLocalPickup){
                addressTypes.push({
                    label: ofConfig.localPickupLabel,
                    global: '1'
                })
            }
            return addressTypes;
        };

        self.defaultShaKey = function() {
            sShaKey = sDefaultShaKey;
            if (sShaKey == ''){
                sShaKey = self.shippingAddresses()[0].sha_key;
            }
            return sShaKey;
        }
        self.billingSectionValid = ko.computed(function () {
            return self.Customer.isValid() && self.Account.isValid();
        });

        self.toggleShowBillingEdit = function() {
            if(self.showBillingEdit()) { // && newCustomer) {
                var postData = new CreateCustomerPost(self);
                self.postBillingUpdate(postData);
            } else {
                self.showBillingEdit(!self.showBillingEdit());
            }
        };

        self.postBillingUpdate = function(postData) {

            var postUrl = orderInfoPostUrl + '?o_key=' + viewModel.orderKey() + '&origin=bill-ship';
            var dataString;
            var keyCount = 0;

            $.each(postData, function(key, value) {
                keyCount += 1;

                if(keyCount > 1) {
                    dataString += "&"
                }
                dataString += key + "=" + encodeURIComponent(value);
            });

            var postOptions = {
                url: postUrl,
                type: "POST",
                data: dataString,
                success: function(data) {
                    self.showBillingEdit(!self.showBillingEdit());
                },
                error: function() {
                    alert('error posting billing update');
                }
            }

            postInfo(postOptions, '', 'checkout_shipping');
        }

        self.editingBilling = ko.observable(false);
        self.showBillingEdit = ko.computed({
            read: function() {
                if(!self.billingSectionValid()) {
                    self.editingBilling(true);
                }
                return self.editingBilling(); // && !self.billingSectionValid();
            },
            write: function(newValue) {
                if(!newValue && self.billingSectionValid()) {
                    self.editingBilling(false);
                } else {
                    self.editingBilling(true);
                }
            }
        });

        self.moveAllItemsToShipment = function(shipment) {
            self.processing(true);

            var shipmentArray = [];

            var lineMappings = self.detailLines().map(function(map, index, array) {
                return {
                    OrderDetailId : map.orderDetailKey(),
                    QtyToShip: map.qty()
                }
            });

            var shipmentInfo = {
                Key: shipment.key(),
                ShipmentId: shipment.key(),
                Details: []
            };

            self.shipments().forEach(function(otherShipment) {
                if(otherShipment.key() != shipment.key()) {
                    shipmentArray.push({
                        key: otherShipment.key(),
                        ShipmentId: otherShipment.key(),
                        Delete: true
                    });
                }
            });

            shipmentInfo.Details = lineMappings;
            shipmentArray.push(shipmentInfo);

            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)),
                error: function() {
                    alert('error moving all products to shipment');
                },
                complete: function() {
                    self.processing(false);
                }
            }

            postInfo(postOptions, 'updateShipToAddress');

            $('#modal_add_prods[tabindex="-1"]:hidden').remove()
            $('#modal_add_prods').modal('hide');
        };

        self.isOverLineLimit = ko.observable(checkLineLimit(self));

        function checkLineLimit(vm){
            //use the alternate ui (showcart.asp) when over the line limit threshold
            // Don't allow this to happen if using user create shipments since the showcart page doesn't support
            // Split shipping.
            if(oConfig.allowUserCreatedShipments){
                return false;
            }else if (ofConfig.useTooManyLinesRestriction && vm.detailLines().length >= parseInt(ofConfig.tooManyLinesQuantity)){
                return true;
            }else{
                return false;
            }
        }

        self.isMinimumOrderTotalMet = ko.observable(checkOrderTotal(self));
        //moved definition to global scope

        self.shippingComplete = ko.observable(isShippingComplete());

        function isShippingComplete(){
            if ( self.completed() || self.lifecycleStage() == 'cancelled') {
                return true;
            }

            // force step 2 if there are no lines on the order.
            if (self.detailLines().length == 0){
                return false;
            }

            // force step 3 if the lines exceed the limit.
            if (self.isOverLineLimit()){
                return true;
            }

            // force step 2 if any shipments are missing an address.
            _.each(self.shipments(),function(shipment){
                if(!shipment.shipTo().key()){
                    return false;
                }
            });

            if(!self.isMinimumOrderTotalMet()){
                utils.setCookie(self.orderKey() + '-step', '2');
            }

            if(utils.getCookie(self.orderKey()+'-step') == undefined){
                if(ofConfig.defaultShippingSectionOpen){
                    utils.setCookie(self.orderKey() + '-step', '2');
                }else{
                    utils.setCookie(self.orderKey() + '-step', '3');
                }
            }

            if (utils.getCookie(self.orderKey() + '-step') == '2'){
                return false;
            }else{
                return true;
            }
        };

        self.shipmentsComplete = ko.observable(false || self.completed());

        self.shipmentsSectionsValid = ko.computed(function() {
            var result = true;
            self.shipments().forEach(function(shipment) {
                if(!shipment.valid() || (shipment.shipTo && shipment.shipTo().editing())) {
                    result = false;
                }
            });
            return result;
        });

        self.toggleShowShippingEdit = function() {
            self.showShippingEdit(!self.showShippingEdit());
            if(!self.showShippingEdit()) {
                scrollToSection('#checkout_summary');
            }
        };

        self.moveItemToNewShipTo = function(item){
            self.itemShipToMap().push({
                orderDetailKey: item.orderDetailKey,
                instance: ko.observable(item.instance()),
                key: ko.observable(item.orderDetailKey),
                qty: ko.observable(item.qtyIncrement() || 1),
                qtyControlledFrom: ko.observable(item.qtyControlledFrom()),
                minQty: ko.observable(item.minQty()),
                qtyIncrement: ko.observable(item.qtyIncrement()),
                getPrice: item.getPrice,
                suPrice: item.suPrice,
                shaKey: ko.observable(item.shaKey()),
                shipTo: ko.observable({}),
                moveItemToNewShipTo: self.moveItemToNewShipTo,
                removeItemToShipToMap: self.removeItemToShipToMap,
                availableAddresses: shippingAddresses,
                parentProductID: item.parentProductID
            });
            item.qty(item.qty() - (item.qtyIncrement() || 1));
            self.itemShipToMap.notifySubscribers();
        };

        self.currentPackage = ko.observable(function(){
            var item = new Object();
            item.shippingAddressId = ko.observable(sDefaultShaKey);
            item.shipTo = ko.observable()
            item.details = ko.observableArray([]);
            return item;
        }());


        self.toggleItemInCurrentPackage = function(item){
            if(!_.contains(self.currentPackage().details(),item)){
                self.currentPackage().details().push(item)
            }else{
                _.pull(self.currentPackage().details(), item)
            }
            self.currentPackage.notifySubscribers();
        };

        self.isInCurrentPackage = function(item){
            return _.contains(self.currentPackage().details(),item);
        };

        self.removeItemToShipToMap = function(item){
            _.pull(self.itemShipToMap(),item);
            self.itemShipToMap.notifySubscribers();
        };

        self.getTotalQty = function(instance){
            var totalQty = 0;
            var mappings = self.itemsOnOrder();
            if(self.useMultiShipEditUI && self.useMultiShipEditUI()){
                mappings = self.itemShipToMap();
            }
            _.each(mappings, function(map){
                if(map.instance() == instance  && map.qtyControlledFrom() != 1){
                    totalQty += parseFloat(map.qty());
                    //exit after the first item is found so the carrier product qty will display.
                    //or not - added && map.qtyControlledFrom() != 1 to account for config products
                    // qtyControlledFrom is "1" when controlled by the parent
                    //return false;
                }
            });
            return totalQty;
        };

        self.getOrderDetailQty = function(instance){
            var totalQty = 0;
            self.itemsOnOrder().forEach(function(map){
                if(map.instance() == instance && map.qtyControlledFrom() != 1){
                    totalQty += parseFloat(map.qty());
                }
            });
            return totalQty;
        };

        self.setItemShipToMapPrice = function(data){
            self.itemShipToMap().forEach(function(map){
                if(map.instance() == data.instance()){
                    if(self.superUserRestrictMinPrice() & data.superUserMinPrice() != null && data.price() < data.superUserMinPrice()) {
                        data.price(undefined);
                        data.price(data.superUserMinPrice());
                    }
                    map.suPrice = data.price();
                }
            });
        };

        self.setWorkerPriceOverride = function(data){
            var orderDetail = [];

            orderDetail.push({
                orderDetailKey: data.orderDetailKey(),
                PriceCalculationType: 'fixed',
                Price: data.price(),
                PriceBeforeAdjustment: data.price()
            });

            var postOptions = {
                data: "orderDetail=" + encodeURIComponent(JSON.stringify(orderDetail)),
                success: function(data) {
                    $('#cartAdvSettings.collapse').toggleClass('in'); 
                    $('#onOrderAdvBtn').toggleClass('active');
                },
                error: function() {
                    alert('Error saving Unit Price');
                }
            }

            postInfo(postOptions, 'setOrderDetailFields');
        }

        self.setWorkerQtyLimits = function(data) {
            var orderDetail = [];

            orderDetail.push({
                orderDetailKey: data.orderDetailKey(),
                MinQty: data.minQty(),
                MaxQty: data.maxQty(),
                QtyIncrement: data.qtyIncrement(),
                RemoveType: data.removeType()
            });

            var postOptions = {
                data: "orderDetail=" + encodeURIComponent(JSON.stringify(orderDetail)),
                success: function(data) {
                    $('#cartAdvSettings.collapse').toggleClass('in');
                    $('#onOrderAdvBtn').toggleClass('active');
                    toggleLoadingWidget(false);
                },
                error: function() {
                    alert('Error saving qty limits');
                }
            }
            toggleLoadingWidget(true);
            postInfo(postOptions, 'setOrderDetailFields');
        }

        self.resetSuperUserPriceOverride = function(data){
            var orderDetail = [];

           orderDetail.push({
                orderDetailKey: data.orderDetailKey(),
                PriceCalculationType: 'std'
            });

            var postOptions = {
                data: "orderDetail=" + encodeURIComponent(JSON.stringify(orderDetail)),
                success: function(data) {
                },
                error: function() {
                    alert('Error resetting Price Override');
                }
            }

            postInfo(postOptions, 'setOrderDetailFields');
        };

        self.resetSuperUserShippingPrice = function(data){
            var postOptions = {
                url: "payment.asp?o_key=" + viewModel.orderKey() + "&svc_key=" + data.shipViaChoiceKey() + '&ajax=true&pageaction=resetShippingPrice&randomnum=' + new Date().getTime() ,
                success: function(data) {
                },
                error: function() {
                    alert('error resetting shipping price');
                }
            }

            postInfo(postOptions, 'resetSuperUserShippingPrice');
        }

        self.returnToPendingOrders = function() {
            window.location = 'quotes.asp?revert=1';
        }

        self.superUserOrderFormMode = ko.observable(ofConfig.superUserOrderFormMode && ofConfig.isSuperUserSession);

        self.superUserSetShipViaPrice = function(data, event){
            var postOptions = {
                url: 'payment.asp' + '?o_key=' + viewModel.orderKey() + '&svc_key=' + data.shipViaChoiceKey() + '&price=' + event.target.value + '&ajax=true&pageaction=setShippingPrice&randomnum=' + new Date().getTime(),
                success: function(data) {
                },
                error: function() {
                    alert('error resetting shipping price');
                }
            };
            postInfo(postOptions, 'setShippingPrice');
        };

        self.postQtyUpdate = function() {

            var postUrl = 'i_i_add_to_cart.asp' + '?ajax=qtyUpdate&modal=1&o_key=' + viewModel.orderKey();
            var dataString = '';
            var unqString = '';
            var keyCount = 0;

            self.detailLines().forEach(function(detailLine) {
                if(dataString.length) dataString += '&';
                dataString += 'qty_' + detailLine.orderDetailKey() + '=' + detailLine.qty();
                if(unqString.length) unqString +=',';
                unqString += detailLine.orderDetailKey();
            });

            dataString += '&unqs=' + unqString;

            var postOptions = {
                url: postUrl,
                type: "POST",
                data: dataString,
                success: function(data) {
                    //
                },
                error: function() {
                    alert('error updating quantity');
                }
            }

            postInfo(postOptions, '','');
        }

        self.hasMultipleShipToAddresses = function() {
            var shaKeys = [];
            var hasMultipleAddresses = false;
            self.shipments().forEach(function(shipment) {
                var shaKey = shipment.shipTo().key();
                if(shaKeys.indexOf(shaKey)) {
                    shaKeys.push(shaKey);
                }
                if(shaKeys.length > 1) {
                    hasMultipleAddresses = true;
                    return;
                }
            });
            return hasMultipleAddresses;
        };

        self.useMultiShipEditUI = ko.observable(self.hasMultipleShipToAddresses());

        self.allocateShipments = function(moveToNextStep){
            var shipmentArray = [];
            var listOfShaKeys = [];
            var newShipmentKey;
            var orderDetail = [];

            toggleLoadingWidget(true);

            if(viewModel.useMultiShipEditUI()){

                //Get a unique list of shipping address keys
                self.itemShipToMap().forEach(function(item){
                    if ( listOfShaKeys.indexOf( item.shipTo().key() ) == -1 ){
                        listOfShaKeys.push(item.shipTo().key());
                    }
                })

                //Loop the sha_keys to create shipments for each
                var items = self.itemShipToMap();
                var newShipmentCount = 0;
                listOfShaKeys.forEach(function(shaKey){
                    //reuse existing shipment keys if they exist.
                    if( newShipmentCount+1 <= self.shipments().length ){
                        newShipmentKey = self.shipments()[newShipmentCount].key();
                    }else{
                        newShipmentKey = utils.createGuid();
                    }

                    var shipmentInfo = {
                        Key: newShipmentKey,
                        ShipmentId: newShipmentKey,
                        ShippingAddressId: shaKey,
                        Details: []
                    };

                    //Loop the product - ship to mapping records to create shipment details
                    var shipments = items;
                    shipments.forEach(function(shipment){
                        if(shipment.shipTo().key() == shaKey){
                            shipmentInfo.Details.push( {
                                OrderDetailId: shipment.orderDetailKey,
                                QtyToShip: shipment.qty()
                            })
                        }
                    });
                    newShipmentCount++;
                    shipmentArray.push(shipmentInfo);
                });
            }else{
                listOfShaKeys.push(self.shipments()[0].shipTo().key());

                //Single Shipping - reuse the first shipment key
                newShipmentKey = self.shipments()[0].key();
                var shipmentInfo = {
                    Key: newShipmentKey,
                    ShipmentId: newShipmentKey,
                    ShippingAddressId: self.shipments()[0].shipTo().key(),
                    Details: []
                };

                //JB - loop the items on order since we're in single shipment mode.
                viewModel.itemsOnOrder().forEach(function(item){
                    shipmentInfo.Details.push( {
                        OrderDetailId:  item.orderDetailKey(),
                        QtyToShip: item.qty()
                    });
                });
                shipmentArray.push(shipmentInfo);
            }

            //Remove any orphaned shipments from the original data if the user is created shipments
            if(listOfShaKeys.length < self.shipments().length && oConfig.allowUserCreatedShipments){
                var count = 0;
                _.eachRight(self.shipments(), function(oldShipment){
                    if( count + 1 <= (self.shipments().length - listOfShaKeys.length ) ){
                        shipmentArray.push({
                            Key: oldShipment.key(),
                            Delete: true
                        });
                        count++;
                    }
                });
            }

            //Order Detail Field Updates
            var details = self.itemShipToMap()
            _.each(details, function(item){
                var superUserPrice = parseFloat(item.suPrice);
                var getprice = parseFloat(item.getPrice());

                if( isNaN(superUserPrice)){
                    superUserPrice = getprice;
                }

                if(viewModel.superUserOrderFormMode()) {
                    if (getprice != superUserPrice) {
                        //build OD object
                        if(!_.find(orderDetail, {orderDetailKey: item.orderDetailKey}) ){
                            var obj = {
                                orderDetailKey: item.orderDetailKey,
                                Price: superUserPrice,
                                PriceDisplay: getprice,
                                PriceCalculationType: 'fixed'
                            };

                            if(ofConfig.useTradeAdjustmentOnSession){
                                obj.PriceBeforeAdjustment = superUserPrice;
                            }
                            orderDetail.push(obj);
                        }
                    }

                    var detail = _.find(orderDetail, {orderDetailKey: item.orderDetailKey});

                    if(!detail) {
                        detail = {
                            orderDetailKey: item.orderDetailKey
                        }
                        orderDetail.push(detail);
                    }

                    // var newValues = _.find(viewModel.itemsOnOrder(), {orderDetailKey: item.orderDetailKey});

                    var itemOnOrder = viewModel.itemsOnOrder().reduce(function(returnItem, currentItem) {
                        if(currentItem.orderDetailKey() == item.orderDetailKey) {
                            returnItem = currentItem;
                        }
                        return returnItem;
                    })

                    detail.MinQty       = parseFloat(itemOnOrder.minQty ? itemOnOrder.minQty() : 0);
                    detail.MaxQty       = parseFloat(itemOnOrder.maxQty ? itemOnOrder.maxQty() : 0);
                    detail.QtyIncrement = parseFloat(itemOnOrder.qtyIncrement ? itemOnOrder.qtyIncrement() : 1);

                    // TODO: Need to track original removeType value - checking has children for now
                    var defaultRemoveType = itemOnOrder.hasChildProducts() ? 'instance' : 'OD_Key';

                    detail.RemoveType   = itemOnOrder.removeType ? itemOnOrder.removeType() : defaultRemoveType;

                    runHook('allocateShipmentsOrderDetailUpdate', { itemOnOrder: itemOnOrder, detailLine: detail });
                }
                toggleLoadingWidget(false);
            });

            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)) + "&orderDetail=" + encodeURIComponent(JSON.stringify(orderDetail)),
                success: function(){
                    if(ofConfig.bUsePromotions){
                        jQuery.ajax({
                            url: 'payment.asp' + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=checkPromos&randomnum=' + new Date().getTime()
                            , cache: false
                            , type: 'GET'
                            , success: function(data,status,request){
                                if(JSON.parse(data)){
                                    viewModel.processing(true);

                                    //redirect to reward selection page.
                                    //This is not opening in a modal for responsive reasons.
                                    var nextPage = encodeURIComponent('payment.asp?o_key=' + viewModel.orderKey() + (ofConfig.isModal ? '&modal=1' : ''));
                                    document.location = 'promo_reward_selection.asp?quickadd=1&next_page=' + nextPage + '&o_key=' + viewModel.orderKey() + (ofConfig.isModal ? '&modal=1' : '');
                                }
                            }
                            , error: function(data) {
                                console.log('Error checking Promos');
                            }
                            , complete: function(data) {
                            }
                        });
                    }
                },
                error: function() {
                    self.addShipment();
                    autoAllocateItems();
                    alert('error saving product list on shipment');
                }
            }

            postInfo(postOptions, 'updateShipToAddress');
            if(moveToNextStep === undefined) {
                moveToNextStep=true;
            }
            if(self.isOverLineLimit()){
                moveToNextStep = true;
            }
            console.log(self);
            self.shippingComplete(moveToNextStep);
            self.shippingComplete.notifySubscribers();
            if(moveToNextStep) {
                utils.setCookie(self.orderKey() + '-step' , '3');
            }
        };


        self.showShippingEdit = ko.observable(!self.completed());
        self.currentShipment = ko.observable();

        self.toggleMultiShip = function (data, event) {
            event.preventDefault();
            self.useMultiShipEditUI(!self.useMultiShipEditUI());

            self.shippingComplete.notifySubscribers();
        };

        self.toggleOrderPlaced = function (data, event) {
            event.preventDefault();

            var postData = {};

            if(viewModel.paymentMethod.paymentType() === 'cc') {

                var defaultCcnChecked = $('#ccpm_default_ccn_id_selection').is(':checked');

                if(defaultCcnChecked) {
                    postData.setDefaultCcn = 1
                }

                postData.ccn_key =  $('#ccpm_ccn_id').val();
                postData.address =  $('#ccpm_address_input').val();
                postData.city =     $('#ccpm_city_input').val();
                postData.country =  $('#ccpm_country_input').val();
                postData.state =    $('#ccpm_state_dropdown').prop('disabled') ? $('#ccpm_state_text').val() : $('#ccpm_state_dropdown').val();
                postData.zip =      $('#ccpm_zip_input').val();

                //oSavedPaymentMethodsCreditCard.saveBillingAddress();
            }

            var postOptions = {
                data: postData,
                success: function(data){
                    viewModel.updateOrderAccess();
                    var response = JSON.parse(data);
                    if(Object.keys(response[0].Errors).length == 0) {
                        //document.location = 'payment.asp?o_key=' + viewModel.orderKey() + '#checkout_confirmation';
                        scrollToSection('#checkout');
                    }else{
                        scrollToSection('#checkout');
                    }
                },
                error: function(data) {
                    alert('error placing order');
                }
            }


            if ($.active > 0) {
                viewModel.processing(true);
                $( document ).one("ajaxStop", function(){
                    postInfo(postOptions, 'placeOrder');
                });
            }
            else {
                postInfo(postOptions, 'placeOrder');
            }

        };

        self.showItemSelector = function(shipment) {
            shipment.detailsMap([]);
            self.detailLines().forEach(function(detailLine, detailIndex, detailArray) {
                shipment.detailsMap().push(new detailMap(detailLine, shipment, self));
            });

            self.currentShipment(shipment);
            $('#modal_add_prods').modal('show');
        };

        self.addShipment = function() {

            var newShipment = getNewShipment();

            var successFunction;

            if(self.shipments().length === 0) {
                /* EJ - 2016-11-15
                   I feel dirty about this, but it's a quick workaround for an odd issue
                   happening on first load of the payment page for a new order, before the first
                   shipment is added.  The issue presents as a "corrupt" countries array (missing
                   states for first country) and validation issues on Account form.

                   The only difference in code on client (verified with Arraxis Merge) is the orderPayload.
                   The first page load doesn't have shipments or paymethods (empty array and null respectively),
                   whereas the second and all subsequent page loads do.

                   The issue goes away once the first shipment is added, so I'm forcing a reload
                   the first time a shipment is added, which was already happening already
                   on first page load if there were no shipments on the order.

                   The first shipment being added needs to be moved to the ordering object eventually,
                   which will negate the need for this code anyway, so I didn't spend more hours trying
                   to find the root cause.
                */

                // so spinner stays active until location.reload happens
                self.activeAjaxRequestCount(self.activeAjaxRequestCount() + 1);

                successFunction = function() {
                    location.reload();
                }
            } else {
                successFunction = autoAllocateItems;
            }


            var shipmentArray = [];

            var shipmentInfo = {
                Key: newShipment.key(),
                ShipmentId: newShipment.key(),
                Details: []
            };

            shipmentArray.push(shipmentInfo);


            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)),
                error: function() {
                    alert('error setting Shipping Method');
                },
                success: successFunction
            }

            postInfo(postOptions, 'updateShipToAddress', newShipment.key(), self);

        };

        self.deleteShipment = function(shipmentToDelete, e, index) {

            var shipmentArray = [];

            var shipmentInfo = {
                Key: shipmentToDelete.key(),
                Delete: true
            };

            shipmentArray.push(shipmentInfo);

            var postOptions = {
                data: "shipmentJson=" + encodeURIComponent(JSON.stringify(shipmentArray)),
                error: function() {
                    alert('error moving all items to shipment');
                },
                success: autoAllocateItems
            }

            postInfo(postOptions, 'updateShipToAddress', 'checkout_shipping');
        };
        self.setShipTo = function(shipment, shipToAddress) {

            var sha_id = shipToAddress.key();
            var shipmentId = shipment.key();

            var postOptions = {
                data: "shipmentId=" + shipmentId + "&sha_id=" + sha_id,
                success: function(data) {
                    autoAllocateItems();
                    self.shipmentsSectionsValid.notifySubscribers();
                },
                error: function() {
                    alert('error saving shipping address');
                }
            }

            postInfo(postOptions, 'setSha');

            $('#modal_addressbook[tabindex="-1"]:hidden').remove()
            $('#modal_addressbook').modal('hide');
        };

        self.showNewAddressForm = function(shipment) {
            shipment.shipTo(new addressInfo(getNewAddress()));

            $('#modal_addressbook[tabindex="-1"]:hidden').remove()
            $('#modal_addressbook').modal('hide');
        };

        self.showAddAddress = function(shipment){

            $('#modal_add_shipto').modal('show');
        };

        self.shipments().forEach(function(shipment) {

            self.detailLines().forEach(function(detailLine, detailIndex, detailArray) {
                shipment.detailsMap().push(new detailMap(detailLine, shipment, self));
            });
        });

        self.updatePoRequired = function() {
            if(self.paymentMethod && self.paymentMethod.paymentMethodKey() != ''){
            var isReallyRequired = self.paymentMethod.poRequired() && self.paymentMethod.collectPO();
            self.paymentMethod.poRequired(isReallyRequired);
        }
        }

        self.updatePoRequired();

        self.poNumber.extend({
            required: {
                onlyIf: function() {
                    return viewModel && viewModel.paymentMethod.poRequired()
                }
            }
        });

        self.poNumber.subscribe(function(poNumber) {
            postOrderHeaderField("ponumber", poNumber);
        });

        self.comments.subscribe(function(newComments) {
            postOrderHeaderField("comment", newComments);
        });

        self.nickname.subscribe(function(nickname) {
            postOrderHeaderField("nickname", nickname);
        });

        self.isValidDate = function(date){
            //Quick fix to hide invalid expiration.
            //ToDo: update to check for other "invalid" dates.

            // Parse the date parts to integers
            var parts = date.split("-");
            var day = parseInt(parts[2], 10);
            var month = parseInt(parts[1], 10);
            var year = parseInt(parts[0], 10);

            // Check the ranges of month and year
            if(year < 1000 || year > 3000 || month == 0 || month > 12)
                return false;

            var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

            // Adjust for leap years
            if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
                monthLength[1] = 29;

            // Check the range of the day
            return day > 0 && day <= monthLength[month - 1];
        };

        self.getMinimumRecurringOrderDate = function(){
            var today = moment();
            var minimumDate = moment(today).add(1, 'days');
            return moment(minimumDate).format("MM/DD/YYYY");
        }

        self.roRunDate.subscribe(function(roRunDate) {
            postOrderHeaderField("ro_rundate", roRunDate);
        });

        self.roRecCase.subscribe(function(roRecCase) {
            postOrderHeaderField("ro_rec_case", roRecCase);
        });

        self.roRecQty.subscribe(function(roRecQty) {
            postOrderHeaderField("ro_rec_qty", roRecQty);
        });

        self.updateRecurringType = function(data, event){
            newValue = event.target.value;
            sOrderDetailKey = data.orderDetailKey();
            switch(newValue){
                case 'fixed':
                    postOrderDetailFields(sOrderDetailKey, ['ro_recurring_type','ro_skip_next_runs'], ['fixed',0]);
                    break;
                case 'recurring':
                    postOrderDetailFields(sOrderDetailKey, ['ro_recurring_type','ro_skip_next_runs'], ['recurring',0]);
                    break;
                case 'skipnext':
                    postOrderDetailFields(sOrderDetailKey, ['ro_recurring_type','ro_skip_next_runs'], ['recurring',1]);
                    break;
                case 'remove':
                    viewModel.removeProduct(data);
                    break;
            }

        };

        self.getRecurringLabel = function(data){
            var sMessage = '';
            var sAction = data.orderDetail.roRecurringType();
            var sSkipRuns = data.orderDetail.roSkipNextRuns();
            switch(sAction){
                case 'recurring':
                case '':
                    if(sSkipRuns == 0){
                        //recurring
                        sMessage = ofConfig.roRecurringItemLabel;
                    }else{
                        //skip.
                        sMessage = ofConfig.roSkippedItemLabel;
                    }
                    break;
                case 'fixed':
                        sMessage = ofConfig.roOnetimeItemLabel;
                    break;
                case 'disabled':
                        sMessage = ofConfig.roDisabledItemLabel;
                    break;
            }
            return sMessage;
        };
        self.customerComment = ko.observable('');

        self.noteBook = ko.observable();

        self.populateNoteBook = function(){
            var noteBook = {};
            var count = 0;

            noteBook.notes =  ko.observableArray([]);

            if(noteBookPayload.length > 0 ){

                noteBook.nbKey = noteBookPayload[0].nb_key;
                noteBook.id    = noteBookPayload[0].id;
                noteBook.refId = noteBookPayload[0].ref_id;

                _.each(noteBookPayload,function(note){
                    if(note.internal_notes || note.external_notes) {
                        count++;
                        item = {};

                        item.internalNotes    = note.internal_notes;
                        item.externalNotes    = note.external_notes;
                        item.postedByName     = note.c_f_nm + ' ' + note.c_l_nm;
                        item.postedByUsername = note.username;
                        item.createDate       = note.create_date;
                        noteBook.notes.push(ko.observable(item));
                    }
                });
            }

            self.noteBook(noteBook);
        }();

        self.buildOrderHeaderFields = function(aFields) {
            //Available order header fields that can be POSTed using this function
            var orderHeaderFields = {
                "UseMultipleShipments": viewModel.useMultipleShipments(),
                "Nickname" : viewModel.nickname(),
                "QuoteExpirationDate": viewModel.expirationDate()
            };

            var orderHeaderFieldsJson = {};

            //Add only the field(s) that are passed in aFields.
            _.forEach(aFields, function(sField) {
                orderHeaderFieldsJson[sField] = orderHeaderFields[sField];
            });

            self.setOrderHeaderFields(orderHeaderFieldsJson);

        };

        self.setOrderHeaderFields = function(orderHeaderFieldsJson) {

            var postOptions = {
                data: "orderHeaderFields=" + encodeURIComponent(JSON.stringify(orderHeaderFieldsJson)),
                error: function(data) {
                    alert('error setting Order Header fields');
                }
            };

            postInfo(postOptions, 'setOrderHeaderFields');
        };

        if(self.shipments().length === 0) {
            //self.addShipment();
        }

        self.setPaymentMethod = function(paymentMethod) {
            if(paymentMethod.paymentType() != viewModel.paymentMethod.paymentType()){
                var postOptions = {
                    data: "pm_id=" + paymentMethod.paymentMethodKey(),
                    error: function(data) {
                        alert('error setting pm');
                    },
                    success: function() {
                        $('#ccpm_container').removeClass('hide');
                        viewModel.updatePoRequired();
                    }
                }

                postInfo(postOptions, 'setPmId');
            }
        }

        self.ccn_id.subscribe(function(newCCN) {
            if(newCCN !== '') {
                var payload = 'ccn_id=' + newCCN;
                var postOptions = {
                    data: payload,
                    error: function(data) {
                        alert('error setting CCN');
                    }
                }

                postInfo(postOptions, 'setCCN');
            }
        });

        self.SetCouponCode = function(couponCode) {
            var payload = 'couponcode=' + encodeURIComponent(couponCode);
            var postOptions = {
                data: payload,
                error: function(data) {
                    alert('error applying coupon');
                }
            }

            postInfo(postOptions, 'setCoupon');
        }

        self.SetGiftCertificate = function(giftCertCode) {
            var payload = 'giftCertCode=' + encodeURIComponent(giftCertCode);
            var postOptions = {
                data: payload,
                error: function(data) {
                    alert('error applying gift certificate');
                }
            }

            postInfo(postOptions, 'setGiftCertCode');
        };

        self.allItemsAllocated = ko.computed(function() {
            var totalItemCount = self.detailLines().reduce(function(previous, current) {
                return previous + current.qty();
            }, 0);

            var allocatedItemCount = 0;
            self.shipments().forEach(function(shipment) {
                allocatedItemCount += shipment.details().reduce(function(previous, current) {
                    return previous + current.qtyToShip();
                }, 0);
            });

            return totalItemCount === allocatedItemCount;
        });

        self.itemsOnOrder = ko.computed(function() {
            var items = [];
            self.detailLines().forEach(function(detailLine) {
                detailLine.hasChildProducts = ko.observable(function() {
                    return self.detailLines().filter(function(outerLine) {
                        return outerLine.instance() == detailLine.instance()
                                && detailLine.removeType() != 'instance'
                    }).length > 1
                }());

                detailLine.hasParentInCart = ko.observable(function() {
                    return self.detailLines().filter(function(outerLine) {
                        return outerLine.orderDetailKey() != detailLine.orderDetailKey()
                                && outerLine.instance() == detailLine.instance()
                                && detailLine.removeType() == 'instance'
                    }).length > 0
                }());

                detailLine.instanceChildren = self.detailLines().filter(function(item) {
                    return item.instance() == detailLine.instance() && item.removeType() != 'instance' && item.parentProductID().trim() != '' && item != detailLine;
                }) || [];

                var mainProduct = self.detailLines().filter(function(item) {
                                                return item.instance() == detailLine.instance() && item.removeType() == 'instance';
                                            })[0] || detailLine;

                var mainProductQty = mainProduct.qty();

                detailLine.superUserMinPrice = ko.observable(detailLine.commodity[ofConfig.superUserMinPriceProperty]() || 0);

                detailLine.instanceUnitPrice = ko.observable(self.detailLines().reduce(function(current, item) {
                    if(item.instance() == detailLine.instance()) {
                        if(item.parentProductID().trim() != '' && item.removeType() != 'instance') {
                            return current += item.extTotal() / mainProductQty;
                        } else {
                            return current += item.price();
                        }
                    } else {
                        return current;
                    }
                },0));

                detailLine.instanceUnitPriceDisplay = ko.computed(function(){
                    return utils.formatMoney(detailLine.instanceUnitPrice());
                });

                detailLine.instanceExtPrice = ko.observable(self.detailLines().reduce(function(current, item) {
                    if(item.instance() == detailLine.instance()) {
                        return current += item.extTotal();
                    } else {
                        return current;
                    }
                },0));

                detailLine.allocatedQty = ko.observable(function() {
                    var runningTotal = 0;
                    self.shipments().forEach(function(shipment) {
                        shipment.details().forEach(function(shipDetail) {
                            if(shipDetail.orderDetailId() === detailLine.orderDetailKey()) {
                                runningTotal += shipDetail.qtyToShip();
                            }
                        });
                    });
                    return runningTotal;
                }());

                detailLine.minGrossMarginPercent = ko.computed(function() {
                    if(self.superUserRestrictMinPrice() & detailLine.superUserMinPrice() != null)
                    {
                        return ( (detailLine.superUserMinPrice() - detailLine.commodity.cost()) / detailLine.superUserMinPrice() * 100 ).toFixed();
                    } else {
                        return undefined;
                    }
                });

                detailLine.grossMarginPercent = ko.computed({
                    write: function(newVal) {
                        var localGrossMarginPercent = parseInt(detailLine.minGrossMarginPercent() || 0);
                        var val = parseInt(newVal);
                        if(val < localGrossMarginPercent) {
                            val = localGrossMarginPercent;
                        }
                        var marginPercent = val / 100;
                        var markup = marginPercent / (1 - marginPercent);
                        var newPrice = (detailLine.commodity.cost() * (1 + markup)).toFixed(2);
                        detailLine.price(undefined);
                        detailLine.price(newPrice);
                        detailLine.priceCalculationType('fixed');
                    },
                    read: function() {
                        var marginPercent = (detailLine.price() - detailLine.commodity.cost()) / detailLine.price();
                        return (marginPercent * 100).toFixed(0);
                    },
                    deferEvaluation: true
                });

                detailLine.minMarkupPercent = ko.computed(function() {
                    if(self.superUserRestrictMinPrice() & detailLine.superUserMinPrice() != null)
                    {
                        return ( detailLine.superUserMinPrice() / detailLine.commodity.cost() - 1 ).toFixed();
                    } else {
                        return undefined;
                    }
                });

                detailLine.markupPercent = ko.computed({
                    write: function(newVal) {
                        var minMarkupPercent = parseInt(detailLine.minMarkupPercent || 0);
                        var val = parseInt(newVal);
                        if(val < minMarkupPercent) {
                            val = minMarkupPercent;
                        }
                        var markup = val / 100;
                        var newPrice = (detailLine.commodity.cost() * (1 + markup)).toFixed(2);
                        detailLine.price(undefined);
                        detailLine.price(newPrice);
                        detailLine.priceCalculationType('fixed');
                    },
                    read: function() {
                        var markup = (detailLine.price() - detailLine.commodity.cost()) / detailLine.commodity.cost();
                        return (markup * 100).toFixed(0);
                    },
                    deferEvaluation: true
                });

                detailLine.maxDiscountPercent = ko.computed(function() {
                    if(self.superUserRestrictMinPrice() & detailLine.superUserMinPrice() != null)
                    {
                        return (100 * (1 - (detailLine.superUserMinPrice() / detailLine.commodity.retailPrice()))).toFixed();
                    } else {
                        return undefined;
                    }
                });

                detailLine.discountPercent = ko.computed({
                    write: function(newVal) {
                        var maxDiscountPercent = parseInt(detailLine.maxDiscountPercent() || 100);
                        var val = parseInt(newVal);
                        if(val > maxDiscountPercent) {
                            val = maxDiscountPercent;
                        }
                        var discount = val / 100;
                        var newPrice = (detailLine.commodity.retailPrice() * (1 - discount)).toFixed(2);
                        detailLine.price(undefined);
                        detailLine.price(newPrice);
                        detailLine.priceCalculationType('fixed');
                    },
                    read: function() {
                        var discount = 1 - detailLine.price() / detailLine.commodity.retailPrice();
                        return (discount * 100).toFixed(0);
                    },
                    deferEvaluation: true
                });

                detailLine.minGrossMarginAmount = ko.computed(function() {
                    if(self.superUserRestrictMinPrice() & detailLine.superUserMinPrice() != null)
                    {
                        return detailLine.superUserMinPrice() - detailLine.commodity.cost();
                    } else {
                        return undefined;
                    }
                });

                detailLine.grossMarginAmount = ko.computed({
                    write: function(newVal) {
                        var localMminGrossMarginAmount = parseInt(detailLine.minGrossMarginAmount() || 0);
                        var val = parseInt(newVal);
                        if(val < localMminGrossMarginAmount) {
                            val = localMminGrossMarginAmount;
                        }
                        var grossMargin = parseFloat(val);
                        var newPrice = (detailLine.commodity.cost() + grossMargin).toFixed(2);
                        detailLine.price(undefined);
                        detailLine.price(newPrice);
                        detailLine.priceCalculationType('fixed');
                    },
                    read: function() {
                        return (detailLine.price() - detailLine.commodity.cost()).toFixed(2);
                    },
                    deferEvaluation: true
                });

                detailLine.allowDeletes = ko.computed({
                    write: function(val) {
                        // TODO: need to store previous value for removeType (od_key, hide, instance) - checking child prods for now
                        if(val) {
                            detailLine.hasChildProducts() ? detailLine.removeType('instance') : detailLine.removeType('OD_Key');
                        } else {
                            detailLine.removeType('hide');
                        }
                    },
                    read: function() {
                        return !(detailLine.removeType() == 'hide')
                    }
                });

                detailLine.suMinQty = ko.computed({
                    write: function(val) {
                        val = parseFloat(val);
                        if(isNaN(val)) {
                            val = detailLine.minQty();
                        }
                        if(!detailLine.maxQty() == 0 && val > detailLine.maxQty()) {
                            detailLine.minQty(detailLine.maxQty());
                        } else {
                            detailLine.minQty(val);
                        }
                        detailLine.suMaxQty(detailLine.maxQty());
                        detailLine.suMinQty.notifySubscribers();
                    },
                    read: function() {
                        return detailLine.minQty();
                    }
                });

                detailLine.suMaxQty = ko.computed({
                    write: function(val) {
                        var originalValue = detailLine.maxQty();
                        var newValue = parseFloat(val);;

                        if(isNaN(newValue)) {
                            newValue = originalValue;
                        }
                        if(newValue > 0) {
                            if(detailLine.minQty() > 0 && newValue < detailLine.minQty()) {
                                newValue = detailLine.minQty();
                            } else {
                                var diff = (newValue-detailLine.minQty()) % detailLine.qtyIncrement();
                                newValue = newValue - diff;
                                newValue = detailLine.minQty() > 0 && newValue < detailLine.minQty() ? detailLine.minQty() : newValue;
                            }
                        } else {
                            newValue = 0;
                        }

                        // reset maxQty to workaround KO bug that causes
                        // underlying value to be changed, but the UI to
                        // not update if the end value is the same as the
                        // original value
                        /* - not a bug, need to notifySubscribers UI was broken
                        detailLine.maxQty(99);
                        detailLine.maxQty(0);
                        */

                        // set valid newValue
                        detailLine.maxQty(newValue);
                    },
                    read: function() {
                        return detailLine.maxQty();
                    }
                });

                detailLine.suQtyIncrement = ko.computed({
                    write: function(val) {
                        val = parseFloat(val);
                        if(isNaN(val)) {
                            val = detailLine.qtyIncrement();
                        }
                        detailLine.qtyIncrement(val);
                        detailLine.suMaxQty(detailLine.maxQty());
                        detailLine.suQtyIncrement.notifySubscribers();
                    },
                    read: function() {
                        return detailLine.qtyIncrement();
                    }
                });

                detailLine.selectedRoAction = ko.computed(function(){
                    var sAction = detailLine.roRecurringType();
                    var skipNextRuns = detailLine.roSkipNextRuns();
                    if( sAction == '' || sAction == 'recurring'){
                        if( skipNextRuns == 0){
                            sAction = 'recurring';
                        }else{
                            sAction = 'skipnext';
                        }
                    }
                    return sAction;
                });

                items.push(detailLine);
            });

            runHook('ItemsOnOrderArrayBeforeReturn', { detailLines: items });

            return items;
        });
        
        self.detailLines.subscribe(function(){
            self.isMinimumOrderTotalMet(checkOrderTotal(self));
        });
        self.itemsOnOrder.subscribe(function(){
            self.isMinimumOrderTotalMet(checkOrderTotal(self));
        });

        self.itemShipToMap = ko.computed(function(){
            var items = [];
            self.shipments().forEach(function(shipment) {
                oShipTo = shipment.shipTo();

                shipment.details().forEach(function(shipDetail) {
                    var item                   = new Object();
                    item.shaKey                = ko.observable(oShipTo.key());
                    item.key                   = ko.observable(shipDetail.orderDetailId());
                    item.orderDetailKey        = shipDetail.orderDetailId();
                    item.instance              = ko.observable(shipDetail.orderDetail.instance());
                    item.qty                   = ko.observable(shipDetail.qtyToShip());
                    item.qtyControlledFrom     = ko.observable(shipDetail.orderDetail.qtyControlledFrom());
                    item.qtyIncrement          = ko.observable(shipDetail.orderDetail.qtyIncrement());
                    item.getPrice              = shipDetail.orderDetail.price,
                    item.suPrice               = shipDetail.orderDetail.price,
                    item.minQty                = ko.observable(shipDetail.orderDetail.minQty());
                    item.moveItemToNewShipTo   = self.moveItemToNewShipTo;
                    item.removeItemToShipToMap = self.removeItemToShipToMap;
                    item.availableAddresses    = shippingAddresses;
                    item.shipTo                = ko.observable({});
                    item.parentProductID       = shipDetail.orderDetail.parentProductID();
                    item.availableAddresses().forEach(function(address,index){
                        if( address.key() == oShipTo.key()){
                            item.shipTo(address);
                        }
                    });

                    if(shipDetail.orderDetail.instanceChildren.length > 0){
                        item.shipTo.subscribe(function(newValue) {
                            items.forEach(function(map) {
                                if(map.instance() == item.instance() && map.shipTo().key() != item.shipTo().key()) {
                                    map.shipTo(item.shipTo());
                                }
                            })
                        });
                    }

                    items.push(item);
                })
            });

            return items;
        });
        
        _.each(self.itemShipToMap(), function(item){
            item.qty.subscribe(function () { 
                self.isMinimumOrderTotalMet(checkOrderTotal(self));
            });   
        });

        self.selectedOrderActionRefId = ko.observable(
            function(){
                if(self.orderActions().length > 0 ){
                    return self.orderActions()[0].refID();
                }else{
                    return '';
                }
            }()
        );

        self.selectedOrderAction = ko.computed(
            function(){
                var action = _.find(self.orderActions(), function(action){
                    if( action.refID() == self.selectedOrderActionRefId() ){
                        return action;
                    }
                });
                if(action && action.refID()){
                    return action;
                }else if(self.orderActions().length > 0 ){
                    return self.orderActions()[0];
                }else{
                    return {
                        showPaymentMethods: ko.observable(true),
                        showRecurringOrderSettings: ko.observable(false)
                    };
                }
            }
        );

        self.showOrderActionButton = function(data, parent) {
            //override this function for custom logic to show custom buttons
            var sSelectedRefId = self.selectedOrderAction() && self.selectedOrderActionRefId();
            var bShow = data.showButton() && (data.refID() == sSelectedRefId || parent.orderActions().length == 1);

            return bShow;
        };

        self.getAddressFinderId = function(id, data, parent){
            selector = id + '_' + parent.orderDetailKey + '_' + ($.isEmptyObject(data) ? 0 : data.key());
            return selector;
        };

       self.selectedLifecycleStage = ko.computed(function(){
            var stage = _.find(self.lifecycleStages(), function(stage){
                if( stage.refID() == self.lifecycleStage() ){
                    return stage;
                }
            });
            if(stage){
                return stage;
            }else{
                return {
                    alwaysShowMessage: ko.observable(false),
                    confirmationMessage: ko.observable('')
                };
            }
       });

        if(self.lifecycleStage() == 'cancelled'){
            self.completed(true);
        }

        self.showConfirmationMessage = ko.observable(function(){
            return (self.completed() || self.lifecycleStage() == 'pending' || self.lifecycleStage() == 'cancelled' || self.selectedLifecycleStage().alwaysShowMessage());
        }())

        self.allowAccountEdits         = ko.observable(self.allowAccountEdits() && ofConfig.AllowAccountEdits);
        self.allowShaEdits             = ko.observable(self.allowShaEdits() && ofConfig.AllowShippingEdits);
        self.allowWarehouseSelection   = ko.observable(ofConfig.allowWarehouseSelection );
        self.superUserRestrictMinPrice = ko.observable(ofConfig.superUserRestrictMinPrice);

        self.postOrderToGoogleAnalytics  = function() {
            if (self.completed() && self.tracked() != '1' ) {
                if(ofConfig.t_gtm) {
                    try {
                        var productsOrdered = [];
                        var transactionProducts = [];

                        for(var i = 0; i < self.detailLines().length; i++) {
                            var line = self.detailLines()[i];

                            productsOrdered.push({
                                'orderNumber': self.orderNumber(),
                                'name': self.customer.firstName() + ' ' + self.customer.lastName(),
                                'sku': line.sku(),
                                'category': line.searchfield1(),
                                'brand': line.searchfield5(),
                                'unitPrice': line.price(),
                                'quantityOrdered': line.qty()
                            });

                            // id is used for Enhanced Ecommerce
                            // sku is used for Google Analytics (non-EE)
                            transactionProducts.push({
                                'id': line.sku(),
                                'sku': line.sku(),
                                'name': line.name(),
                                'category': line.searchfield1(),
                                'price': line.price(),
                                'quantity': line.qty()
                            });
                        }

                        window.dataLayer.push({ 'pageType' : 'confirmation' });
                        window.dataLayer.push({ 'orderNumber' : self.orderNumber() });
                        window.dataLayer.push({ 'storeName' : ofConfig.t_tracking_company });
                        window.dataLayer.push({ 'productTotal' : self.productTotal() });
                        window.dataLayer.push({ 'shippingTotal' : self.shippingTotal() });
                        window.dataLayer.push({ 'taxTotal' : self.taxTotal() });
                        window.dataLayer.push({ 'orderTotal' : self.orderTotal() });
                        window.dataLayer.push({ 'customerName' : self.customer.firstName() + ' ' + self.customer.lastName() });
                        window.dataLayer.push({ 'customerFirstname' : self.customer.firstName() });
                        window.dataLayer.push({ 'customerLastName' : self.customer.lastName() });
                        window.dataLayer.push({ 'customerCity' : self.account.city() });
                        window.dataLayer.push({ 'customerState' : self.account.state() });
                        window.dataLayer.push({ 'customerCountry' : self.account.country() });
                        window.dataLayer.push({ 'customerEmail' : self.customer.email() });
                        window.dataLayer.push({ 'couponCode' : self.couponCode() });
                        window.dataLayer.push({ 'couponAmount' : self.couponDiscountTotals.totalDiscount() });
                        window.dataLayer.push({ 'paymentMethod' : self.paymentMethod.name() });
                        window.dataLayer.push({ 'sessionIP' : ofConfig.SessionIP });

                        // For Google Analytics (non-EE)
                        window.dataLayer.push({
                            'transactionId': self.orderNumber(),
                            'transactionAffiliation': ofConfig.t_tracking_company,
                            'transactionTotal': self.orderTotal(),
                            'transactionTax': self.taxTotal(),
                            'transactionShipping': self.shippingTotal(),
                            'transactionProducts': transactionProducts
                        });

                        // For Enhanced Ecommerce
                        window.dataLayer.push({
                            'event': ofConfig.t_gtm_transaction_event_name,
                            'ecommerce': {
                                'purchase': {
                                    'actionField': {
                                        'id': self.orderNumber(),
                                        'affiliation': ofConfig.t_tracking_company,
                                        'revenue': self.orderTotal(),
                                        'tax': self.taxTotal(),
                                        'shipping': self.shippingTotal(),
                                        'coupon': self.couponCode()
                                    },
                                    'products': transactionProducts
                                }
                            }
                        });

                        window.dataLayer.push({ 'productsOrdered' : productsOrdered });

                    } catch(err) {}

                }

                switch(ofConfig.t_analytics) {
                    case 'ga':
                        // do old analytics

                        try {

                            // add transaction details
                            var _gaq = _gaq || [];
                            _gaq.push(['_addTrans',
                                self.orderNumber(),      // Order ID
                                self.customer.firstName() + ' ' + self.customer.lastName(),  // Customer
                                self.orderTotal(),       // Total
                                self.taxTotal(),         // Tax
                                self.shippingTotal(),    // Shipping
                                self.account.city(),     // City
                                self.account.state(),    // State
                                self.account.country()   // Country
                            ]);

                            for(var i = 0; i < self.detailLines().length; i++) {
                                var line = self.detailLines()[i];

                                // add order item details
                                _gaq.push(['_addItem',
                                    self.orderNumber,    // Order ID
                                    line.sku(),          // SKU
                                    line.name(),         // Product Name
                                    line.searchfield1(), // Category
                                    line.price(),        // Price
                                    line.qty()           // Quantity
                                ]);
                            }

                            _gaq.push(['_trackTrans']);

                        } catch(err) {}

                        break;
                    case 'ua':
                        // do new universal analytics

                        try {

                            // add transaction details (Universal)
                            ga('require', 'ecommerce'); // Load the ecommerce plug-in.

                            ga('ecommerce:addTransaction', {
                                'id':self.orderNumber(),                   // Transaction ID. Required
                                'affiliation': ofConfig.t_tracking_company, // Affiliation or store name
                                'revenue':self.orderTotal(),               // Grand Total
                                'shipping':self.shippingTotal(),           // Shipping
                                'tax':self.taxTotal()                      // Tax
                            });

                            for(var i = 0; i < self.detailLines().length; i++) {
                                var line = self.detailLines()[i];

                                // add order item details (Universal)
                                ga('ecommerce:addItem', {
                                    'id': self.orderNumber(),         // Transaction ID. Required.
                                    'name': line.name(),              // Product name. Required.
                                    'sku': line.sku(),                // SKU/code.
                                    'category': line.searchfield1(),  // Category or variation.
                                    'price': line.price(),            // Unit price.
                                    'quantity': line.qty()            // Quantity.
                                });
                            }

                            ga('ecommerce:send');



                        } catch(err) {}

                        break;
                    case 'uae':
                        // do new universal analytics with enhanced ecommerce

                        try {


                            for(var i = 0; i < self.detailLines().length; i++) {
                                var line = self.detailLines()[i];

                                ga('ec:addProduct', {                // Provide product details in an productFieldObject.
                                    'id': line.sku(),                // Product ID (string).
                                    'name': line.name(),             // Product name (string).
                                    'category': line.searchfield1(), // Product category (string).
                                    'brand': line.searchfield5(),    // Product brand (string).
                                    'variant': '',                   // Product variant (string).
                                    'price': line.price(),           // Product price (currency).
                                    'coupon': self.couponCode(),     // Product coupon (string).
                                    'quantity': line.qty()           // Product quantity (number).
                                });
                            }

                            ga('ec:setAction', 'purchase', {               // Transaction details are provided in an actionFieldObject.
                                'id': self.orderNumber(),                  // (Required) Transaction id (string).
                                'affiliation': ofConfig.t_tracking_company, // Affiliation (string).
                                'revenue': self.orderTotal(),              // Revenue (currency).
                                'tax': self.taxTotal(),                    // Tax (currency).
                                'shipping': self.shippingTotal(),          // Shipping (currency).
                                'coupon': self.couponCode()                // Transaction coupon (string).
                            });

                            ga('send', 'pageview');

                        } catch(err) {}

                        break;
                    default:
                        break;
                }
            }
        }

        self.updateOrderAccess = function(){
            if( self.completed() || self.lifecycleStage() == 'cancelled'){
                self.allowAccountEdits( false );
                self.allowContactEdits( false );
                self.allowShaEdits( false );
                self.allowWarehouseSelection( false );
                self.allowProductAdds( false );
                self.allowShipViaEdits( false );
                self.allowPayMethodEdits( false );
                self.allowCcnChanges( false );
                self.allowPlaceOrder( false );
                self.allowQtyControls( false );
            }else if(self.superUserOrderFormMode()){
                self.allowAccountEdits(self.allowAccountEdits() && ofConfig.superUserAllowAccountEdits);
                self.allowContactEdits(self.allowContactEdits() && ofConfig.superUserAllowContactEdits);
                self.allowShaEdits(self.allowShaEdits() && ofConfig.superUserAllowShaEdits);
                self.allowWarehouseSelection(ofConfig.allowWarehouseSelection || ofConfig.superUserAllowWarehouseSelection );
                self.allowProductAdds(true);
                self.allowShipViaEdits(self.allowShipViaEdits() || ofConfig.superUserAllowShipViaEdits);
                self.allowPayMethodEdits(self.allowPayMethodEdits() || ofConfig.superUserAllowPayMethodEdits);
                self.allowCcnChanges(self.allowCcnChanges() || ofConfig.superUserAllowCcnChanges);
                self.allowPlaceOrder(self.allowPlaceOrder() || ofConfig.superUserAllowPlaceOrder);
                self.allowQtyControls( ofConfig.superUserAllowQtyControls );
            }else{
                self.allowAccountEdits( self.allowAccountEdits() && ofConfig.AllowAccountEdits );
                self.allowContactEdits( self.allowContactEdits() && ofConfig.allowContactEdits );
                self.allowShaEdits( self.allowShaEdits() && ofConfig.AllowShippingEdits );
                self.allowWarehouseSelection( ofConfig.allowWarehouseSelection );
                self.allowProductAdds( self.allowProductAdds() );
                self.allowQtyControls( false );
            }

            var inFocusTemplate = true;
            if(self.completed() && inFocusTemplate) {
                $('#focusHeaderExit').removeAttr("data-toggle");
                $('#focusHeaderExit').attr("href" , "https://www.descovac.com");
            }
        };

        self.updateOrderAccess();

        self.continueProcessingForm = function(data) {
            var bContinueProcessing = true;

            //TODO: Get this validation working using the validation plugin.
            //This is a quick 'fix' to prevent the page from processing the order action
            //when the shipping account is required but not set.
            _.each(viewModel.shipments(), function(shipment, index){
                if(ofConfig.CollectShipAccount && shipment.selectedShipVia.collectShippingAccount() && !shipment.selectedShipVia.shippingAccountId.isValid() ){
                    //form is not valid
                    scrollToSection('#shipping-account-info' + (index+1));
                    //jQuery('#shipping-account-select' + shipmentCount).addClass('control-group error');
                    bContinueProcessing = false;
                    return false;
                }
            });

            if(viewModel.selectedOrderAction != undefined && viewModel.selectedOrderAction().showPaymentMethods()) {
                //TODO: Do CC validation in a less janky way
                //This is a quick 'fix' to prevent the page from processing the order action
                //when the CC billing address info is invalid
                //Currently doesn't provide any messaging
                if(viewModel.paymentMethod.paymentType() === 'cc' && data.placeOrderActionType() == 'place') {

                    if(   ($('#ccpm_cvv2_code').is(':visible') && !$('#ccpm_cvv2_code').val())
                        || !$('#ccpm_address_input').val()
                        || !$('#ccpm_city_input').val()
                        || !$('#ccpm_country_input').val()
                        || !($('#ccpm_state_dropdown').prop('disabled') ? $('#ccpm_state_text').val() : $('#ccpm_state_dropdown').val())
                        || !$('#ccpm_zip_input').val()
                    ) {
                        // CC billing address form is not valid
                        $("#ccpm_card_billing_address_section").addClass("in").css({ "height" : "auto" });
                        $("#ccpm_card_billing_address_section :input:visible:not('button')")
                            .filter(function() { return $(this).val() == ""; })
                            .trigger("change");
                        $("#ccpm_cvv2_code").trigger("change");
                        scrollToSection('#payment_methods');
                        bContinueProcessing = false;
                        return false;
                    }
                }
                //Pretty much just following the same pattern as cc validation.
                //Need to stop the page from processing if the poNum is required and not entered.
                if(viewModel.paymentMethod.collectPO() && viewModel.paymentMethod.poRequired() && !$('#ponumber').val()) {
                    jQuery('#controlgroup_invoice_ponumber').addClass('control-group error');
                    scrollToSection('#payment_methods');
                    bContinueProcessing = false;
                    return false;
                }
            }

            //hook for adding custom validation checks
            var config = {
                continueProcessing: bContinueProcessing
            };
            runHook('cartTemplatesContinueProcessing', config);
            return config.continueProcessing;
        };

        self.processOrderAction = function(data){
            var bContinueProcessing = self.continueProcessingForm(data);

            if(bContinueProcessing){

                if( data.showComments() && viewModel.customerComment() != '' ){
                    self.saveCustomerComment();
                }

                if(data.showRecurringOrderSettings()){
                    self.saveRecurringOrderSettings();
                }

                var postData = {};
                var bPost = true;
                postData.orderActionKey = data.orderActionKey();

                if(viewModel.paymentMethod.paymentType() === 'cc' && (viewModel.selectedOrderAction != undefined && viewModel.selectedOrderAction().showPaymentMethods())) {

                    var defaultCcnChecked = $('#ccpm_default_ccn_id_selection').is(':checked');

                    if(defaultCcnChecked) {
                        postData.setDefaultCcn = 1
                    }

                    postData.ccn_key =  $('#ccpm_ccn_id').val();
                    postData.cvv     =  $('#ccpm_cvv2_code').val();
                    postData.address =  $('#ccpm_address_input').val();
                    postData.city    =  $('#ccpm_city_input').val();
                    postData.country =  $('#ccpm_country_input').val();
                    postData.state   =  $('#ccpm_state_dropdown').prop('disabled') ? $('#ccpm_state_text').val() : $('#ccpm_state_dropdown').val();
                    postData.zip     =  $('#ccpm_zip_input').val();
                    postData.tsm_id  =  viewModel.paymentMethod.merchantId();

                }else if(viewModel.paymentMethod.paymentType() === 'paypal' && data.placeOrderActionType() == 'place'){
                    bPost = false;
                    postPayPal(data.orderActionKey());
                }

                var postOptions = {
                    data: postData,
                    error: function() {
                        alert('Error Processing Order Action');
                    }
                }

                var scrollToId = 'checkout';

                runHook('cartTemplateOverridePostOptions', { postOptions: postOptions, data: data, self: self });

                if (bPost){
                    if ($.active > 0) {
                        viewModel.processing(true);
                        $( document ).one("ajaxStop", function(){
                            postInfo(postOptions, 'processOrderAction', scrollToId);
                        });
                    }
                    else {
                        postInfo(postOptions, 'processOrderAction', scrollToId);
                    }
                }
            }
        };

        self.saveRecurringOrderSettings = function(){
            var postData = [];
            var order = [];

            var orderKey = viewModel.orderKey();

            var roRunDate = viewModel.roRunDate();
            var roRecCase = viewModel.roRecCase();
            var roRecQty  = viewModel.roRecQty();
            //This has to be set before processOrderAction or the OO will "unset" the values above when the record_type isn't set to recurring.
            var recordType = "recurring";


            order.push({
                "o_key" : orderKey,
                "ro_rundate": roRunDate,
                "ro_rec_case": roRecCase,
                "ro_rec_qty": roRecQty,
                "record_type": recordType
            });

            postData =
            {
                "Tables": [
                    {
                        "TableName"           : "orders",
                        "TableKeyField"       : "o_key",
                        "UserKeyField"        : "o_key",
                        "UserKeyIsPrimaryKey" : "True",
                        "Data"                : order
                    }
                ]
            }

            jQuery.ajax({
                url: 'payment.asp' + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=postLogicJSON&randomnum=' + new Date().getTime()
                , data: "postLogicJSON=" + encodeURIComponent(JSON.stringify(postData))
                , cache: false
                , type: 'POST'
                , dataType: 'json'
                , success: function(data,status,request){
                    viewModel.roRunDate(roRunDate);
                    viewModel.roRecCase(roRecCase);
                    viewModel.roRecQty(roRecQty);
                }
                , error: function(data) {
                    alert('Error posting Recurring Order Settings');
                }
                , complete: function(data) {
                }
            });
        };

        self.saveCustomerComment = function(){

            var postData = [];
            var noteBook = [];
            var note = [];
            var order = [];

            var notebookTableName = ofConfig.useNewNotebooks ? 'Notebooks' : 'note_books';
            var notebookKeyField = ofConfig.useNewNotebooks ? 'Id' : 'nb_key';
            var notebookRefField = ofConfig.useNewNotebooks ? 'ReferenceId' : 'ref_id';
            var ref_id = self.noteBook().refId || generateRefId();
            var n_key = utils.createGuid();

            if(ofConfig.useNewNotebooks) {
                var notebookId = parseInt(self.noteBook().id || 0) || ref_id;

                noteBook.push({
                    "Id": notebookId,
                    "ReferenceId": notebookId
                });

                order.push({
                    "o_key" : self.orderKey(),
                    "NotebookId": notebookId
                });

                note.push({
                    "n_key"          : n_key,
                    "ref_id"         : generateRefId(),
                    "NotebookId"     : notebookId,
                    "a_id"           : ofConfig.superUserAccountKey || ofConfig.AccountKey,
                    "c_id"           : ofConfig.superUserCustomerKey || ofConfig.CustomerKey,
                    "create_date"    : new Date().toDateString(),
                    "external_notes" : self.customerComment()
                });

            } else {
                var nb_key = self.noteBook().nbKey || utils.createGuid();

                order.push({
                    "o_key" : self.orderKey(),
                    "nb_id" : nb_key
                });

                noteBook.push({
                    "nb_key"        : nb_key,
                    "ref_id"        : ref_id,
                    "create_date"   : new Date().toDateString(),
                    "book_type"     : 'order',
                    "resource_c_id" : ofConfig.superUserCustomerKey || ofConfig.CustomerKey
                });

                note.push({
                    "n_key"          : n_key,
                    "ref_id"         : generateRefId(),
                    "nb_id"          : nb_key,
                    "a_id"           : ofConfig.superUserAccountKey || ofConfig.AccountKey,
                    "c_id"           : ofConfig.superUserCustomerKey || ofConfig.CustomerKey,
                    "create_date"    : new Date().toDateString(),
                    "external_notes" : self.customerComment()
                });
            }

            postData =
            {
                "Tables": [
                    {
                        "TableName"           : notebookTableName,
                        "TableKeyField"       : notebookKeyField,
                        "UserKeyField"        : notebookRefField,
                        "UserKeyIsPrimaryKey" : "False",
                        "Data"                : noteBook
                    },
                    {
                        "TableName"           : "orders",
                        "TableKeyField"       : "o_key",
                        "UserKeyField"        : "o_key",
                        "UserKeyIsPrimaryKey" : "True",
                        "Data"                : order
                    },
                    {
                        "TableName"           : "notes",
                        "TableKeyField"       : "n_key",
                        "UserKeyField"        : "ref_id",
                        "UserKeyIsPrimaryKey" : "False",
                        "Data"                : note
                    }
                ]
            }

            jQuery.ajax({
                url: 'payment.asp' + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=postLogicJSON&randomnum=' + new Date().getTime()
                , data: "postLogicJSON=" + encodeURIComponent(JSON.stringify(postData))
                , cache: false
                , type: 'POST'
                , dataType: 'json'
                , success: function(data,status,request){
                    viewModel.updateNoteBook(note[0]);
                    viewModel.customerComment('');
                    return data.PostedKeys[notebookTableName][0];
                }
                , error: function(data) {
                    alert('Error posting Comment');
                }
                , complete: function(data) {
                }
            });
        };

        self.updateNoteBook = function(note) {
            var item = {};

            item.internalNotes    = note.internal_notes;
            item.externalNotes    = note.external_notes;
            item.postedByName     = ofConfig.superUserName || ofConfig.customerName;
            item.postedByUsername = ofConfig.superUserUsername || ofConfig.customerUsername;
            item.createDate       = note.create_date;

            viewModel.noteBook().notes.unshift(item);
        };

        self.genericModalComplete = function(data){
            var postOptions = {
                success: function(data) {
                },
                error: function() {
                    alert('error reloading shipping accounts');
                }
            }

            postInfo(postOptions, 'getOrderJSON');
            return true;
        };

        self.removeProduct = function(data){
            if(ofConfig.bUseRemoveMsg){
                var bRemove = confirm(ofConfig.sRemoveProductMessage);
            }
            else{
                bRemove = true;
            }

            if (bRemove) {
                viewModel.processing(true);
                var itemToDelete = data;
                var removeType = itemToDelete.removeType();
                var orderDetailKey = itemToDelete.orderDetailKey();
                var instance = itemToDelete.instance();
                var sRemoveUrl = 'i_i_add_to_cart.asp?type=remove&unq=' + orderDetailKey + '&o_id=' + data.orderID() + '&modal=1';

                jQuery.ajax({
                    url: sRemoveUrl
                    , cache: false
                    , type: 'GET'
                    , success: function(data,status,request){
                        var newArray = _.remove(viewModel.detailLines(), function(line){
                            return !(line.instance() == instance);
                        });
                        viewModel.detailLines(newArray);
                        viewModel.processing(false);
                    }
                    , error: function(data) {
                        alert('Error removing item.');
                        viewModel.processing(false);
                    }
                    , complete: function(data) {
                        viewModel.processing(false);
                    }
                });
            }
        };

        self.resetProductEdits = function(editingDetailLine) {
            viewModel.detailLines()
                .forEach(function(detailLine) {
                    detailLine.editing(false);
                });
            viewModel.shipments()
                .forEach(function(shipment) {
                    shipment.details()
                        .forEach(function(detail) {
                            detail.orderDetail.editing(false);
                        });
                });
            viewModel.mainProduct(undefined);
            utils.removeActiveQuote();

            if(editingDetailLine) {
                editingDetailLine.editing(true);
            }
        }

        self.editProduct = function(data) {
            self.resetProductEdits();
            var detailLine = data;
            if(data.orderDetail) {
                detailLine = data.orderDetail;
            }
            var detailKey  = detailLine.orderDetailKey();
            var productKey = detailLine.parentProductID().trim() || detailLine.productID();

            var productInfo = {
                productKey: detailLine.productID(),
                productSku: detailLine.sku(),
                parentChildType: detailLine.commodity.parentChildType() || '',
                parentProductId: detailLine.parentProductID().trim()
            }

            self.loadProductForEdit(productInfo, detailKey, detailLine)
        }

        self.cancelEditProduct = function(data) {
            self.resetProductEdits();
        }

        self.loadProductForEdit = function(productInfo, detailLineId, detailLine) {
            viewModel.processing(true);
            self.resetProductEdits(detailLine);

            var postOptions = {
                success: function(data) {
                    var response = JSON.parse(data);
                    var product = response.product;
                    switch(product.childDisplayType) {
                        case 'input-qty':
                        case 'exploded-view':
                        case 'matrix-all':
                        case 'add-row':
                            product.childDisplayType = 'droplist'
                            break;
                        default:
                    };

                    if(!!response.childSkuMatch) {
                        oConfig.childSkuMatch = response.childSkuMatch;
                    }

                    utils.setActiveQuote(viewModel.orderKey());
                    viewModel.mainProduct(ko.mapping.fromJS(product, productMapping));
                    viewModel.addToSavedCart();
                },
                url: orderInfoPostUrl + '?o_key=' + self.orderKey() + '&p_key=' + (productInfo.parentProductId || productInfo.productKey) + '&od_key=' + detailLineId + '&sku=' + productInfo.productSku + '&ajax=true&pageaction=getProductData&modal=1',
                type: 'GET',
                error: function() {
                    alert('Error loading product data!');
                }
            }

            $.ajax({
                url      : postOptions.url,
                success  : postOptions.success,
                type     : postOptions.type,
                error    : postOptions.error,
                complete : function() { viewModel.processing(false); }
            });
        }

        self.productFinderSearchTerm = ko.observable('');

        self.productFinderUrl = ko.computed(function() {
            var searchTerm = self.productFinderSearchTerm();
            var search2 = ofConfig.productFinderSearchstring.replace(/__query__/g, searchTerm);
            return 'bulk_atc.asp?find_product=1&s=' + searchTerm + '&search2=' + search2;
        });

        self.showRemoveLink = function(data){
            if(!ofConfig.allowProductRemoves){
                return false;
            }

            var instanceKeys = viewModel.detailLines().reduce(function(instanceKeys, line) {
                if(instanceKeys.indexOf(line.instance()) == -1) {
                    instanceKeys.push(line.instance());
                }
                return instanceKeys;
            }, []);

            if(!ofConfig.allowRemoveLastItem && instanceKeys.length < 2) {
                return false;
            }

            if(data.removeType() == 'hide'){
                return false;
            }
            return true;
        };

        self.breadcrumbMarkup = ko.computed(function(){
            if(self.recordType() == 'cart') {
                return ofConfig.sPaymentHeaderLabel;
            } else if (self.recordType() == 'recurring') {
                return '<ul class="breadcrumb breadcrumb-cart"><li class="active">Recurring Order # ' + self.referenceId();
            } else {
                return '<ul class="breadcrumb breadcrumb-cart"><li class="active">' + ofConfig.SavedCartLabel + '# ' + self.referenceId() + '</li><li><i class="icon-ok"></i> Order Placed</li></ul>'
            }
        });

        self.expirationDate = ko.observable(function() {
            return new moment(self.quoteExpirationDate()).format("MM/DD/YYYY");
        }());

        self.expirationDate.subscribe(function(newExpirationDate) {
            self.buildOrderHeaderFields(["QuoteExpirationDate"]);
        });

        // Used for Google Analytics and Tag Manager, etc
         /*
        Runs when order is completed but payment page doesn't re-fresh
        - Example user pays with a credit card or bill me payment option
        */
        self.orderPlaced.subscribe(function() {
            self.postOrderToGoogleAnalytics();
            postOrderHeaderField('tracked', '1');
            self.tracked('1');
        });
        /*
        Runs when order is completed and the payment page re-freshes
        - Happens when user checks out with paypal and is re-directed back to payment page
        - with a completed order
        */
        if (self.completed() && self.tracked() != '1' ) {
            self.postOrderToGoogleAnalytics();
            postOrderHeaderField('tracked', '1');
            self.tracked('1');
         }

        addTimer("orderModelBottom");
        runHook('orderModelBottom', { self: self, order: self });
        addTimer("end order mapping");
    } // end of var Order = blah blah blah 

    function processShippingAddresses(data){
        var addressArray = data;
        var newshippingAddresses;
        if(Array.isArray(addressArray)) {
            newshippingAddresses = addressArray.map(function(item, index, arr) {
                address = new addressInfo();
                address.name(item.sha_nm);
                address.company(item.s_company || '');
                address.attention(item.attention || '');
                address.address1(item.s_add1 || '');
                address.address2(item.s_add2 || '');
                address.address3(item.s_add3 || '');
                address.address4(item.s_add4 || '');
                address.address5(item.s_add5 || '');
                address.country(item.s_country || 'USA');
                address.city(item.s_city || '');
                address.state(item.s_state || undefined);
                address.zipCode(item.s_zip || '');
                address.phone(item.s_phone || '');
                address.email(item.em || '');
                address.global(item.globaladdress || '0');
                address.opt1(item.s_opt1 || '');
                address.opt2(item.s_opt2 || '');
                address.opt3(item.s_opt3 || '');
                address.opt4(item.s_opt4 || '');
                address.opt5(item.s_opt5 || '');
                address.key(item.sha_key);
                address.editing(false);
                return address;
            });
        }

        /*
        Changing to an observable array (was an obeservable object that contained an array)
        */
        var observableAryOfSHA = ko.observableArray([]);
        newshippingAddresses.forEach(function(obj){
            observableAryOfSHA.push(ko.mapping.fromJS(obj, shippingAddressMappingOptions));
        });

        return observableAryOfSHA; //ko.mapping.fromJS(newshippingAddresses, shippingAddressMappingOptions);
    }

    var orderMapping = {
        create: function(options) {
            var newOrder = new Order(options.data);

            return newOrder; // new Order(options.data);
        }
    }

    //Build Json for order header field and optional additional tables.
    //Pass the Json to the Post Logic Ajax function
    var postOrderHeaderField = function(sOrderField, viewModelProperty, extraTablesJson, callbacks) {
        console.log(sOrderField);
        var postData = {};
        var order = [];

        order = [{
            "o_key" : ofConfig.OKey
        }];

        order[0][sOrderField] = viewModelProperty;

        postData =
        {
            "Tables": [
                {
                    "TableName"           : "orders",
                    "TableKeyField"       : "o_key",
                    "UserKeyField"        : "o_key",
                    "UserKeyIsPrimaryKey" : "True",
                    "Data"                : order
                }
            ]
        };

        //Optional additional tables on the order
        if (!!extraTablesJson) {
            postData["Tables"].push(extraTablesJson);
        }

        self.postLogicJsonAjax(postData, false, callbacks);
    };

    var postOrderDetailFields = function(sOrderDetailKey, sDetailFields, viewModelProperties, callbacks) {

        var postData = {};
        var orderLine = [];

        orderLines = [{
            "od_key" : sOrderDetailKey
        }];

        for(var i = 0; i < sDetailFields.length; i++){
            orderLines[0][sDetailFields[i]] = viewModelProperties[i];
        }

        postData =
        {
            "Tables": [
                {
                    "TableName"           : "order_detail",
                    "TableKeyField"       : "od_key",
                    "UserKeyField"        : "od_key",
                    "UserKeyIsPrimaryKey" : "True",
                    "Data"                : orderLines
                }
            ]
        };
        self.postLogicJsonAjax(postData, false, callbacks);
    };

    //Posts Json directly to table(s) using Post Logic
    //Should be used for fields that do not affect other properties in the ViewModel (i.e. text areas)
    //No actions on success.
    var postLogicJsonAjax = function(postData, getOrderJSON, callbacks) {
        callbacks = callbacks || {};

        jQuery.ajax({
            url: 'payment.asp' + '?o_key=' + ofConfig.OKey + '&getorderJSON=' + getOrderJSON + '&ajax=true&pageaction=postLogicJSON&randomnum=' + new Date().getTime(),
            data: "postLogicJSON=" + encodeURIComponent(JSON.stringify(postData)),
            cache: false,
            type: 'POST',
            dataType: 'json',
            success: callbacks.success,
            error: function(jqXHR, textStatus, errorThrown) {
                if (typeof callbacks.error == 'function') {
                    callbacks.error(jqXHR, textStatus, errorThrown);
                } else {
                    alert('Error posting to ' + (postData["Tables"][0]["TableName"] || "postLogicJsonAjax") + '.');
                }
            },
            complete: callbacks.complete
        });
    };


    var apiRoutedPageActions = [
        /*
        // can't be converted yet
        'placeOrder',
        'processOrderAction',
        */
        'setSha',
        'setCCN',
        'setPmId',
        'setCoupon',
        'setGiftCertCode',
        'setOrderHeaderFields',
        'setRequestedShipDate',
        'setShippingPrice',
        'getOrderJSON',
        'resetShippingPrice',
        'setShipmentShipVia'
    ];
    
    apiRoutedPageActions = apiRoutedPageActions.concat([
        'updateShipToAddress',
        'setOrderDetailFields',
        'assignOwnership'
    ]);
    

    var postInfo = function(ajaxOptions, pageAction, scrollToId, model) {
        if(!model) {
            model = viewModel;
        }

        model.activeAjaxRequestCount(model.activeAjaxRequestCount() + 1);

        model.processing(true);

        model.errorMessages.removeAll();

        var existingSuccess = ajaxOptions.success;
        var existingError = ajaxOptions.error;
        var existingComplete = ajaxOptions.complete;

        var querystring = ajaxOptions.url
            ? ajaxOptions.url.substring(ajaxOptions.url.indexOf('?'))
            : '?o_key=' + viewModel.orderKey()
        var apiUrl = orderInfoPostApiUrl + pageAction + querystring;
        var comUrl = orderInfoPostUrl + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=' + pageAction;

        if (apiRoutedPageActions.includes(pageAction)) {
            ajaxOptions.url = apiUrl;
        } else if (!ajaxOptions.url) {
            ajaxOptions.url = comUrl;
        }

        if(!ajaxOptions.type) {
            ajaxOptions.type = 'POST';
        }

        ajaxOptions.success = function(data) {
            var response = JSON.parse(data);
            if(Array.isArray(response) && Object.keys(response[0].Errors).length > 0) {
                for (var msg in response[0].Errors) {
                    if(response[0].Errors.hasOwnProperty(msg)) {
                        scrollToId = 'errorList';

                        model.errorMessages.push(
                            {
                                "errorType": msg,
                                "message": response[0].Errors[msg]
                            }
                        );
                    }
                }
            }

            ko.mapping.fromJS(response[1], orderMapping, model);

            model.updateOrderAccess();
            if(viewModel.isOverLineLimit()){
                model.shippingComplete(true);
            }
            if(typeof existingSuccess === 'function') {
                existingSuccess(data);
            }
            
            _.each(model.itemShipToMap(), function(item){
                item.qty.subscribe(function () { 
                    model.isMinimumOrderTotalMet(checkOrderTotal(model));
                });   
            });

            if(scrollToId) {
                model.showConfirmationMessage(true);
                scrollToSection('#' + scrollToId);
            }
            
            model.detailLines().forEach(function(detailLine) {
                // We can't debounce/trottle an observable
                // so we add a computed to track qty changes.
                // We use this in a subscription to call
                // update cart to update qty change in bulk atc
                // to avoid loading the qty change without posting
                // and updating the entire order model (for perf)
                detailLine.qtyTracker = ko.computed(function() {
                    return detailLine.qty();
                }).extend({throttle: 500});
                detailLine.qtyTracker.subscribe(function (newQty) {
                    model.postQtyUpdate();
                }, detailLine);
                detailLine.workerPriceTracker = ko.computed(function() {
                    return detailLine.price();
                }).extend({throttle: 500});
                detailLine.workerPriceTracker.subscribe(function (newQty) {
                    model.setWorkerPriceOverride(detailLine);
                }, detailLine);
                detailLine.workerQtyLimitsTracker = ko.computed(function() {
                    return {
                        removeType: detailLine.removeType(),
                        minQty: detailLine.minQty(),
                        maxQty: detailLine.maxQty(),
                        qtyIncrement: detailLine.qtyIncrement()
                    };
                }).extend({throttle: 500});
                detailLine.workerQtyLimitsTracker.subscribe(function (newValue) {
                    model.setWorkerQtyLimits(detailLine);
                });
            });
        };

        ajaxOptions.error = function(jqXHR, textStatus, errorThrown) {    
            if (ajaxOptions.url != comUrl) {
                // if API call fails, retry with COM AJAX
                ajaxOptions.url = comUrl;
                $.ajax({
                    url: orderInfoPostUrl + '?o_key=' + viewModel.orderKey() + '&ajax=true&pageaction=logError&url=' + encodeURIComponent(apiUrl) + '&method=' + pageAction + '&message=API error (' + jqXHR.status + ')',
                    success: function() {
                    },
                    error: function() {
                    }
                });
                $.ajax(ajaxOptions);
                return;
            }
            if(typeof existingError === 'function') {
                existingError(); //data is not defined
            }
        };

        ajaxOptions.complete = function() {
            runHook('postInfoAjaxCompleteFunction', { model: model, ajaxOptions: ajaxOptions, pageAction: pageAction, scrollToId: scrollToId });
            if(typeof existingComplete === 'function') {
                existingComplete();
            }
            model.activeAjaxRequestCount(model.activeAjaxRequestCount() - 1);
            if(model.activeAjaxRequestCount() < 1) {
                model.processing(false);

                /* EJ - 2016-11-14
                   Ugly hack to get around ko.mapping not initializing the Account
                   property correctly when re-mapping on existing object.  I think
                   it may have to do with manually converting the Account property
                   to a validatedObservable the first time through.
                */
                fixUpNulls(model.Account());
            }
        };

        $.ajax(ajaxOptions);
    }

    var fixUpNulls = function(account) {
        for(var prop in account) {
            if(account.hasOwnProperty(prop) && typeof account[prop] === 'function') {
                if(account[prop]() === null || account[prop]() === 'null') {
                    account[prop]('');
                }
            }
        }
    }

    var postPayPal = function(orderActionKey) {
        viewModel.processing(true);

        jQuery.ajax({
            url: 'payment.asp' + '?paypal_order_submit=1&oa_id=' + orderActionKey + '&o_key=' + viewModel.orderKey() + '&randomnum=' + new Date().getTime()
            , data: "o_key=" + viewModel.orderKey()
            , cache: false
            , type: 'POST'
            , dataType: 'json'
            , success: function(data){
				if(!data.status && data.message != ''){
					viewModel.errorMessages.push(
                            {
                                "errorType": "payment_methods",
                                "message": data.message
                            }
                        );
					viewModel.processing(false);
				}
                else if(data.url != ''){
                    document.location = data.url;
                }

            }
            , error: function(data) {
                alert('Error attempting PayPal checkout');
                viewModel.processing(false);
            }
            , complete: function(data) {
            }
        });
    }

    var addFromProductFinder = function(productInfo) {
        viewModel.productFinderSearchTerm('');

        var productInfo = {
            productKey: productInfo.key,
            productSku: productInfo.sku,
            parentChildType: productInfo.parent_child_type,
            parentProductId: productInfo.parent_p_id
        }

        viewModel.loadProductForEdit(productInfo, '');
    }

    var checkOrderTotal = function(model){
        var orderTotalValid = true;
        var subTotal = 0;
        if(ofConfig.useMinimumOrderTotal && !model.completed()){
            if(model.useMultiShipEditUI && model.useMultiShipEditUI()){
                _.each(model.itemShipToMap(), function(item){
                    subTotal += (item.qty() * item.getPrice());
                });
                console.log('itemShipToMap');
            }else if(model.itemsOnOrder){
                _.each(model.itemsOnOrder(), function(item){
                    subTotal += (item.qty() * item.price());
                });
            }else{
                var subTotal = model.productTotal();
            }
            var minimumTotal = ofConfig.minimumOrderTotal;

            if(ofConfig.useAccountMinimumOrderTotal && ofConfig.accountMinimumOrderTotal > 0){
                minimumTotal = ofConfig.accountMinimumOrderTotal;
            }
            if(subTotal < minimumTotal){
                orderTotalValid = false;
            }
        }
        return orderTotalValid;
    }

    $(function() {
        if(getOriginalPageName() !== 'bulk_atc.asp') {
            addGlobalModalCompletionHandler($('#find_product'), addFromProductFinder);
        }

        runHook('cartTemplatesDocumentReady', {self: viewModel});
    });

    addTimer("end of ko model");
</script>

<script type="text/javascript">
	function isComplex(product) {
        return product.is_kit_container ||
            product.use_config_questions ||
            product.show_config_sections ||
            product.use_cart_options ||
            product.addon_prod_show ||
            ((oConfig.useSalesUom || ofConfig.showUom) && product.uom_sales_conversion != 1)
    }

    function handleSkuSubmission(sku, state) {
        $('#handle-modal-exit').val(true);

        var sku = _.trim(viewModel.productFinderSearchTerm());
        //var $sku = $('#sku_entry');
        //var sku = _.trim($sku.val());
        if (sku) {
            var request = new ProductRequest('page_entry', {
                sku: sku,
                state: state
            });
            return processProductRequests([request]);
        } else {
            return $.when();
        }
    }

    function processProductRequests(requests) {
        var def = $.Deferred();

        loadProducts(requests)
            .done(function () {
                if(!requests[0].product) {
                    openProductFinder(requests[0].sku);
                } else {
                    if(isComplex(requests[0].product)){
                        openQuickAdd(requests[0].product.p_key);
                    }else{
                        if(requests[0].product.calc_inv_show_cart == undefined || requests[0].product.calc_inv_show_cart) {
                            autoAddToCart(requests[0].product);
                        } else {
                            $('#sku_entry').val('');
                            alert("This product is currently unavailable.");
                        }
                    }
                }
            })
            .fail(_.bindKey(def, 'reject'));

        return def.promise();
    }

    function loadProductsByAjax(pageaction, prop, requests) {
        var def;

        if (requests.length) {
            def = $.Deferred();
            var config = {
                url: 'bulk_atc.asp?modal=1',
                dataType: 'JSON',
                data: {
                    pageaction: pageaction,
                    items: _.pluck(requests, prop)
                }
            };

            runHook('loadProductsByAjaxConfig', config);

            $.ajax(config)
                .done(function (data) {
                    if (data.items) {
                        def.resolve(data.items);
                    } else {
                        def.reject();
                    }
                })
                .fail(function () {
                    def.reject();
                });

            def.fail(function () {
                console.error('Failed to fetch product info.');
            });
        } else {
            def = $.when([]);
        }

        return def.promise();
    }

    function openProductFinder(searchTerm) {
        //open the search results and pass in the term.
        var baseUrl = fncProcessUniversalSearch(searchTerm, false) + '&modalaction=addProduct&modal=1';
        modal.open({
            "url"     : baseUrl,
            "size"    : "full",
            "title"   : "Add Products",
            "complete": function() { viewModel.genericModalComplete }
        });
    }

    function openQuickAdd(productKey){
        //open detail page for quick add.
        var baseUrl = '/pc_product_detail.asp?p_key=' + productKey + '&quickadd=true';
        modal.open({
            "url"     : baseUrl,
            "size"    : "small",
            "title"   : "Add Products",
            "complete": function() { viewModel.genericModalComplete }
        });
    }

    function autoAddToCart(product){
        toggleLoadingWidget(true);
        productKey = product.p_key;
        var productInfo = {};
        productInfo['keys'] = productKey;
        productInfo['qty_' + productKey] = product.min_qty || 1;
        productInfo['pw_id_' + productKey] = product.pw_id || oConfig.defaultWarehouse;
        productInfo['parent_p_id_' + productKey] = product.parent_p_id;
        productInfo.product = product; //add for the hook's use
        runHook('autoAddToCartProductConfig', productInfo);
        delete productInfo.product; //remove before POST
        return $.ajax({
            url: 'i_i_add_to_cart.asp?' + $.param({
                type: 'ajaxadd',
                o_key: viewModel.orderKey(),
                modal: '1'
            }),
            type: 'POST',
            data: productInfo
        })
        .done(function(){ $('#sku_entry').val('')})
        .done(function(){ viewModel.genericModalComplete() } )
        .done(function(){ toggleLoadingWidget(false)})
    }

    function loadProducts(requests) {
        var requestPartitions = _.partition(requests, 'key');
        var requestsWithKey = requestPartitions[0];
        var requestsWithoutKey = requestPartitions[1];

        var def = $.Deferred();
        toggleLoadingWidget(true);

        $.when(
            loadProductsByAjax('products_by_key', 'key', requestsWithKey),
            loadProductsByAjax('products_by_sku', 'sku', requestsWithoutKey)
        )
            .done(function (productsFromKeys, productsFromSkus) {
                var products = productsFromKeys.concat(productsFromSkus);

                _.each(requests, function (request) {
                    request.product = _.find(products, _.bindKey(request, 'matchesProduct'));
                });

                toggleLoadingWidget(false);
                def.resolve(products)
            })
            .fail(_.bindKey(def, 'reject'));

        return def.promise();
    }

	// Represents a request to add a product to the table.
	// The data argument must contain a product property or a sku property.
	function ProductRequest(source, data) {
		'use strict';
		var self = this;

		self.matchesProduct = function(product) {
            var match = self.key ? product.p_key === self.key : product.sku.toLowerCase() === self.sku.toLowerCase();
            var config = {
                            match: match,
                            self: self,
                            product: product
                        };
            runHook('customProductRequestMatching', config);
			return config.match;
		};

		self.source = source;
		self.product = data.product;
		self.state = data.state;
		self.price = data.price;
		self.sku = self.product ? self.product.sku : data.sku;
		self.key = self.product ? self.product.p_key : data.key;
	}

	// Represents the result of processing a ProductRequest.
	function ProductResponse(request, prompt, error) {
		'use strict';
		var self = this;

		self.request = request;
		self.prompt = prompt;
		self.error = error;
	}

    var loadSkusFromPrefix = _.memoize(function(prefix) {
        var config = {
            url: 'bulk_atc.asp?modal=1',
            dataType: 'JSON',
            data: {
                pageaction: 'sku_list',
                prefix: prefix
            }
        };

        runHook('loadSkusFromPrefixAjaxConfig', config);

        return $.ajax(config)
        .then(function (data) {
            return data.items;
        });
    });

    function getSkuList(query, process) {
        var prefix = query.slice(0, 1);
        loadSkusFromPrefix(prefix).done(process);
    }

    function initSkuAutocomplete($input) {
        var source = getSkuList;

        $input.typeahead({
            items: 8,
            minLength: 1,
            source: source,
            // Contrary to the docs, the default sorter does not put exact matches first.
            sorter: function (items) {
                var lowerQuery = this.query.toLowerCase();

                return _.sortBy(items, function (item) {
                    var lowerItem = item.toLowerCase();

                    if (lowerItem === lowerQuery) {
                        return 0;
                    } else if (!lowerItem.indexOf(lowerQuery)) {
                        return 1;
                    } else {
                        return 2;
                    }
                });
            },
            updater: function (sku) {
                // Delay the form submission until the input is updated. An event listener is
                // required since that update utilizes the return value of this function.
                $input.one('change', function () {
                    $('#add_item_form').submit();
                });
                return sku;
            }
        });
    }

    ko.bindingHandlers.autocompleteSku = {
        init: function(element, valueAccessor, allBindingsAccessor) {
            var $el = $(element);

            initSkuAutocomplete($el);
        }
    };

    ko.bindingHandlers.executeOnEnter = {
        init: function (element, valueAccessor, allBindings, viewModel) {
            var callback = valueAccessor();
            $(element).keypress(function (event) {
                var keyCode = (event.which ? event.which : event.keyCode);
                if (keyCode === 13) {
                    callback.call(viewModel);
                    return false;
                }
                return true;
            });
        }
    };
</script>

<script type="text/html" id="cart.billingSection">
    <!-- ko template: 'cart.superUserOrderFormButton'--><!-- /ko -->
    <div id="checkout_billing" class="checkout__billing" data-bind="with: viewModel">
        <div class="checkout-section-body">
            <div class="checkout-section-inner">
                <!-- ko template: { name: 'cart.billingSummary' } --> <!-- /ko -->
                <!-- ko template: { name: 'cart.billingForm' } --> <!-- /ko -->
            </div>
        </div>
        <div class="checkout-section-footer" data-bind="visible: showBillingEdit() && !orderPlaced()">
            <button
                type="button"
                id="btn_continue_shipping"
                class="btn btn-primary pull-right"
                data-target="checkout_shipping"
                data-bind="
                    click: toggleShowBillingEdit,
                    attr: { disabled: !viewModel.billingSectionValid() }
                ">
                Continue Checkout
            </button>
        </div>
    </div>
    <!-- ko template: { name: 'credits', if: viewModel.showCredits } --><!-- /ko -->
</script>

<script type="text/html" id="cart.printButton">
    <button type="button" class="btn print-btn" onclick="window.print();">
        <i class="icon-print"></i> Print
    </button>
</script>

<script type="text/html" id="cart.continueShoppingButton">
    <a type="button" class="btn print-btn" data-bind="attr: {'href': buildContinueShoppingUrl() }">
        <i class="icon-shopping-cart"></i> Continue Shopping
    </a>
</script>

<script type="text/html" id="cart.superUserOrderFormButton">
    <!-- ko if: ofConfig.isModal -->
        <div class="pull-right">
            <button type="button" class="btn btn-primary" data-bind="click: viewModel.returnToPendingOrders">
                <i class="icon-chevron-left"></i> Return to <span data-bind="text: ofConfig.SavedCartLabel"></span>s
            </button>
            &nbsp;&nbsp;
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.detailSection">
    <div id="checkout_details" class="checkout-section active completed">

        <div class="checkout-section-body">
            <div id="shipping_address_summary" >


                <!-- ko template: {
                    name: 'cart.shippingActions',
                    if: !viewModel.shippingComplete() } -->
                <!-- /ko -->

                <!-- ko template: {
                    name: 'cart.assignItemsToShipTos',
                    data: itemsOnOrder,
                    if : ofConfig.amazonView && viewModel.useMultiShipEditUI() && !viewModel.shippingComplete()  && !viewModel.completed() } -->
                <!-- /ko -->

                <!-- ko template: {
                    name: 'cart.itemsOnOrderSelection',
                    data: itemsOnOrder,
                    if :  ofConfig.invView & viewModel.useMultiShipEditUI() && !viewModel.shippingComplete()  && !viewModel.completed() } -->
                <!-- /ko -->

                <!-- ko template: {
                    name: 'cart.itemShipToMapPreview',
                    data: itemShipToMap,
                    if :  ofConfig.invView & viewModel.useMultiShipEditUI() && !viewModel.shippingComplete()  && !viewModel.completed() } -->
                <!-- /ko -->

                <!-- ko template: {
                    name: 'cart.selectShipTo',
                    data: $data,
                    if : !viewModel.useMultiShipEditUI() && !viewModel.shippingComplete() && !viewModel.completed() }-->
                <!-- /ko -->

            </div>
        </div>
    </div>
     <div class="checkout-section-footer" data-bind="visible: (!orderPlaced() && !viewModel.shippingComplete() ) && !(!viewModel.billingSectionValid() || $data.detailLines().length == 0)">
        <button 
            type="button" 
            id="btn_continue_shipping" 
            class="btn btn-primary pull-right" 
            data-target="checkoutShipping" 
            data-bind="
                attr: { 'disabled': !viewModel.isMinimumOrderTotalMet() },
                click: allocateShipments
            ">
            Continue Checkout
        </button>
    </div>
</script>

<script type="text/html" id="cart.shippingActions">
    <!-- ko if: ofConfig.allowUserCreatedShipments && detailLines().length > 0-->
        <ul class="nav nav-tabs shipping-actions">
                <li data-bind="css: { active: !viewModel.useMultiShipEditUI() }">
                    <a href="#" data-bind="click: viewModel.useMultiShipEditUI() ? viewModel.toggleMultiShip : null">Single<span class="hidden-xs"> Address</span></a>
                </li>

                <li data-bind="css: { active: viewModel.useMultiShipEditUI() }">
                    <a href="#" data-bind="click: viewModel.useMultiShipEditUI() ? null : viewModel.toggleMultiShip">Multiple<span class="hidden-xs"> Addresses</span></a>
                </li>
                <li class="shipping-actions__button" data-bind="if: ofConfig.bAllowShipToAdds && !viewModel.shippingComplete()  && !viewModel.completed()">
                    <!-- ko template: 'cart.addAddressButton' --><!-- /ko -->
                </li>
        </ul>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.productQuickAdd">
    <div class="quick-add u-checkout-well">
        <h3 class="u-checkout-well__title">Add Products</h3>
        <!-- ko if: !viewModel.isMinimumOrderTotalMet() -->
            <span data-bind="html: ofConfig.minimumOrderTotalMessage.replace('<$>', ofConfig.minimumOrderTotal)"></span>
        <!-- /ko -->
        <div class="quick-add__wrapper">

            <div class="quick-add__product-select">

                <div class="form-buttons input-append -autocomplete">
                    <label for="sku">Enter a SKU</label>
                    <input type="text" id="sku_entry"
                        data-bind="textInput: viewModel.productFinderSearchTerm,
                                autocompleteSku, 
                                executeOnEnter: handleSkuSubmission"
                        name="sku"
                        class="quick-add__sku"
                        placeholder="SKU"
                        autocomplete="off"
                        autocapitalize="off"
                        autocorrect="off">
                    <a href="#0" id="sku_submit"
                        data-bind="click: handleSkuSubmission"
                        class="btn"
                        tabindex="-1">
                        Add
                    </a>

                </div>
                <div class="form-buttons input-append">
                    <label><strong> or </strong></label>
                </div>
                <!-- ko if: viewModel.allowProductAdds() && ofConfig.showProductAddDropdown -->
                    <!-- ko template: 'cart.addProductButton'--><!-- /ko -->
                <!-- /ko -->
            </div>
        </div>
    </div>

    <div class="quick-add__config u-checkout-well"
        data-bind="
            visible: viewModel.mainProduct() && !!!viewModel.mainProduct().configuratorEditData,
            if: viewModel.mainProduct() && !!!viewModel.mainProduct().configuratorEditData
        " >
            <h3 class="u-checkout-well__title">Configure Product</h3>
            <strong data-bind="html: viewModel.mainProduct().selectedProduct().name() || viewModel.mainProduct().name()"></strong>
            <!-- ko template: { name: 'catalog.detail_info', data:viewModel.mainProduct  } --><!-- /ko -->
            <div
                data-bind="if: viewModel.mainProduct"
                class="detail-child-selector">
                    <span
                        data-bind="template: { name: 'catalog.child_selectors',
                                if: viewModel.mainProduct().childSelectors,
                                data: viewModel.mainProduct().childSelectors }"></span>
            </div>
            <!-- ko template: { name:'catalog.atc_full', data:viewModel.mainProduct().selectedProduct, if:viewModel.mainProduct } --><!-- /ko -->
        <div style="clear:both;"></div>
    </div>
</script>

<script type="text/html" id="cart.shippingSection">
    <div id="checkout_shipping" class="checkout-section active completed" data-bind="with: viewModel">
        <!-- ko if: viewModel.shippingComplete -->
            <div id="checkout_review" class="checkout__review">

                <!-- ko template: { name: 'cart.confirmation' } --><!-- /ko -->

                <!-- <h1 class="checkout__title">Checkout</h1> -->

                <!-- ko template: { name: 'cart.productQuickAdd', if: viewModel.allowProductAdds() && ofConfig.showProductQuickAddInFinalStep } --><!-- /ko -->
                <!-- ko template: { name: 'cart.shipmentList', if: viewModel.allowShipViaEdits() } --> <!-- /ko -->
                <!-- ko template: { name: 'cart.shipmentSummaryList', if: !viewModel.allowShipViaEdits() } --> <!-- /ko -->
                <!-- ko if: viewModel.shippingComplete() -->

                    <div
                        class="u-checkout-well checkout-shipping__coupon-certificate u-card"
                        data-bind="visible: !viewModel.completed() && ((ofConfig.showCoupon && ofConfig.showCouponEntryInline) || (ofConfig.showGiftCertificate && ofConfig.showGiftCertificateEntryInline)) && viewModel.allowPayMethodEdits()">

                        <h3 class="checkout-review__fieldset-content u-checkout-well__title" data-bind="visible: !orderPlaced() && allItemsAllocated()">
                            Coupons and Gift Certificates
                        </h3>
                        <!-- ko template: { name: 'cart.couponEntry', if: ofConfig.showCoupon && ofConfig.showCouponEntryInline && viewModel.allowPayMethodEdits() } --><!-- /ko -->
                        <!-- ko template: { name: 'cart.giftCertificateEntry', if: ofConfig.showGiftCertificate && ofConfig.showGiftCertificateEntryInline && viewModel.allowPayMethodEdits() } --><!-- /ko -->
                    </div>

                    <!-- ko template: { name: 'cart.abovePaymentMethods' } --><!-- /ko -->

                    <fieldset class="checkout-review__fieldset u-checkout-well" id="payment_methods" data-bind="visible: !!$data.selectedOrderAction && $data.selectedOrderAction().showPaymentMethods() && !completed()">

                        <h3 class="checkout-review__fieldset-content u-checkout-well__title" data-bind="visible: !orderPlaced() && allItemsAllocated()">
                            Secure Payment Methods
                        </h3>

                        <!-- ko template: { name: 'cart.errorList', data: _.filter(errorMessages() , function (error) { return error.errorType == 'payment_methods'; }) } --><!-- /ko -->
                        <div class="form-horizontal checkout-review__fieldset-content" data-bind=" if: viewModel.allowPayMethodEdits() && viewModel.payMethods().length">
                            <!-- ko template: { name: 'cart.paymentMethods', afterRender: initCCForm  } --><!-- /ko -->
                        </div>
                        <div class="alert alert-warning" data-bind="visible: !viewModel.payMethods().length">
                            <div data-bind="html: ofConfig.sPaymentMethodMissingError"></div>
                            <div data-bind="if: ofConfig.bIsValidIp || ofConfig.isSuperUserSession">[ No Payment Methods Found. ]</div>
                        </div>
                        <!-- ko if: !viewModel.allowPayMethodEdits() && !viewModel.completed() -->
                        <div class="well checkout-review__fieldset-content">
                            <!-- ko template: 'cart.paymentMethodSummary' --><!-- /ko -->
                        </div>
                        <!-- /ko -->

                    </fieldset>

                    <fieldset class="checkout-review__fieldset u-checkout-well" id="controlgroup_quoteinfo" data-bind="visible: (recordType() != 'cart' && ofConfig.showExpirationDate) && ((superUserOrderFormMode() && ofConfig.superUserAllowExpirationDateEdits) || viewModel.isValidDate(expirationDate()))">
                        <h3 class="checkout-review__fieldset-content u-checkout-well__title">
                            Quote Information
                        </h3>
                        <div class="form-horizontal checkout-review__fieldset-content">
                            <!-- ko template: { name: 'cart.expirationDate', if: recordType() != 'cart' && ofConfig.showExpirationDate } --><!-- /ko -->
                        </div>
                    </fieldset>

                    <fieldset class="checkout-review__fieldset u-checkout-well" id="controlgroup_recurring" data-bind="visible: !viewModel.completed() && ((selectedOrderAction() && selectedOrderAction().showRecurringOrderSettings()) || viewModel.recordType() == 'recurring' ) ">
                        <div class="checkout-review__fieldset-content">
                            <!-- ko template: { name: 'cart.recurringDetails' } --><!-- /ko -->
                        </div>
                    </fieldset>

                    <span class="checkout-summary__order-total -hidden-desktop">
                        <!-- ko template: { name: 'cart.checkoutSummary' } --><!-- /ko -->
                    </span>

                    <!-- ko template: { name: 'cart.aboveOrderActions' } --><!-- /ko -->

                    <fieldset class="checkout-review__fieldset u-checkout-well" data-bind="visible: !viewModel.completed(), if: ofConfig.showOrderActionsInline">
                        <h3 class="checkout-review__fieldset-content u-checkout-well__title" data-bind="if: viewModel.allowPlaceOrder() && shippingComplete() && paymentMethodID(), visible: orderActions().length > 1">
                            Choose an Order Action
                        </h3>

                        <!-- ko if : ofConfig.showOrderActionsInline && !viewModel.completed() -->
                            <!-- ko template: { name: 'cart.orderActions', if: shippingComplete() && paymentMethodID() && orderActions().length > 0 } --><!-- /ko -->

                            <div class="checkout-review__fieldset-content" data-bind="if: orderActions().length == 0 && shippingComplete() && paymentMethodID()">
                                <div class="alert alert-info">There are no actions available at this time.</div>
                            </div>

                        <!-- /ko -->

                        <!--ko template: { name: 'cart.noteBookNotes', if : viewModel.noteBook().notes().length > 0 && completed()  } --><!-- /ko -->

                    </fieldset>
                <!-- /ko -->

            </div>
        <!-- /ko -->
    </div>
</script>

<script type="text/html" id="cart.abovePaymentMethods">
    <!-- placeholder -->
</script>
<script type="text/html" id="cart.aboveOrderActions">
    <!-- placeholder -->
</script>

<script type="text/html" id="cart.couponEntry">
    <div id="coupon_entry" class="control-group" data-bind="if: !orderPlaced() && billingSectionValid() && shipmentsSectionsValid()">
        <form class="well">
            <label for="couponcode" class="control-label">
                <b>Have a coupon?</b>
            </label>
            <div class="controls">
                <!-- ko ifnot: couponCode -->
                <div class="input-append">
                    <input type="text" name="couponcode" id="couponcode" class="input-medium" data-bind="value: newCouponCode" placeholder="Enter code">
                    <button class="btn" data-bind="click: function() { SetCouponCode(newCouponCode()); newCouponCode(''); }">Apply</button>
                </div>
                <!-- /ko -->
                <!-- ko if: couponCode -->
                <div class="label label-primary">
                    <strong><span data-bind="text: couponCode"></span></strong> applied.&nbsp;<i style="cursor: pointer" class="icon-remove" title="Remove Coupon" data-bind="click: function() { SetCouponCode(''); }"></i>
                </div>
                <!-- /ko -->
            </div>
        </form>
        <!-- ko template: { name: 'cart.errorList', data: _.filter(errorMessages() , function (error) { return error.errorType == 'coupon'; }) } --><!-- /ko -->
    </div>
</script>


<script type="text/html" id="cart.giftCertificateEntry">
    <div id="giftCertificateEntry" class="control-group" data-bind="if: !orderPlaced() && billingSectionValid() && shipmentsSectionsValid()">
        <form class="well">
            <label for="giftCertCode" class="control-label">
                <b>Have a gift certificate?</b>
            </label>
            <div class="controls">
                <!-- ko ifnot: giftCertCode -->
                <div class="input-append">
                    <input type="text" name="giftCertCode" id="giftCertCode" class="input-medium" data-bind="value: newGiftCertificate" placeholder="Enter code">
                    <button class="btn" data-bind="click: function() { SetGiftCertificate(newGiftCertificate()); newGiftCertificate(''); }">Apply</button>
                </div>
                <!-- /ko -->
                <!-- ko if: giftCertCode -->
                <div class="alert alert-success">
                    <strong><span data-bind="text: giftCertCode"></span></strong> applied.&nbsp;<i style="cursor: pointer" class="icon-remove text-error" title="Remove Gift Certificate" data-bind="click: function() { SetGiftCertificate(''); }"></i>
                </div>
                <!-- /ko -->
            </div>
        </form>
        <!-- ko template: { name: 'cart.errorList', data: _.filter(errorMessages() , function (error) { return error.errorType == 'coupon'; }) } --><!-- /ko -->
    </div>
</script>

<script type="text/html" id="cart.orderActions">

    <div data-bind="visible: !processing() ">
        <div id="restriction_message_container" data-bind="if : $data.restrictionMessages().length > 0">
            <!-- ko template: 'cart.restrictionMessages'--><!-- /ko -->
        </div>
        <div data-bind="visible: orderActions().length > 1" class="order-actions__well">
            <div class="row-fluid order-actions__row">
                <div class="span6 order-actions__span" data-bind="visible: orderActions().length > 1">
                    <div class="order-actions__header" id="order_actions_header">
                        <div class="order-actions__wrapper" data-bind="foreach: orderActions">
                            <label class="radio order-actions__radio">
                                <input type="radio" name="radio" data-bind=" attr: { 'id': $data.refId }, checked: viewModel.selectedOrderActionRefId, value: $data.refID " >
                                <b data-bind=" html: $data.name"></b>
                                <p data-bind=" html: $data.customerDescription"></p>
                            </label>
                        </div>
                    </div>
                </div>

                <div class="span6 order-actions__span">
                    <ul data-bind="foreach: orderActions " class="unstyled">
                        <li data-bind="visible: $data.refID() == (viewModel.selectedOrderAction() && viewModel.selectedOrderActionRefId()) || $parent.orderActions().length == 1">
                            <div id="controlgroup_nickname" class="control-group" data-bind="if: $data.showNickname() || viewModel.nickname()">
                                <label for="nickname" class="control-label">
                                    Name of Order <small class="muted">(optional)</small>
                                </label>
                                <input type="text" class="input-block-level" name="nickname" id="nickname" data-bind="value: viewModel.nickname">
                            </div>
                            <div id="add_comments_container" class="control-group" data-bind="if : ofConfig.allowConversationLogs && $data.showComments">
                                <!-- ko template: 'cart.noteBookComments'--><!-- /ko -->
                            </div>
                        </li>
                    </ul>
                </div>
            </div>
            <!--ko template: { name: 'cart.noteBookNotes', if : viewModel.noteBook().notes().length > 0  } --><!-- /ko -->
        </div>
        <div class="form-actions" id="orderActionButtons" data-bind="foreach: orderActions">
            <!-- ko template: { name: 'cart.termsAndConditions', if: viewModel.showOrderActionButton($data,$parent) } --><!-- /ko -->
            <button
                class="form-actions__place-order btn btn-primary"
                data-bind="
                    html: function() {
                        if($data.showComments() && viewModel.customerComment() != ''  ){
                            return 'Send Comment & ' + $data.buttonLabel();
                        }else{
                            return $data.buttonLabel;
                        }
                    }(),
                    attr: {
                        'id' : $data.refID,
                        'disabled': (
                            (($parent.paymentMethod.paymentType() == 'cc' && $parent.ccn_id() == '') &&
                            (placeOrderActionType() == 'place' || placeOrderActionType() == 'validate')) ||
                            ($data.requireTermsAndConditions() && !$parent.termsAgreement())
                        )
                    },
                    click: viewModel.processOrderAction,
                    visible: viewModel.showOrderActionButton($data,$parent)
            "></button>
        </div>
    </div>
</script>

<script type="text/html" id="cart.termsAndConditions">
    <label for="termsAgreement" class="checkbox terms-agreement" data-bind="visible: ($data.refID() == (viewModel.selectedOrderAction() && viewModel.selectedOrderActionRefId()) || $parent.orderActions().length == 1) && $data.requireTermsAndConditions()">
        <input type="checkbox" class="required" data-bind="checked: $parent.termsAgreement" id="termsAgreement"></input>
        By placing this order, you agree to our <a data-bind="attr: { href: 'page.asp?modal=1&p_key=' + ofConfig.termsAndConditionsPageKey }" class="global-modal" data-title="Terms and Conditions">terms and conditions</a>.  Please check to indicate that you have read them.
    </label>
</script>

<script type="text/html" id="cart.restrictionMessages">
    <div class="well">
        <b>Important Order Information</b>
        <p class="text-warning" data-bind="foreach: restrictionMessages">
            <span data-bind=" html: $data"></span>
        </p>
    </div>
</script>

<script type="text/html" id="cart.checkoutSummary">

    <div id="checkout_summary" class="billing-address-summary__well checkout-summary" data-bind="with: viewModel">

        <!-- ko template: { name: 'cart.couponEntry', if: ofConfig.showCoupon && !ofConfig.showCouponEntryInline } --><!-- /ko -->
        <!-- ko template: { name: 'cart.giftCertificateEntry', if: ofConfig.showGiftCertificate &&  !ofConfig.showGiftCertificateEntryInline } --><!-- /ko -->

        <h3 class="u-checkout-well__title checkout-summary__title">
           Order Summary
        </h3>
        <table class="table checkout-summary__table">
            <tbody>
                <tr data-bind="visible: ofConfig.showEffectiveOrderDate && viewModel.isValidDate(effective_order_date())">
                    <td>Effective Order Date</td>
                    <td id="order_date" class="cell-right" data-bind="text: moment(effective_order_date()).format('MM/DD/YYYY') "></td>
                </tr>
                <tr data-bind="visible: productSubTotalBeforeDiscount() == productTotal()">
                    <td data-bind="html: ofConfig.productSubtotalLabel"></td>
                    <td id="p_total" class="cell-right">
                        <span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(productTotal()) : utils.drawHidePriceMessage()"></span>
                    </td>
                </tr>
                <tr data-bind="visible: productSubTotalBeforeDiscount() != productTotal()">
                    <td data-bind="html: ofConfig.productSubtotalBeforeDiscountLabel"></td>
                    <td id="p_coupon_total" class="cell-right">
                        <span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(productSubTotalBeforeDiscount()) : utils.drawHidePriceMessage()"></span>
                    </td>
                </tr>
                <tr data-bind="visible: productSubTotalBeforeDiscount() != productTotal()">
                    <td><span data-bind="html: ofConfig.productDiscountTotalLabel"></span> (<span data-bind="text: session.TradeAdjustment"></span>%)</td>
                    <td id="p_coupon_total" class="cell-right deduction">
                        <span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(productDiscountTotal()) : utils.drawHidePriceMessage()"></span>
                    </td>
                </tr>
                <tr data-bind="visible: productSubTotalBeforeDiscount() != productTotal()">
                    <td data-bind="html: ofConfig.productSubtotalAfterDiscountLabel"></td>
                    <td id="p_coupon_total" class="cell-right">
                        <span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(productTotal()) : utils.drawHidePriceMessage()"></span>
                    </td>
                </tr>
                <tr data-bind="visible: giftCertCode">
                    <td data-bind="html: ofConfig.giftCertificateTotalLabel"></td>
                    <td id="p_coupon_total" class="cell-right deduction"><span data-bind="html: utils.formatMoney(giftCertAmount())"></span></td>
                </tr>
                <tr data-bind="visible: couponCode">
                    <td data-bind="html: ofConfig.couponSubtotalLabel"></td>
                    <td id="p_coupon_total" class="cell-right deduction"><span data-bind="html: utils.formatMoney(couponDiscountTotals.totalDiscount())"></span></td>
                </tr>
                <tr data-bind="if: ofConfig.bShowShipTotal && ofConfig.bUsingShipping">
                    <td data-bind="html: ofConfig.shippingTotalLabel"></td>
                    <!-- ko if: shipmentsSectionsValid() -->
                    <td id="s_total" class="cell-right">
                        <!-- ko if: ofConfig.showPricingOrderEntry -->
                            <!-- ko if : ofConfig.bShowShipTotalMessage -->
                                <span data-bind="text: ofConfig.sShipTotalText"></span>
                            <!-- /ko -->
                            <!-- ko ifnot: ofConfig.bShowShipTotalMessage -->
                                <!-- ko if: ofConfig.bShowPriceText && shippingTotal() == 0  -->
                                    <span data-bind="text: ofConfig.sShipTotalText"></span>
                                <!-- /ko -->
                                <!-- ko if: !ofConfig.bShowPriceText || shippingTotal() > 0 -->
                                    <span data-bind="html: utils.formatMoney(shippingTotal())"></span>
                                <!-- /ko -->
                            <!-- /ko -->
                        <!-- /ko -->
                        <!-- ko if: !ofConfig.showPricingOrderEntry -->
                            <span data-bind="html: utils.drawHidePriceMessage()"></span>
                        <!-- /ko -->
                    </td>
                    <!-- /ko -->
                    <!-- ko if: !shipmentsSectionsValid() -->
                    <td id="s_total" class="cell-right" >TBD</td>
                    <!-- /ko -->
                </tr>
                <tr data-bind="if: ofConfig.showTaxTotal">
                    <td data-bind="html: ofConfig.taxTotalLabel"></td>
                    <!-- ko if: shipmentsSectionsValid() -->
                        <td id="t_total" class="cell-right"><span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(taxTotal()) : utils.drawHidePriceMessage()"></span></td>
                    <!-- /ko -->
                    <!-- ko if: !shipmentsSectionsValid() -->
                        <td id="t_total" class="cell-right">TBD</td>
                    <!-- /ko -->
                </tr>
                <tr class="success text-large">
                    <td class="text-success"><b><span data-bind="html: ofConfig.orderTotalLabel"></span></b></td>
                    <td class="cell-right text-success">
                        <b><span data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(orderBalance()) : utils.drawHidePriceMessage()"></span></b>
                    </td>
                </tr>
            </tbody>
        </table>
        <!-- ko if : !ofConfig.showOrderActionsInline && !viewModel.completed() -->
            <!-- ko template: { name: 'cart.orderActions', if: shippingComplete() && paymentMethodID() && orderActions().length > 0 } --><!-- /ko -->
            <div data-bind="if: orderActions().length == 0 && shippingComplete() && paymentMethodID()">
                <div class="alert alert-info">There are no actions available at this time.</div>
            </div>
        <!-- /ko -->

    </div>
</script>

<script type="text/html" id="cart.noteBookComments">
    <div class="convolog-comments">
        <div id="external_comments_wrapper" class="convolog-comments__wrapper">
            <label for="external_comments" class="convolog-comments__label">
                Comments <small class="muted">(optional)</small>
            </label>
            <textarea
                id="external_comments"
                class="input-block-level convolog-comments__textarea"
                rows="3"
                autocomplete="off"
                data-bind="textInput: viewModel.customerComment">
            </textarea>
            <!-- This button was confusing users. It's disabled for now, but may be revisited in the future to
                improve the UX. -dnelsen 04/27/2020
            <div class="convolog-comments__btn-wrapper" data-bind="visible: viewModel.customerComment() != ''  ">
                <a class="btn convolog-comments__btn" data-bind="event : { 'click' : viewModel.saveCustomerComment }">Post Comments <i class="icon-arrow-down"></i></a>
            </div>
            -->
            <p class="help-block text-small" data-bind="html: ofConfig.orderCommentHelpText"></p>
        </div>
    </div>
</script>

<script type="text/html" id="cart.noteBookNotes">
    <div id="conversation_log_detail" >
        <div name="conversation_detail_template">
            <h3 class="u-checkout-well__title convolog-comments__title">Comments For This Order</h3>
            <div class="convolog-comments__entries">
                <ul class="list-group convolog-comments__entries-group" data-bind="foreach: $data.noteBook().notes()">
                    <li class="list-group-item convolog-comments__entries-item">
                        <div class="convolog-comments__content">
                            <p class="convolog-comments__entries-text" data-bind="html: $data.externalNotes"></p>
                            <small class="muted convolog-comments__entries-date"><i class="icon-user"></i> <span data-bind="html: $data.postedByName + ' at ' + $data.createDate"></span></small>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.paymentMethodSummary">
    <ul class="unstyled">
        <li><b>Payment</b></li>
        <li data-bind="text: paymentMethod.name"></li>
        <!-- ko if: paymentMethod.paymentType() === 'cc' -->
            <li><strong data-bind="text: vaultedPayment.cardType"></strong> ending in <strong data-bind="text: vaultedPayment.last4"></strong></li>
            <li class="payment-method-summary__expiration">Expires <strong><span data-bind="text: vaultedPayment.expMonth"></span>/<span data-bind="text: vaultedPayment.expYear"></span></strong></li>
        <!-- /ko -->
    </ul>
    <input type="hidden" id="ponumber" data-bind="value: poNumber"/>
</script>

<script type="text/html" id="cart.confirmation">
    <div id="checkout_confirmation" class="checkout-section u-checkout-well" data-bind="visible: viewModel.showConfirmationMessage ">
        <div class="print-hide print-btn__wrapper">
            <!-- ko template: 'cart.continueShoppingButton'--><!-- /ko -->
            <!-- ko template: 'cart.printButton'--><!-- /ko -->
        </div>
        <div class="confirmation-alert__wrapper">
            <!-- ko if: viewModel.selectedLifecycleStage().confirmationMessage() != '' -->
            <div clas="confirmation-alert" data-bind="attr: { 'class': 'confirmation-alert-box ' + selectedLifecycleStage().displayClass() }">
                <i class="icon-2x pull-left"></i>
                <h4 style="margin-top: 4px;" data-bind="html: selectedLifecycleStage().confirmationMessage()"></h4>
            </div>
            <!-- /ko -->
            <!-- ko if: viewModel.selectedLifecycleStage().confirmationMessage() == '' -->
            <div class="confirmation-alert">
                <h3 class="text-success" data-bind="visible: completed"><i class="icon-ok"></i> Thank you for your order!</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.recordType() == 'recurring' "><i class="icon-save"></i> Recurring Order Saved.</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.lifecycleStage() == 'pending' "><i class="icon-refresh"></i> This order is pending approval.</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.lifecycleStage() != 'pending' && viewModel.lifecycleStage() != 'recurring' && viewModel.lifecycleStage() != 'cancelled' "><i class="icon-save"></i> This order has been saved.</h3>
                <h3 class="text-error" data-bind="visible: viewModel.lifecycleStage() == 'cancelled' "><i class="icon-remove"></i> This order was rejected.</h3>
            </div>
            <!-- /ko -->
        </div>

        <div class="checkout-section-body">

            <div class="order-number checkout-section-inner well">

                <!-- ko if: completed() && orderNumber() -->
                <h3>Your order number is&nbsp;<span data-bind="text: ofConfig.orderNumberPrefix"></span><span data-bind="text: orderNumber"></span></h3>
                <!-- /ko -->
                <div class="row-fluid checkout-section__row">

                    <div class="span3 checkout-section__span">
                        <!-- ko template: 'cart.paymentMethodSummary' --><!-- /ko -->
                    </div>

                    <div class="span3 checkout-section__span">
                        <div id="controlgroup_invoice_ponumber_summary" class="control-group checkout-section__summary-wrapper" data-bind="if: poNumber">
                            <div class="checkout-section__summary">
                                <b for="ponumber_summary" class="po-label" data-bind="html: ofConfig.POLabel"></b>
                                <div class="controls">
                                    <span id="ponumber_summary" class="" data-bind="text: poNumber"></span>
                                </div>
                            </div>
                        </div>
                        <div id="controlgroup_invoice_comments_summary" class="control-group checkout-section__summary-wrapper" data-bind="if: comments">
                            <div class="checkout-section__summary">
                                <label for="order_comments_summary" class="control-label">
                                    <strong data-bind="text: ofConfig.fulfillmentCommentsText"></strong>
                                </label>
                                <div class="controls">
                                    <div id="order_comments_summary" data-bind="text: comments"></div>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.errorList">
    <div id="errorList">
        <!-- ko if: $data.length > 0 && !viewModel.completed() -->
            <div  class="alert alert-error">
                <span class="error-list__wrapper" data-bind="foreach: $data">
                    <strong class="error-list__message" data-bind="text: message"></strong>
                </span>
            </div>
        <!-- /ko -->
    </div>
</script>

<script type="text/html" id="cart.allocationNotComleteMessage">
    <div class="alert alert-warning">
        <h3 class="text-warning"><i class="icon-warning-sign"></i> Your shipments aren't complete.</h3>
        <p>All products on your order must be allocated to shipments before you can complete the order.</p>
    </div>
</script>

<!-- bound -->
<script type="text/html" id="cart.billingForm">
    <!-- ko if: showBillingEdit -->
    <div id="billing_address_form" class="form-horizontal">
        <!-- ko template: { name: 'cart.orderContact', data: viewModel.customer } --> <!-- /ko -->
        <!-- ko template: { name: 'cart.billingAddress', data: viewModel.account } --> <!-- /ko -->
    </div>
    <!-- /ko -->
</script>

<!-- bound -->
<script type="text/html" id="cart.orderContact">
    <fieldset>
        <legend>Contact Information</legend>
        <div class="control-group" data-bind="validationElement: $data.firstName">
            <label for="bill_f_nm" class="control-label">First Name</label>
            <div class="controls">
                <input type="text" id="bill_f_nm" data-bind="value: $data.firstName">
            </div>
        </div>

        <div class="control-group" data-bind="validationElement: $data.lastName">
            <label for="bill_l_nm" class="control-label">Last Name</label>
            <div class="controls">
                <input type="text" id="bill_l_nm" data-bind="value: $data.lastName">
            </div>
        </div>

        <div class="control-group" data-bind="validationElement: $data.email">
            <label for="bill_em" class="control-label">Email</label>
            <div class="controls">
                <input type="text" id="bill_em" data-bind="value: $data.lastName">
            </div>
        </div>

        <div class="control-group" data-bind="validationElement: $data.phone">
            <label for="bill_phone" class="control-label">Phone</label>
            <div class="controls">
                <input type="text" id="bill_phone" data-bind="value: $data.phone">
                <div class="help-inline text-small">Format: <span id="gc-number-1" class="gc-cs-link" title="Call with Google Voice">888-555-1234</span> xxxx</div>
            </div>
        </div>
    </fieldset>
</script>

<script type="text/html" id="cart.billingAddress">
    <fieldset>
        <legend>Billing Address</legend>
        <!-- ko template: { name: 'cart.addressInfo' } --><!-- /ko -->
    </fieldset>
</script>

<!-- bound -->
<script type="text/html" id="cart.billingSummary">
    <!-- ko ifnot: showBillingEdit -->
          <div id="billing_address_summary" class="row-fluid billing-address-summary__row">
                <div class="billing-address-summary__well">
                <b>Contact Information</b>
                <button
                    type="button"
                    id="contact-address"
                    class="btn btn-link btn-mini global-modal billing-address-summary__edit-button"
                    data-bind="
                        attr: { 'href': 'account.asp?modalaction=editcontact&modal=1&o_key=' + viewModel.orderKey() },
                        visible: viewModel.allowContactEdits(),
                        addModalHandler: { 'element' : $('#contact-address'), 'handler' : function() { location.reload() }}"
                    data-title="Edit Contact Information"
                    data-size="large"
                >
                    <small>Edit</small>
                </button>
                <!-- ko template: { name: 'cart.orderContactSummary', data: customer } --> <!-- /ko -->
                </div>

                <!-- ko if: completed() -->
                <div class="billing-address-summary__well">
                    <!-- ko template: {
                        name: 'cart.shippingSummary',
                        data: shipments(),
                        if : (viewModel.shippingComplete() ||  viewModel.completed()) && shipments().length > 0 } -->
                    <!-- /ko -->
                </div>
                <!-- /ko -->

                <div class="billing-address-summary__well">
                    <b>Billing Address</b>
                    <button
                        type="button"
                        id="billing-address"
                        class="btn btn-link btn-mini global-modal billing-address-summary__edit-button"
                        data-bind="
                            attr: { 'href': 'account.asp?modalaction=editaccount&modal=1&o_key=' + viewModel.orderKey() },
                            visible: viewModel.allowAccountEdits(),
                            addModalHandler: { 'element' : $('#billing-address'), 'handler' : function() { location.reload() } }"
                        data-title="Edit Billing Information"
                        data-size="large"
                    >
                        <small>Edit</small>
                    </button>
                        <!-- ko template: { name: 'cart.billingAddressSummary', data: billToAccount } --><!-- /ko -->
                </div>

                <span class="checkout-summary__order-total -hidden-mobile">
                    <!-- ko template: { name: 'cart.checkoutSummary' } --><!-- /ko -->
                </span>
              </div>
    <!-- /ko -->
</script>

<!-- bound -->
<script type="text/html" id="cart.orderContactSummary">
    <ul class="unstyled">
        <li><span data-bind="text: $data.firstName"></span> <span data-bind="text: $data.lastName"></span></li>
        <li data-bind="text: $data.email"></li>
        <li data-bind="text: $data.phone"></li>
    </ul>
</script>

<!-- bound -->
<script type="text/html" id="cart.billingAddressSummary">
    <ul class="unstyled">
        <li data-bind="text: $data.company"></li>
        <li data-bind="text: $data.address1, visible: !!$data.address1()"></li>
        <li data-bind="text: $data.address2, visible: !!$data.address2()"></li>
        <li data-bind="text: $data.address3, visible: !!$data.address3()"></li>
        <li data-bind="text: $data.address4, visible: !!$data.address4()"></li>
        <li data-bind="text: $data.address5, visible: !!$data.address5()"></li>
        <li data-bind="visible: $data.city || $data.state || $data.zipCode"><span data-bind="text: $data.city"></span><span data-bind="visible: $data.city"
        >, </span><span data-bind="text: $data.state"></span> <span data-bind="text: $data.zipCode"></span></li>
        <li data-bind="text: $data.country, visible: $data.country"></li>
    </ul>
</script>

<script type="text/html" id="cart.shipmentMethodSelector">
    <div class="radiogroup" data-bind="foreach: shipViaChoices">
        <!-- ko if: eligible -->
            <label class="radio clearfix" data-bind="attr: { for: $parentContext.$index() + 'single_sm_0' + $context.$index() }, css: { active: $parent.selectedShipVia.shipViaChoiceID() == shipViaChoiceKey() }">
                <input class="ship-via-radio" type="radio" data-bind="attr: { disabled: viewModel.orderPlaced, name: $parentContext.$index() + 'single_sm_0' + $context.$index(), id: $parentContext.$index() + 'single_sm_0' + $context.$index() }, checked: $parent.selectedShipViaChoice, value: $data"><span data-bind="html: name"></span>
                <!-- ko if: ofConfig.bShowShipViaPrice && ofConfig.showPricingOrderEntry -->
                    <span class="sv-price pull-right" data-bind="ifnot: viewModel.superUserOrderFormMode() && ofConfig.superUserAllowShippingPriceEdits">
                        <!-- ko if : ofConfig.bShowShipTotalMessage -->
                            <span data-bind="text: ofConfig.sShipTotalText"></span>
                        <!-- /ko -->
                        <!-- ko ifnot: ofConfig.bShowShipTotalMessage -->
                            <!-- ko if: ofConfig.bShowPriceText && total() == 0  -->
                                <span data-bind="text: ofConfig.sShipTotalText"></span>
                            <!-- /ko -->
                            <!-- ko if: !ofConfig.bShowPriceText || total() > 0 -->
                                <span data-bind="html: utils.formatMoney(total())"></span>
                            <!-- /ko -->
                        <!-- /ko -->
                    </span>
                    <div class="su-sv-inputs pull-right" data-bind="if: viewModel.superUserOrderFormMode() && ofConfig.superUserAllowShippingPriceEdits">
                        <button type="button" class="btn btn-mini btn-link su-price-reset" data-bind="visible: priceCalcType() == 'fixed',event: { click: viewModel.resetSuperUserShippingPrice } ">
                            <span data-bind="html: ofConfig.superUserResetPriceHelpText"></span>
                        </button>
                        <div class="input-prepend">
                            <span class="add-on">$</span>
                            <input type="text" class="text-right" data-bind="value: total().toFixed(2), event: { change: viewModel.superUserSetShipViaPrice }">
                        </div>
                        <span class="orig-price" data-bind="visible: false && priceCalcType() == 'fixed', html: '( ' + utils.formatMoney(rate()) + ' )'"></span>
                    </div>
                <!-- /ko -->
                <!-- ko if: !ofConfig.showPricingOrderEntry -->
                <div class="sv-hidden-price pull-right" data-bind="html: ofConfig.sShipTotalText"></div>
                <!-- /ko -->
            </label>
        <!-- /ko -->
    </div>
    <!-- ko if: shipViaChoices().length == 0 || !(shipViaChoices().find(function(item) { return item.eligible() })) -->
        <span class="alert alert-error">No Shipping Methods Available</span>
    <!-- /ko -->
    <!-- ko if: ofConfig.ShowShipViaDS && selectedShipVia.description -->
        <div id="shipping-ds0" class="alert alert-info alert-block without-close shipping-ds" data-bind="html: selectedShipVia.description">
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipperAccountSelector">
    <!-- ko if: selectedShipVia.collectShippingAccount() -->
        <div class="alert alert-info alert-block without-close shipping-account-info"
             data-bind="attr: { 'id' : 'shipping-account-info' + parseInt($context.$index() + 1) }">
            <div data-bind="attr: { 'id' : 'sv-collect-info-msg' + parseInt($context.$index() + 1) }">
                <h4>Select or add a shipping account</h4>
                <p>This shipping method requires that you provide your own shipper account number to cover the shipping charges.</p>
            </div>
            <div class="input-append shipping-account-select" data-bind="attr: { 'id' : 'shipping-account-select' + parseInt($context.$index() + 1) }, validationOptions: { messageTemplate: null, insertMessages: false }">

                <select class="selShipAcct" style="width: auto;" data-bind="
                    attr: {
                        'id' : 'selShipAcct' + parseInt($context.$index() + 1),
                        'name' : 'selShipAcct' + parseInt($context.$index() + 1)
                    },
                    options: selectedShipVia.shippingAccounts,
                    optionsText:
                        function(item){
                            if( ko.unwrap(item.name) != ''){
                                return  ko.unwrap(item.name) + ' (' + ko.unwrap(item.number) + ')';
                            }else{
                                return ko.unwrap(item.carrier) + ' (' + ko.unwrap(item.number) + ')';
                            }
                        },
                    value: selectedShipVia.shippingAccountId,
                    optionsValue: 'shippingAccountKey',
                    optionsCaption: 'Select an account...'
                "></select>
                <!-- ko if: ofConfig.superUserAllowShipperAccountEdits && selectedShipVia.shippingAccounts().length > 0 && selectedShipVia.shippingAccountId() != undefined -->
                    <a id="btnEditShipAcct1"
                        data-selshipacct_id="selShipAcct1"
                        class="btn btnEditShipAcct global-modal"
                        data-bind="
                            html: ofConfig.sShipAccountEditButtonText,
                            attr: {
                                href : 'sf_shipping_account_ae.asp?modal=1&key=' + selectedShipVia.shippingAccountId()
                            },
                            addModalHandler: { 'element' : $('.btnEditShipAcct.global-modal'), 'handler' : viewModel.genericModalComplete }
                        "></a>
                <!-- /ko -->
                <!-- ko if : ofConfig.superUserAllowShipperAccountAdds -->
                <a class="btn btnAddShipAcct global-modal"
                href="sf_shipping_account_ae.asp?modal=1"
                data-bind="
                        html : ofConfig.sShipAccountAddbuttonText,
                        addModalHandler: { 'element' : $('.btnAddShipAcct.global-modal'), 'handler' : viewModel.genericModalComplete },
                        attr : {
                            id : 'btnAddShipAcct' + parseInt($context.$index() + 1
                        }
                    "></a>
                <!-- /ko -->
            </div>
            <div data-bind="if: !selectedShipVia.shippingAccountId.isValid() && selectedShipVia.shippingAccounts().length > 0">
                <p class="alert alert-error">Please select or add a shipping account</p>
            </div>
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentGiftOptions">
    <div class="control-group">
        <label for="gift_msg" class="control-label" data-bind=" html : ofConfig.sShipmentCommentLabel"></label>
        <div class="controls">
            <div class="text-small gift-msg-help">
                <span data-bind=" html : ofConfig.sShipmentCommentHelpText"></span>
            </div>
            <textarea class="gift_msg__textarea" rows="3" maxlength="250" autocomplete="off" data-bind="value: comments, attr: { readonly: viewModel.orderPlaced }"></textarea>
            <span class="help-block text-small">Up to 250 characters</span>
        </div>
    </div>
</script>

<script type="text/html" id="cart.shipmentGiftOptionsSummary">


</script>

<script type="text/html" id="cart.productLeadTimes">
    <!-- ko if: ofConfig.bShowProductLeadTimes && ofConfig.productLeadTimesText != '' && leadTimeDays() > 0 -->
        <div
            class="text-small text-info"
            style="margin-bottom: 5px;"
            data-bind="html: ofConfig.productLeadTimesText.replace('<days>', leadTimeDays() )"
        >
        </div>
    <!-- /ko -->
</script>


<script type="text/html" id="cart.expectedShipDate">
    <span data-bind="visible: ofConfig.showExpectedShipDate && !ofConfig.UseRequestedDay, html: ofConfig.expectedShipDate.replace('<date>', moment(expectedShipDate()).format('MM/DD/YYYY') )"></span>
</script>

<!-- bound -->
<script type="text/html" id="cart.requestedShipDate">
    <div class="control-group"
            data-bind="visible: selectedShipVia">
        <label class="control-label" data-bind="html: ofConfig.requestedShipDateLabel"></label>
        <div class="controls">
        <!-- ko if: viewModel.orderPlaced -->
            <span class="requested-date" data-bind="text: requestedShipDate"></span>
        <!-- /ko -->
        <!-- ko ifnot: viewModel.orderPlaced -->
            <div class="input-append">
                <input type="text" class="input-medium"
                    style="background-color: white;cursor: pointer"
                    readonly="readonly"
                    data-bind="attr: { disabled: viewModel.orderPlaced, id: selectedShipVia.shipViaChoiceID }
                        , datepicker: requestedShipDate
                        , datepickerOptions: {
                            minDate: new Date(earliestShipDate()),
                            maxDate: moment(new Date()).add(ofConfig.shipCutoffNumDaysOut, 'days').toDate(), 
                            constrainInput: true,
                            showOn:'both',
                            buttonText: '<i class=\'icon-calendar\'></i>',
                            beforeShowDay: function (date) {
                                return [isValidRequestedDate(date)];
                            }
                        }">
            </div>
        <!-- /ko -->
        </div>
    </div>
</script>

<script type="text/html" id="cart.requestedShipDateSummary">
    <div class="control-group">
        <label class="control-label">Ship On</label>
        <div class="controls">
            <div class="uneditable-text" data-bind="text: requestedShipDate"></div>
        </div>
    </div>
</script>


<!-- bound -->
<script type="text/html" id="cart.addressInfo">
    <div class="control-group" data-bind="validationElement: $data.company">
        <label for="s_company" class="control-label">Name/Company</label>
        <div class="controls">
            <input type="text" id="s_company" class="input-xlarge" data-bind="value: $data.company">
            <span class="help-inline text-small">(optional)</span>
        </div>
    </div>
    <div class="control-group" data-bind="validationElement: $data.address1">
        <label for="s_add1" class="control-label">Street Address</label>
        <div class="controls">
            <input type="text" id="s_add1" class="input-xlarge" data-bind="value: $data.address1">
        </div>
    </div>
    <div class="control-group" data-bind="validationElement: $data.address2">
        <label for="s_add2" class="control-label">Address 2</label>
        <div class="controls">
            <input type="text" id="s_add2" data-bind="value: $data.address2">
            <span class="help-inline text-small">(optional)</span>
            <div class="help-block text-small">Apartment, Suite, Building, Floor, etc.</div>
        </div>
    </div>
    <div class="control-group" data-bind="validationElement: $data.country">
        <label for="s_country" class="control-label">Country</label>
        <div class="controls">
            <select id="s_country" data-bind="value: $data.country, options: countries, optionsText: 'countryName', optionsValue: 'iso3', optionsCaption: 'Select a country...', change: $data.loadStates">
            </select>
        </div>
    </div>
    <div class="control-group" data-bind="validationElement: $data.city">
        <label for="s_city" class="control-label">City</label>
        <div class="controls">
            <input type="text" id="s_city" data-bind="value: $data.city">
        </div>
    </div>
    <div class="control-group" data-bind="validationElement: $data.state">
        <label for="s_state" class="control-label">State / Province</label>
        <div class="controls">
            <select id="s_state" data-bind="value: $data.state, options: $data.stateChoices, optionsText: 'name', optionsValue: 'code', optionsCaption: 'Select a state...'">
            </select>
        </div>
    </div>
    <!-- div class="control-group" data-bind="validationElement: $data.County">
        <label for="s_county" class="control-label">County</label>
        <div class="controls">
            <input type="text" id="s_county" data-bind="value: $data.County">
        </div>
    </div -->
    <div class="control-group" data-bind="validationElement: $data.zipCode">
        <label for="s_zip" class="control-label">ZIP / Postal Code</label>
        <div class="controls">
            <input type="text" id="s_zip" class="input-small" data-bind="value: $data.zipCode">
        </div>
    </div>
    <div class="control-group" data-bind="visible: $data.hasOwnProperty('phone')">
        <label for="s_phone" class="control-label">Phone</label>
        <div class="controls">
            <input type="text" id="s_phone" data-bind="value: $data.phone">
            <div class="help-block text-small">Format: <span id="gc-number-2" class="gc-cs-link" title="Call with Google Voice">888-555-1234</span> xxxx</div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.shippingSummary">
    <!-- ko if: $data.length > 0 -->
        <div class="checkout-section-inner">
            <span data-bind="visible : viewModel.useMultiShipEditUI">Your order is being shipped to multiple locations.</span>
            <!-- ko ifnot : viewModel.useMultiShipEditUI -->
                <!-- ko template : { name: 'cart.addressSummaryInfo', data: $data[0].shipTo }--><!-- /ko-->
            <!-- /ko -->
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.addressSummaryInfo">
    <b>Shipping Address </b>
    <div data-bind=" forEach: $data " class="address-summary">
        <!-- ko if: attention -->
            <div data-bind="text: attention() + ', '"></div>
        <!-- /ko -->
        <!-- ko if: company -->
            <div data-bind="text: company()"></div>
        <!-- /ko -->
        <!-- ko if: firstName() || lastName() -->
            <div data-bind="text: firstName() + ' ' + lastName() + ', '"></div>
        <!-- /ko -->
        <div data-bind="text: address1, visible: address1"></div>
        <div data-bind="text: address2, visible: address2"></div>
        <div data-bind="text: address3, visible: address3"></div>
        <div data-bind="text: address4, visible: address4"></div>
        <div data-bind="text: address5, visible: address5"></div>
        <div data-bind="visible: city || state || zipCode">
            <span data-bind="text: city"></span><span data-bind="visible: city">, </span><span data-bind="text: state"></span> <span data-bind="text: zipCode"></span>
        </div>
        <span data-bind="text: country; visible: country"></span>
        <span data-bind="template: { name: 'cart.addressOptFields', foreach: getAddressOptFields() }"></span>
    </div>
</script>

<script type="text/html" id="cart.addressOptFields">
    <div data-bind="text: ofConfig['addressOpt'+$data+'Label'] + ': ' + $parent['opt'+$data]()"></div>
</script>

<script type="text/html" id="cart.shipmentItemListSummary">
    <!-- ko if: details().length > 0 -->
        <!-- ko foreach: details -->
            <div class="checkout-multiship-item media">
                <img
                    data-bind="attr : { alt: orderDetail.sku() + ' - ' + orderDetail.name(),
                            src: utils.buildImagePath(orderDetail.thumbnail()) }"
                    class="media-object"
                    onerror="utils.handleImageError(this)">
                <div class="media-heading">
                    <span data-bind="text: orderDetail.sku"></span> - <span data-bind="html: orderDetail.name"></span>
                    <!-- ko template: { name :'cart.productLeadTimes', data: orderDetail} --><!-- /ko -->
                </div>
                <small>Qty: <span data-bind="text: qtyToShip"></span> of <span data-bind="text: orderDetail.qty"></span>
                    <!-- ko if:ofConfig.showUom -->
                    &nbsp;<span class="uom" data-bind="text: orderDetail.uom"></span>
                    <!-- /ko -->
                </small>
            </div>
        <!-- /ko -->
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentItemList">
     <!-- ko if: details().length > 0 -->
        <div data-bind="foreach: details">
            <div class="media">
                <img
                    data-bind="visible: !oConfig.fastTrack, attr : { alt: orderDetail.sku() + ' - ' + orderDetail.name(),
                            src: utils.buildImagePath(orderDetail.thumbnail()) }"
                    class="media-object pull-left cart-item-pic"
                    onerror="utils.handleImageError(this)">
                <div class="media-body">
                    <!-- <div class="cart-item-sku" data-bind="text: orderDetail.sku"></div> -->
                    <p class="cart-item-name">
                        <span data-bind="html: orderDetail.name"></span>
                        <!-- ko template: { name: 'cart.backorderMessage', data: orderDetail, if: ofConfig.showBackorderMessage } --><!-- /ko -->
                        <!-- ko template: { name :'cart.productLeadTimes', data: orderDetail} --><!-- /ko -->
                        <!-- ko template: { name: 'cart.softgoods', data: orderDetail, if: ofConfig.showSoftGoodAuthorizations } --><!-- /ko -->
                        <!-- ko if: orderDetail.promoID -->
                            <span class="promo-icon" data-bind="attr: { 'title' : orderDetail.promoDescription() } ">P</span>
                        <!-- /ko -->
                    </p>
                    <p><span data-bind="html: orderDetail.instanceUnitPriceDisplay()"></span></p>
                    <div class="cart-item-total-qty">
                        <span class="badge" data-bind="text: qtyToShip()"></span>
                        &nbsp;
                        <!-- ko if:ofConfig.showUom -->
                        <span class="uom" data-bind="text: orderDetail.uom"></span>
                        <!-- /ko -->
                        <span data-bind="html: 'On ' + ofConfig.SavedCartLabel"></span>
                    </div>
                </div>
            </div>
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentItemTable">
    <!-- ko if: details().length > 0 && !viewModel.isOverLineLimit() -->
        <!-- ko template: { afterRender: function() { $(document).trigger('enhance.tablesaw'); } } -->
            <table class="tablesaw cart-table" data-tablesaw-mode="stack" role="presentation">
                <thead>
                    <th class="cart-desc__th" data-bind="text: ofConfig.labels.cartDesc"></th>
                    <th class="cart-qty__th" data-bind="text: ofConfig.labels.cartQty"></th>
                    <!-- ko if: ofConfig.showPricingOrderEntry -->
                    <th class="cart-price__th" data-bind="text: ofConfig.labels.cartItemPrice"></th>
                    <!-- /ko -->
                    <!-- ko if: ofConfig.showPricingOrderEntry -->
                    <th class="cart-total__th" data-bind="text: ofConfig.labels.cartTotal"></th>
                    <!-- /ko -->
                    <!-- ko if: ofConfig.allowProductEditInFinalStep && viewModel.recordType() != 'recurring' --><!-- /ko -->
                </thead>
                <tbody class="cart-row-std" data-bind="foreach: details">
                    <!-- ko if: orderDetail.parentProductID().trim() == '' || !orderDetail.hasParentInCart() -->
                    <tr>
                        <td>
                            <div class="media">
                                <img
                                    data-bind="visible: !oConfig.fastTrack,
                                            attr : { alt: orderDetail.sku() + ' - ' + orderDetail.name(),
                                            src: utils.buildImagePath(orderDetail.thumbnail()) },
                                            css: { 'print-hide': !ofConfig.showProductImagesWhenPrinting }"
                                    class="media-object pull-left cart-item-pic"
                                    onerror="utils.handleImageError(this)">
                                <div class="media-body">
                                    <div class="cart-item-sku" data-bind="text: orderDetail.sku, visible: !orderDetail.parentProductID().trim() || !orderDetail.hasParentInCart()"></div>
                                    <div class="cart-item-name" >
                                        <span data-bind="html: orderDetail.name"></span>
                                        <!-- ko template: { name: 'cart.backorderMessage', data: orderDetail, if: ofConfig.showBackorderMessage } --><!-- /ko -->
                                        <!-- ko template: { name :'cart.productLeadTimes', data: orderDetail} --><!-- /ko -->
                                        <!-- ko template: { name: 'cart.softgoods', data: orderDetail, if: ofConfig.showSoftGoodAuthorizations } --><!-- /ko -->
                                        <!-- ko if: viewModel.recordType() === 'recurring' -->
                                            <div class="recurring-summary" data-bind="html: viewModel.getRecurringLabel($data)"></div>
                                        <!-- /ko -->
                                        <!-- ko if: orderDetail.promoID -->
                                            <span class="promo-icon" data-bind="attr: { 'title' : orderDetail.promoDescription() } ">P</span>
                                        <!-- /ko -->
                                    </div>
                                    <p data-bind="if: ofConfig.AllowWarehouse && orderDetail.productWarehouse">
                                        <span data-bind="html: ofConfig.warehouseLabel + ' ' + orderDetail.productWarehouse.name()"></span>
                                    </p>
                                    <!-- ko if : ofConfig.bShowCartOptions && orderDetail.cartOption -->
                                        <p data-bind="text: orderDetail.cartOption"></p>
                                    <!-- /ko -->
                                    <!-- ko template: { name: "cart.additionalDetailLineInfo", data: orderDetail } --><!-- /ko -->
                                </div>
                            </div>
                        </td>
                        <td class="instance-qty-ship__td">
                            <span data-bind="text: qtyToShip"></span><span data-bind="if: ofConfig.showTotalQtyOnShipment"> of <span data-bind="text: orderDetail.qty"></span></span>
                            <!-- ko if:ofConfig.showUom -->
                            &nbsp;<span class="uom" data-bind="text: orderDetail.uom"></span>
                            <!-- /ko -->
                        </td>
                        <!-- ko if: ofConfig.showPricingOrderEntry -->
                        <td class="instance-unit-price__td">
                            <span data-bind="html: orderDetail.instanceUnitPriceDisplay()"></span>
                        </td>
                        <td class="instance-ext-price__td">
                            <span data-bind="html: utils.formatMoney(orderDetail.instanceExtPrice())"></span>
                        </td>
                        <!-- /ko -->

                        <!-- ko if: !ofConfig.showPricingOrderEntry -->
                        <td class="instance-hidden-price__td" data-bind="html: utils.drawHidePriceMessage()"></td>
                        <!-- /ko -->

                            <!-- ko if: ofConfig.allowProductEditInFinalStep && viewModel.recordType() != 'recurring' -->
                            <td class="recurring__td">
                                <!-- ko template: { name: 'cart.productInlineEditLinks', data: orderDetail } --><!-- /ko -->
                            </td>
                            <!-- /ko -->
                        </tr>


                        <tr class="cart-row-std__config-row -no-border-top" data-bind="if: orderDetail.configuratorJson.choices">
                            <td class="cart-row-std__config-col" colspan="5">
                                <!-- ko template: { name: "cart.configOptions", data: orderDetail } --><!-- /ko -->
                            </td>
                        </tr>


                        <!-- ko if:orderDetail.editing() && viewModel.mainProduct() -->
                        <tr>
                            <td colspan="5">
                                <div class="detail-child-selector">
                                    <span data-bind="template: { name: 'catalog.child_selectors', if: viewModel.mainProduct().childSelectors, data: viewModel.mainProduct().childSelectors }"></span>
                                </div>
                                <!-- ko template: { name:'catalog.atc_full', data:viewModel.mainProduct().selectedProduct, if:viewModel.mainProduct } --><!-- /ko -->
                            </td>
                        </tr>
                        <!-- /ko -->
                    <!-- /ko -->
                </tbody>
            </table>
        <!-- /ko -->
    <!-- /ko -->
    <!-- ko if: viewModel.isOverLineLimit() -->
        <div class="well cart-table" data-bind="html: ofConfig.tooManyLinesMessage"></div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.additionalDetailLineInfo">
</script>

<script type="text/html" id="cart.configOptions">
    <!-- ko if : configuratorJson.choices -->
        <div class="config-options">
            <div class="config-options__title">
                <button class="config-options__toggle"
                        data-bind="click:
                            function(e) {
                                $('.config-options__content').slideToggle();
                                $('.config-options').toggleClass('-closed');
                            }">
                    <span class="config-options__type" style="font-weight: bold;" data-bind="text: configuratorJson.configType() === 'cartoptions' ? 'Options' : 'Configuration Options'"></span>
                    &nbsp;<i class="fas fa-angle-down"></i>
                </button>
                <span class="config-options__details" data-bind="visible: configuratorJson.configType() !== 'cartoptions'">
                    <!-- ko template: { name: 'cart.productEditLink', data: { title: 'Edit Configuration', linkText: '<small>Edit</small>', detailLine: $data } } --><!-- /ko -->
                    <!-- ko template: { name: 'cart.instanceCloneLink', data: { detailLine: $data }, visible: oConfig.showCloneInstanceLink } --><!-- /ko -->
                </span>
            </div>
            <div class="config-options__content">
                <ul class="config-options__group" data-bind="foreach: configuratorJson.choices">
                    <li class="config-options__item"><strong><span data-bind="text: questionText"></span></strong> <span data-bind="text: answerText"></span></li>
                </ul>
                <!-- ko if: instanceChildren.length > 0 -->
                <table class="tablesaw cart-table config-options__cart-table" role="presentation">
                    <thead class="config-options__thead">
                        <th class="config-options__qty-title">Qty</th>
                        <th class="config-options__price-title">Product Price</th>
                        <th class="config-options__desc-title">Description</th>
                    </thead>
                    <tbody class="cart-row-std config-options__tbody" data-bind="foreach: instanceChildren">
                        <tr>
                            <td class="config-options__qty-text" data-bind="text: qty"></td>
                            <td class="config-options__price-text"><span data-bind="html: utils.formatMoney( (priceBeforeAdjustment() || price()) )"></span></td>
                            <td class="config-options__desc-text" data-bind="html: name"></td>
                        </tr>
                    </tbody>
                </table>
                <!-- /ko -->
            </div>
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.addAddressButton">
    <a
        type="button"
        class="global-modal btn btn-default"
        data-size="full"
        data-title="Add Shipping Address"
        data-bind="
            visible: ofConfig.bAllowShipToAdds,
            attr: { 'href' : 'account.asp?modalaction=addshipto&modal=1&o_key=' + viewModel.orderKey() },
            addModalHandler: { 'element' : $('#shipping_address_summary .global-modal'), 'handler' : addAddressHandler }">
            <i class="icon-plus icon-fixed-width"></i>Add Address
    </a>
</script>

<script type="text/html" id="cart.addProductButton">

    <div class="form-buttons input-append">
        <label>Find a Product</label>
        <div class="add-product-actions" >
            <a
                class="btn global-modal add-product-actions__bulk"
                data-size="full"
                data-title="Add Products"
                onclick="$('#handle-modal-exit').val(true)"
                data-bind="
                    attr: {
                        'href' : 'queue_atc.asp?modalaction=addProduct&modal=1&o_key=' + viewModel.orderKey()
                    },
                    visible: ofConfig.showBulkAdd
                "
            >Bulk Add</a>
            <a
                class="btn global-modal add-product-actions__browse"
                data-size="full"
                data-title="Add Products"
                onclick="$('#handle-modal-exit').val(true)"
                data-bind="
                    attr: { 'href' : 'pc_combined_results.asp?modalaction=addProduct&modal=1&o_key=' + viewModel.orderKey() }"
            >Browse/Search</a>
            <a
                class="btn global-modal add-product-actions__from-fave"
                data-size="full"
                data-title="Add Products"
                onclick="$('#handle-modal-exit').val(true)"
                data-bind="
                    attr: { 'href' : 'favorites_lists.asp?modalaction=addProduct&modal=1&o_key=' + viewModel.orderKey() }"
            >From Favorites</a>
            <a
                class="btn global-modal add-product-actions__from-so"
                data-size="full"
                data-title="Add Products"
                onclick="$('#handle-modal-exit').val(true)"
                data-bind = "
                    attr: { 'href' : 'sales_orders.asp?modalaction=addProduct&modal=1&o_key=' + viewModel.orderKey()}"
            >From Sales Order</a>
            <a
                class="btn global-modal add-product-actions__from-inv"
                data-size="full"
                data-title="Add Products"
                onclick="$('#handle-modal-exit').val(true)"
                data-bind = "
                    attr: { 'href' : 'invoices.asp?modalaction=addProduct&modal=1&o_key=' + viewModel.orderKey()}"
            >From Invoice</a>
        </div>
    </div>
</script>

<style type="text/css">
    .media.noborder, .tablesaw-stack tbody tr.noborder, .item-list .media.noborder {
        border-bottom:0;
        margin-bottom:0;
        padding-bottom:0;
        border-top: 0;
        display: none;
    }

    .tablesaw tbody tr, .item-list .media  {
        border-top: 1px solid #dfdfdf;
        border-bottom: 0;
    }
    .item-list .media {
        padding-top: 10px;
    }

    .configOptions {
        list-style-type: none;
        margin-right: 10px;
    }
</style>

<script type="text/html" id="cart.itemCard">

        <tr class="item-card">

            <td class="item-card__cart-item">
                <b class="tablesaw-cell-label">Description</b>
                <figure class="item-card__cart-item-img" data-bind="visible: !oConfig.fastTrack && parentProductID().trim() && hasParentInCart()"></figure>
                <figure class="item-card__prod-info-wrapper">
                    <img data-bind="attr : { alt: sku() + ' - ' + name(),
                                    src: utils.buildImagePath(commodity.pic.thumb()) },
                                    visible: !oConfig.fastTrack && (!parentProductID().trim() || !hasParentInCart() )"
                        class="item-card__prod-info-img"
                        onerror="utils.handleImageError(this)">

                    <figcaption class="item-card__prod-text-wrapper">
                        <b class="item-card__prod-name" data-bind="html: name"></b>

                        <!-- ko if : promoID -->
                        <span class="item-card__promo-icon promo-icon" data-bind="attr: { 'title' : promoDescription() } ">P</span>
                        <!-- /ko -->

                        <div class="item-card__prod-sku text-xsmall muted" data-bind="text: sku, visible: !parentProductID().trim() || !hasParentInCart()"></div>

                        <p data-bind="if: ofConfig.AllowWarehouse && productWarehouse">
                            <span data-bind="html: ofConfig.warehouseLabel + ' ' + productWarehouse.name()"></span>
                            <span data-bind="if: viewModel.allowWarehouseSelection() && !viewModel.useMultiShipEditUI()">
                                <!-- ko template: { name: 'cart.productEditLink', data: { title: 'Change Warehouse', linkText: 'Change Warehouse', detailLine: $data } } --><!-- /ko -->
                            </span>
                        </p>
                        <!-- ko template: { name: 'cart.backorderMessage', if: ofConfig.showBackorderMessage } --><!-- /ko -->
                        <!-- ko template: 'cart.productLeadTimes' --><!-- /ko -->
                        <!-- ko template: { name: 'cart.softgoods', if: ofConfig.showSoftGoodAuthorizations } --><!-- /ko -->

                        <div class="item-card__prod-edit" data-bind="if: viewModel.allowWarehouseSelection() && !viewModel.useMultiShipEditUI">
                            <!-- ko template: { name: 'cart.productEditLink', data: { title: 'Change Warehouse', linkText: 'Change Warehouse', detailLine: $data } } --><!-- /ko -->
                        </div>

                        <!-- ko if : ofConfig.bShowCartOptions && cartOption -->
                        <p class="item-card__cart-opt" data-bind="text: cartOption"></p>
                        <!-- /ko -->

                        <!-- ko template: { name: 'cart.additionalDetailLineInfo', data: $data } --><!-- /ko -->
                    </figcaption>
                </figure>
            </td>

            <td class="item-card__price">
                <b class="tablesaw-cell-label">Unit Price</b>
                <span class="item-card__original-price" data-bind="html: ofConfig.showPricingOrderEntry ? instanceUnitPriceDisplay : utils.drawHidePriceMessage()"></span>
            </td>

            <!-- ko if :  viewModel.useMultiShipEditUI() || $data.qtyDisplayType() =='text' || !viewModel.allowProductAdds() && !$data.editing() -->
                <td class="cart-item-price__qty">
                    <b class="tablesaw-cell-label">Qty</b>
                    <label>
                        <input class="cart-item-price__qty-input" type="text" data-bind="attr: { value: viewModel.getTotalQty(instance()) }" disabled/>
                        <!-- ko if:ofConfig.showUom -->
                            <span class="cart-item-price__uom" data-bind="text: $data.uom"></span>&nbsp;
                        <!-- /ko -->
                        <span class="cart-item-price__saved-cart-label" data-bind="html: 'On ' + ofConfig.SavedCartLabel"></span>
                    </label>
                </td>
            <!-- /ko -->

            <!-- ko if : !viewModel.useMultiShipEditUI() && $data.qtyDisplayType() =='input' &&  viewModel.allowProductAdds() && !$data.editing()-->
                <td class="cart-item-price__qty">
                    <b class="tablesaw-cell-label">Qty</b>
                    <div class="cart-item-price__qty-wrapper">
                        <input type="number" class="cart-item-price__qty-input"
                            data-bind="
                                value: qty,
                                attr: {
                                    'id' : 'qty-ship-' + orderDetailKey(),
                                    'min' : minQty() || 1,
                                    'step' : qtyIncrement() || 1,
                                    'max' : maxQty() || undefined
                                },
                                validateQty
                            ">
                        <label class="cart-item-price__qty-label">
                            <!-- ko if:ofConfig.showUom -->
                                <span class="cart-item-price__uom" data-bind="text: $data.uom"></span>
                            <!-- /ko -->
                            <span class="cart-item-price__saved-cart-label" data-bind="html: 'On ' + ofConfig.SavedCartLabel"></span>
                            <span
                                class="cart-item-price__order-detail-key"
                                data-bind="
                                    attr:
                                    {
                                        'data-key' : orderDetailKey()
                                    },
                                    visible:  minQty() > 1 || maxQty() > 1 || qtyIncrement() > 1">
                                <a href="#0"
                                    class="cart-item-price__info-btn"
                                    data-trigger="hover"
                                    data-html="true"
                                    data-placement="top"
                                    data-bind="popover, attr: {
                                        'data-content': oConfig.labels.minQty + ': ' + minQty() + '<br>' + oConfig.labels.step  + ': ' + qtyIncrement() + '<br>' + oConfig.labels.maxQty + ': ' + maxQty()
                                    }">
                                    <i class="fas fa-question-circle"></i>
                                </a>
                            </span>
                        </label>
                    </div>
                </td>
            <!-- /ko -->

            <!-- ko if: viewModel.recordType() === 'recurring' && !editing()-->
            <td class="item-card__order-items-recurring">
                <b class="tablesaw-cell-label">Qty</b>
                <div class="item-card__order-items-label visible-xs visible-sm">Schedule</div>
                <!-- ko template: { name: 'cart.recurringLineDetails' } --><!-- /ko -->
            </td>
            <!-- /ko -->

            <td class="item-card__total">
                <b class="tablesaw-cell-label">Total</b>
                <div class="item-card__cart-ext-price" data-bind="html: ofConfig.showPricingOrderEntry ? utils.formatMoney(price() * viewModel.getTotalQty(instance())) : utils.drawHidePriceMessage()"></div>
            </td>

            <!-- ko if:$data.editing() && viewModel.mainProduct() -->
                <td class="item-card__edit">
                    <!-- ko template: { name: 'catalog.detail_info', data:viewModel.mainProduct } --><!-- /ko -->

                    <div class="item-card__child-selector-wrapper">
                        <span class="item-card__child-selector" data-bind="template: { name: 'catalog.child_selectors', if: viewModel.mainProduct().childSelectors, data: viewModel.mainProduct().childSelectors }"></span>
                    </div>

                    <!-- ko template: { name:'catalog.atc_full', data:viewModel.mainProduct().selectedProduct } --><!-- /ko -->
                </td>
            <!-- /ko -->

            <td class="item-card__prod-edit prod-edit">
                <!-- ko if: viewModel.showRemoveLink($data) -->
                    <a class="prod-edit__del-btn text-danger" role="button" data-bind="event: { click: viewModel.removeProduct }, visible: !editing()" title="Remove this product from your Order?">
                        Remove
                    </a>
                <!-- /ko -->

                <!-- ko if: viewModel.allowProductAdds() && ofConfig.allowProductEditInEditView -->
                    <!-- ko template: { name: 'cart.productInlineEditLinks' } --><!-- /ko -->
                <!-- /ko -->

            </td>
        </tr>

        <tr class="config-options__row -no-border-top" data-bind="if: configuratorJson.choices">
            <td class="config-options__column" colspan="5">
                <!-- ko template: { name: 'cart.configOptions', data: $data } --><!-- /ko -->
            </td>
        </tr>

        <tr id="cartAdvSettings" class="item-card__adv-settings collapse -adv-settings">
            <td class="item-card__adv-settings-cell"></td>
            <td class="item-card__adv-settings-cell">
                    <b class="tablesaw-cell-label">Change Price</span>&nbsp;<a href="javascript:void(0);" class="price-helper__help-tip-tooltip" data-bind="tooltip:{}" title="Change any input below and all other inputs will update automatically.">

                    <i class="fas fa-question-circle"></i></a></b>
                <!-- ko if : viewModel.superUserOrderFormMode() && ofConfig.superUserAllowProductPriceEdits && $data.qtyDisplayType() == 'input' && !$data.editing() -->
                    <!-- ko if: ofConfig.showSUPriceControls && (!isNaN(commodity.cost()) || !isNaN(commodity.retailPrice())) -->
                        <!-- ko template: 'cart.priceHelper' --><!-- /ko -->
                    <!-- /ko -->
                <!-- /ko -->
            </td>
            <td class="item-card__adv-settings-cell">
                <b class="tablesaw-cell-label">Change Qty Limits</span>&nbsp;<a href="javascript:void(0);" class="qty-ctrl-settings__help-tip-tooltip" data-bind="tooltip:{}" title="Customers can change the qty, but only within these limits.">

                <i class="fas fa-question-circle"></i></a></b>
                <!-- ko if : viewModel.allowQtyControls() -->
                    <!-- ko template: 'cart.qtyControlSettings' --><!-- /ko -->
                <!-- /ko -->
            </td>
            <td class="item-card__adv-settings-cell"></td>
            <td class="item-card__adv-settings-cell"></td>
        </tr>


</script>

<script type="text/html" id="cart.productInlineEditLinks">
    <span class="product-edit">
        <a href="" style="display: block" data-bind="event: { click: viewModel.editProduct }, visible: !editing()" title="Edit this Product" class="product-edit__edit">
            <small>Edit</small>
        </a>
        <a href="" style="display: block; wrap: none;" data-bind="event: { click: viewModel.cancelEditProduct }, visible: editing" title="Cancel edits" class="product-edit__cancel">
            <small>cancel</small>
        </a>
    </span>
</script>

<script type="text/html" id="cart.instanceCloneLink">
    <a class="global-modal instanceCloneLink"
        data-bind="attr: { href: 'clone_instances.asp?modal=1&payment=1&source_key=' + viewModel.orderKey() + '&source_instances=' + detailLine.instance(),
                            'data-title': oConfig.labels.cloneInstanceTitle },
                            html: oConfig.labels.cloneInstanceLink,
                            addModalHandler: { 'element' : $('.instanceCloneLink'),
                                                'handler' : viewModel.genericModalComplete
                            },
                    visible: !viewModel.completed()"></a>
</script>

<script type="text/html" id="cart.productEditLink">
    <a class="global-modal productEditLink"
        data-bind="attr: { href: 'pc_product_detail.asp?key=' + detailLine.productID() + '&od_key=' + detailLine.orderDetailKey(),
                            'data-title': title },
                            html: linkText,
                            addModalHandler: { 'element' : $('.productEditLink'),
                                                'handler' : viewModel.genericModalComplete
                            },
                    click: function() { utils.setActiveQuote(viewModel.orderKey()); return true; },
                    visible: !viewModel.completed() && viewModel.allowProductAdds()"
        data-size="large"></a>
</script>

<script type="text/html" id="cart.selectShipTo">

    <!-- ko if: ofConfig.useProductSummaryTableView -->
        <div class="row-fluid checkout-multiship-row single-ship table-view">
            <div class="ship-to-select u-checkout-well" data-bind="visible: shipments().length > 0 ">
                <h3 class="u-checkout-well__title">Select Address</h3>
                <div class="shipping-actions__button" data-bind="if: ofConfig.bAllowShipToAdds">
                    <!-- ko template: 'cart.addAddressButton' --><!-- /ko -->
                </div>
                <div class="address-select">
                    <div class="address-select__group input-append" data-bind="with: shipments()[0]">
                        <!-- ko template: 'cart.shipToSelectOptGroups'--><!-- /ko -->
                    </div>

                </div>
            </div>
            <!-- ko template: { name: 'cart.productQuickAdd', if: viewModel.allowProductAdds() && ofConfig.showProductQuickAddInEditView } --><!-- /ko -->
            <div class="items-on-order u-checkout-well">
                <h3 class="u-checkout-well__title" data-bind="html: 'Products On ' + ofConfig.SavedCartLabel "></h3>
                <!-- ko if: viewModel.superUserOrderFormMode() && ofConfig.superUserAllowProductPriceEdits && itemsOnOrder().length -->
                    <span class="product-settings">
                        <a id="onOrderAdvBtn" data-bind="event: { click: function() { $('#cartAdvSettings.collapse').toggleClass('in'); $('#onOrderAdvBtn').toggleClass('active'); } }" title="Advanced Settings?" class="btn btn-default on-order__adv-settings">
                            <i class="fas fa-cog"></i> <span class="on-order__adv-settings-text"> Price/Qty Overrides</span>
                        </a>
                    </span>
                <!-- /ko -->
                <table class="item-list tablesaw tablesaw-stack -tablesaw-break0" role="presentation">
                        <thead data-bind="if: $data.itemsOnOrder().length > 0" class="item-list__thead">
                            <tr class="item-list__head-row">
                                <th class="item-list__head-title">Description</th>
                                <th class="item-list__head-title">Unit Price</th>
                                <th class="item-list__head-title">Qty</th>
                                <th class="item-list__head-title">Total</th>
                                <th class="item-list__head-title">Remove</th>
                            </tr>
                        </thead>
                        <tbody data-bind="foreach: $data.itemsOnOrder">
                            <!-- ko if: parentProductID().trim() == '' || !hasParentInCart() -->
                                <!-- ko template: 'cart.itemCard'--><!-- /ko -->
                            <!-- /ko -->
                        </tbody>
                    <div class="alert alert-info" data-bind="visible: $data.detailLines().length == 0, html: 'There are currently no Products on this ' + oConfig.labels.savedCarts + '. Please use the \'Add Products\' section above to search for and add products.'"></div>
                </table>
            </div>
        </div>
    <!-- /ko -->

    <!-- ko ifnot: ofConfig.useProductSummaryTableView -->
        <div class="row-fluid checkout-multiship-row single-ship">
            <div class="ship-to-select span6" data-bind="if: shipments().length > 0 ">
                <div class="address-select">
                    <label>Ship to this address</label>
                    <div class="address-select__group input-append" data-bind="with: shipments()[0]">
                        <!-- ko template: 'cart.shipToSelectOptGroups'--><!-- /ko -->
                    </div>
                </div>
            </div>
            <div class="items-on-order span6">
                <label data-bind="html: 'Products on ' + ofConfig.SavedCartLabel + ':'"></label>
                <div class="item-list">
                    <div data-bind="foreach: $data.itemsOnOrder">
                        <!-- ko if: parentProductID().trim() == '' || !hasParentInCart() -->
                        <div class="media" data-bind="template: 'cart.itemCard'"></div>
                        <!-- /ko -->
                    </div>
                </div>
            </div>
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipToSelectOptGroups">
    <!-- ko if: ofConfig.useAddressFindPopup -->
        <!-- ko template: { name: 'cart.addressFinder', data: shipTo } --><!-- /ko -->
        <!-- ko  if: $data.shipTo().key-->
        <a class="btn edit-shipto global-modal"
            data-title="Edit Shipping Address"
            data-size="large" data-bind="
                addModalHandler: { 'element' : $('.edit-shipto'), 'handler' : function(data){  changeAddressFromFinder(data, $data) } },
                attr: {
                    'href': 'account.asp?modalaction=editshipto&modal=1&o_key=' + viewModel.orderKey() + '&sha_id=' + $data.shipTo().key()
                },
                visible: viewModel.allowShaEdits() && $data.shipTo().global() == 0
            ">Edit</a>
        <!-- /ko -->
    <!-- /ko -->
    <!-- ko if: !ofConfig.useAddressFindPopup -->
        <select class="shipto-select"
                data-bind="
                    foreach: viewModel.addressTypes(),
                    value: shipTo

        ">
            <optgroup data-bind="attr: {'label': $data.label }, foreach: $parent.availableAddresses">
            <!-- ko if: $data.global() == $parent.global -->
                <option data-bind="
                    value: $data,
                    text:  $data.name()"></option>
            <!-- /ko -->
            </optgroup>
        </select>
        <a class="btn edit-shipto global-modal"
            data-title="Edit Shipping Address"
            data-size="large" data-bind="
                addModalHandler: { 'element' : $('.edit-shipto'), 'handler' : function(data){ apiGetShippingAddresses(data.sha_key.value); } },
                attr: {
                    'href': 'account.asp?modalaction=editshipto&modal=1&o_key=' + viewModel.orderKey() + '&sha_id=' + $data.shipTo().key()
                },
                visible: viewModel.allowShaEdits() && $data.shipTo().global() == 0
            ">Edit</a>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.addressFinder">
    <div id="address_selector" class="formrow ">
        <div class="rightcol controls">
            <input
                type="text"
                name="sha_key_disp"
                size="39"
                data-bind="
                    value: name,
                    attr: { 'id': viewModel.getAddressFinderId('sha_key_disp', $data, $parent) }
                "
                readonly />
            <a
                role="button"
                data-bind="
                    attr: {
                        'id': viewModel.getAddressFinderId('address_finder', $data, $parent),
                        'name': viewModel.getAddressFinderId('address_finder', $data, $parent),
                        'href': encodeURI('modal_search.asp?sql_id=Base_Shipping_Addresses&version=0&revision=2&cat_id=&extrafields=nm,s_add1,s_add2,s_city,s_state,s_zip,CONCAT(s_add1, \', \', s_add2, \' (\', sha.nm, \')\') as sha_key_disp&filter=|AND|(searchexact~sha.status~1|OR|isnull~sha.status)|AND|(searchexactnot~hide_in_cart~1|OR|isnull~hide_in_cart)|AND|(((isnull~sha.globaladdress~|OR|searchexactnot~sha.globaladdress~@1))|OR|(|AND|(searchexact~sha.c_id~|OR|searchexact~sha.a_id~)))&orderby=sha.s_add1~&cols=nm;Nickname;nm;;nm;1;1;;1;~s_add1;Address+1;sha.s_add1;;sha.s_add1;1;1;;1;~s_city;City;sha.s_city;;sha.s_city;1;1;;1;~s_state;State;sha.s_state;;sha.s_state;1;1;;1;~s_zip;Zip;sha.s_zip;;sha.s_zip;1;1;;1;&fields=sha_key_disp;sha_key_disp;text~sha_key;sha_key;text&drawstyles=1&classicstyle=0&primary=sha_key&usedistinct=0&showactions=1&use_aqt=0&loadblank=' + ofConfig.addressFindBlankOnLoad )
                    },
                    addModalHandler: { 'element' : $('#' + viewModel.getAddressFinderId('address_finder', $data, $parent)), 'handler' : function(data){ changeAddressFromFinder(data, $parent) } }"
                class="btn btn-primary global-modal"
                data-size="large"
                data-title="Your Address Book" >
            Find</a>
        </div>
    </div>
</script>

<script type="text/html" id="cart.assignItemsToShipTos">
    <!-- ko template: { name: 'cart.productQuickAdd', if: viewModel.allowProductAdds() && ofConfig.showProductQuickAddInEditView } --><!-- /ko -->
    <div class="checkout-multiship" data-bind="foreach: $data">
        <!-- ko if: parentProductID().trim() == '' || !hasParentInCart() -->
        <div class="checkout-multiship__row u-checkout-well">
            <table class="checkout-multiship__table tablesaw tablesaw-stack -tablesaw-break0" role="presentation">
                <thead class="item-list__thead">
                    <tr class="item-list__head-row">
                        <th class="item-list__head-title">Description</th>
                        <th class="item-list__head-title">Unit Price</th>
                        <th class="item-list__head-title">Qty</th>
                        <th class="item-list__head-title">Total</th>
                        <th class="item-list__head-title">Remove</th>
                    </tr>
                </thead>
                <tbody class="checkout-multiship__item">
                    <!-- ko template: 'cart.itemCard'--><!-- /ko -->
                </tbody>
            </table>

            <div class="checkout-multiship__address u-well">
                <!-- div data-bind="foreach: viewModel.itemShipToMap().filter(function(shipToMap){ return shipToMap.instance() == instance() }) " -->
                <div class="checkout-multiship__address-items" data-bind="foreach: viewModel.itemShipToMap().filter(function(shipToMap){ return shipToMap.orderDetailKey == orderDetailKey() }) ">
                    <div class="input-prepend input-append">
                        <input type="number" class="qty-input"
                            data-bind="
                                value: qty,
                                attr: {
                                    'id' : 'qty-ship-' + orderDetailKey,
                                    'min' : $parent.minQty() || 1,
                                    'step' : $parent.qtyIncrement() || 1,
                                    'max' : $parent.maxQty() || undefined
                                },
                                disable: $parent.qtyDisplayType() == 'text',
                                validateQty
                            ">
                        <!-- ko template: 'cart.shipToSelectOptGroups'--><!-- /ko -->
                        <!-- ko if: $index() != 0 -->
                            <span class="remove-shipto__add-on add-on">
                                <a class="remove-shipto__button btn btn-default" href="#" data-bind="click: removeItemToShipToMap, attr: { 'data-index' : $index}"><i class="icon-remove"></i></a>
                            </span>
                        <!-- /ko -->
                    </div>
                    <button
                        class="btn btn-link btn-small split-this"
                        type="button"
                        data-bind="
                            attr : {
                                'data-split' : parseFloat(qty())
                            },
                            visible: qty() > minQty() && (parseFloat(qty()) >= parseFloat(qtyIncrement() * 2)) && $parent.qtyDisplayType() == 'input',
                            text: ofConfig.splitThisItemText,
                            click: moveItemToNewShipTo
                        ">
                    </button>
                </div>
            </div>
        </div>
        <!-- /ko -->
    </div>
</script>

<script type="text/html" id="cart.itemShipToMapPreview">
     <table class="tablesaw" data-tablesaw-mode="stack" role="presentation">
        <thead>
            <th>#</th>
            <th>Ship to address</th>
            <th>Products in shipment</th>
            <th>&nbsp;</th>
        </thead>
        <tbody data-bind="foreach: _.uniq(_.invoke(viewModel.itemShipToMap(),'shipTo'))">
            <tr>
                <td>
                    <!-- ko template: { name: 'cart.addressSummaryInfo', data: $data } --><!-- /ko -->
                </td>
                <td>
                    <span class="" data-bind="foreach: viewModel.itemShipToMap().filter(function(shipToMap){ return shipToMap.shaKey() == $data.key() }) ">
                        <ul class="unstyled" data-bind="foreach: viewModel.itemsOnOrder().filter(function(item){ return item.orderDetailKey() == orderDetailKey })">
                            <li><span class="badge" data-bind="text: qty"></span> <span data-bind="html : name"></span></li>
                        </div>
                    </span>
                </td>
                <td class="cell-center">
                    <button class="btn btn-inverse"><i class="icon-trash"></i></button>
                </td>
            </tr>
        </tbody>
    </table>
</script>

<script type="text/html" id="cart.itemsList">
    <table class="tablesaw table cart-table tablesaw-stack" data-tablesaw-mode="stack" role="presentation">
        <!-- ko if: viewModel.useMultiShipEditUI() && !viewModel.allItemsAllocated() -->
            <thead>
                <th></th>
                <th>
                    Description
                </th>
                <th>
                    Qty
                </th>
                <th>
                    Product Price
                </th>
                <th>
                    Total
                </th>
            </thead>
        <!-- /ko -->
        <!-- ko if: viewModel.allItemsAllocated() || !viewModel.useMultiShipEditUI() -->
            <thead>
                <th>
                    Description
                </th>
                <th>
                    Qty
                </th>
                <th>
                    Product Price
                </th>
                <th>
                    Total
                </th>
            </thead>
        <!-- /ko -->
        <tbody class="cart-row-std" data-bind="foreach: $data">
            <!-- ko if: parentProductID().trim() == '' || !hasParentInCart() -->
            <tr data-bind='css: { "alert alert-warning": viewModel.useMultiShipEditUI() && allocatedQty() !== qty() }'>
                <!-- ko if: viewModel.useMultiShipEditUI() && !viewModel.allItemsAllocated() -->
                    <td>
                        <span data-bind="if: qty() != allocatedQty()"><i class="icon-warning-sign"></i> <span data-bind="text: qty() - allocatedQty()"></span> unallocated</span>
                    </td>
                <!-- /ko -->
                <td class="media">
                    <img
                        data-bind="visible: !oConfig.fastTrack,attr : { alt: sku() + ' - ' + name(),
                                src: utils.buildImagePath(commodity.pic.thumb()) }"
                        class="media-object pull-left cart-item-pic"
                        onerror="utils.handleImageError(this)">
                    <div class="media-body">
                        <div class="cart-item-sku" data-bind="text: sku"></div>
                        <!-- ko if : ofConfig.bShowCartOptions && cartOption -->
                        <p data-bind="text: cartOption"></p>
                        <!-- /ko -->
                        <!-- ko template: { name: "cart.configOptions", data: $data } --><!-- /ko -->
                        <!-- ko template: { name: "cart.additionalDetailLineInfo", data: $data } --><!-- /ko -->
                        <!-- ko if: viewModel.recordType() === 'recurring' -->
                            <div class="flex-table-column order-items-recurring">
                                <div class="order-items-label visible-xs visible-sm">Schedule</div>
                                <!-- ko template: { name: 'cart.recurringLineDetails' } --><!-- /ko -->
                            </div>
                        <!-- /ko -->
                        <div class="cart-item-name" >
                            <span data-bind="html: name"></span>
                            <!-- ko if: promoID -->
                                <span class="promo-icon" data-bind="attr: { 'title' : promoDescription() } ">P</span>
                            <!-- /ko -->
                        </div>
                    </div>
                </td>
                <td>
                    <span data-bind="text: qty"></span>
                    <!-- ko if: viewModel.useMultiShipEditUI -->
                        &nbsp;(<span data-bind="text: allocatedQty"></span> assigned)
                    <!-- /ko -->
                </td>
                <td>
                    <span data-bind="html: utils.formatMoney(priceBeforeAdjustment() || price())"></span>
                </td>
                <td>
                    <span data-bind="html: utils.formatMoney((priceBeforeAdjustment() || price()) * qty())"></span>
                </td>
            </tr>
            <!-- /ko -->
        </tbody>
    </table>
</script>

<script type="text/html" id="cart.priceHelper">
    <span class="price-helper">
        <b class="price-helper__help-tip">
            <span class="price-helper__help-tip-text">Change Price</span>&nbsp;<a href="javascript:void(0);" class="price-helper__help-tip-tooltip" data-bind="tooltip:{}" title="Change any input below and all other inputs will update automatically.">
                <i class="fas fa-question-circle"></i>
            </a>
        </b>
        <label class="price-helper__price-override">
            <div class="input-prepend input-append price-helper__override-group">
                <span class="add-on">$</span>
                <input type="number" class="input-small price-helper__override-input" step=".01" data-bind="
                    value: price,
                    attr: {
                        'id' : 'price-' + orderDetailKey()
                    },
                    event: { change: viewModel.setItemShipToMapPrice($data) }
                ">
                <span class="price-helper__help-tip add-on">
                    Default Price
                </span>
                <!-- ko if: priceCalculationType() == 'fixed' -->
                    <a href="#0" class="add-on price-helper__override-action" data-bind="event: { click: viewModel.resetSuperUserPriceOverride }, html: ofConfig.superUserResetPriceHelpText"></a>
                <!-- /ko -->
            </div>
        </label>
        <p class="price-helper__min text-small text-info" data-bind="if: viewModel.superUserRestrictMinPrice() && superUserMinPrice() != null && superUserMinPrice()">
            <span data-bind="html: utils.formatMoney(superUserMinPrice())"></span>&nbsp;Minimum
        </p>
        <label class="price-helper__commodity commodity">
            <!-- ko if: commodity.cost() > 0 -->
                <div class="input-append commodity__cost">
                    <input class="qty-input commodity__cost-markup" type="number" step="1" data-bind="
                        value: markupPercent,
                        attr: {
                            'id' : 'markupPercent-' + orderDetailKey(),
                            'min': minMarkupPercent
                        },
                        event: { change: viewModel.setItemShipToMapPrice($data) }
                    ">
                    <span class="add-on">&percnt; Markup</span>
                </div>
            <!-- /ko -->

            <!-- ko if: commodity.retailPrice() -->
                <div class="input-append commodity__discount">
                    <input type="number" class="qty-input commodity__discount-input" step="1" data-bind="
                    value: discountPercent,
                    attr: {
                        'id' : 'discountPercent-' + orderDetailKey(),
                        'max': maxDiscountPercent
                    },
                    event: { change: viewModel.setItemShipToMapPrice($data) }
                    ">
                    <span class="add-on">&percnt; Discount</span>
                </div>
            <!-- /ko -->
            <!-- ko if: commodity.cost() -->
                <div class="input-append commodity__gross-mar-perc">
                    <input class="qty-input commodity__gross-mar-perc-input" type="number" step="1" data-bind="
                    value: grossMarginPercent,
                    attr: {
                        'id' : 'grossMarginPercent-' + orderDetailKey(),
                        'min': minGrossMarginPercent
                    },
                    event: { change: viewModel.setItemShipToMapPrice($data) }
                    ">
                    <span class="add-on">&percnt; Gross Margin</span>
                </div>
            <!-- /ko -->
            <!-- ko if: commodity.cost() -->
                <div class="input-prepend commodity__gross-mar-usd">
                    <span class="add-on">$</span>
                    <input type="number" class="qty-input" step=".01" data-bind="
                    value: grossMarginAmount,
                    attr: {
                        'id' : 'grossMarginAmount-' + orderDetailKey(),
                        'min': minGrossMarginAmount
                    },
                    event: { change: viewModel.setItemShipToMapPrice($data) }
                    ">
                    <span class="add-on">$ Gross Margin</span>
                </div>
            <!-- /ko -->
        </label>
    </span>
</script>

<script type="text/html" id="cart.qtyControlSettings">
    <div class="qty-ctrl-settings">
        <!-- ko if: $data.qtyDisplayType() =='input' -->
            <b class="qty-ctrl-settings__help-tip">
                <span class="qty-ctrl-settings__help-tip-text">Change Qty Limits</span>&nbsp;<a href="javascript:void(0);" class="qty-ctrl-settings__help-tip-tooltip" data-bind="tooltip:{}" title="Customers can change the qty, but only within these limits.">
                    <i class="fas fa-question-circle"></i>
                </a>
            </b>
            <div class="qty-ctrl-settings__max-qty input-append">
                <input name="minQty" type="number" min="1" class="qty-ctrl-settings__qty-input"
                    data-bind="
                        value: suMinQty,
                        attr: {
                            'id' : 'minQty' + orderDetailKey()
                        }
                    "><label class="add-on" for="minQty">Min Qty</label>
            </div>
            <div class="qty-ctrl-settings__min-qty input-append">
                <input name="maxQty" type="number" min="0" class="qty-ctrl-settings__qty-input input-append"
                    data-bind="
                        value: suMaxQty,
                        attr: {
                            'id' : 'maxQty' + orderDetailKey()
                        }
                    "><label class="add-on" for="maxQty">Max Qty</label>
            </div>
            <div class="qty-ctrl-settings__qty-increment input-append">
                <input name="qtyIncrement" type="number" min="1" class="qty-ctrl-settings__qty-input input-append"
                    data-bind="
                        value: suQtyIncrement,
                        attr: {
                            'id' : 'qtyIncrement' + orderDetailKey()
                        }
                    "><label class="add-on" for="qtyIncrement">Qty Increment</label>
            </div>
        <!-- /ko -->
        <!-- TODO: Do we need to hide if original removeType == 'hide'? -->
        <label class="checkbox">
            <input type="checkbox" data-bind="checked: allowDeletes, attr: { id: 'allowDeletes-' + orderDetailKey() }">
            Allow deletes
        </label>
    </div>
</script>

<script type="text/html" id="cart.paymentMethods">
    <ul class="nav nav-tabs" data-bind="foreach: payMethods">
        <li data-bind=" css: { active: $parent.paymentMethod.paymentMethodKey() === $data.paymentMethodKey() } ">
            <a data-bind="attr: {
                            id: paymentMethodKey,
                            'data-content': name,
                            href: '#method_' + paymentType()
                        },
                        text: name,
                        click: $parent.setPaymentMethod,
                        clickBubble: true"
                data-toggle="pill"
                rel="popover"
                data-trigger="hover"
                data-placement="top"></a>
        </li>
    </ul>
    <div class="tab-content">
        <div class="payment-method-ds muted" data-bind="visible: ofConfig.showPayMethodDescription, html: paymentMethod.description()"></div>
        <div id="method_cc" class="tab-pane" data-bind="css: { active: paymentMethodID() && paymentMethod.paymentType() == 'cc' }">
            <div data-bind="template : { name: 'cart.creditCardForm' }"></div>
        </div>
        <div id="method_billme" class="tab-pane" data-bind="visible: paymentMethodID() && paymentMethod.paymentType() == 'billme' ">
        </div>
        <div id="method_ach-check" class="tab-pane" data-bind="visible: paymentMethodID() && paymentMethod.paymentType() == 'ach-check' ">
            <h3>-- ACH is not implemented yet, but would go here --</h3>
            <!-- drawAchCheckForm -->
        </div>
        <div id="method_paypal" class="tab-pane" data-bind="visible: paymentMethodID() && paymentMethod.paymentType() == 'paypal'">
        </div>
        <div id="controlgroup_invoice_ponumber" class="control-group" data-bind="if: paymentMethodID && paymentMethod.collectPO()">
            <label for="ponumber" class="control-label" data-bind="html: ofConfig.POLabel"></label>
            <div class="controls">
                <input type="text" class="controlgroup-invoice__ponumber-input -short-input" name="ponumber" id="ponumber" data-bind="value: poNumber, attr: {
                    maxlength: ofConfig.POMaxLength,
                    required: viewModel.paymentMethod.poRequired() == true ? 'required' : null }" />
                <input type="hidden" id="ponum_required" value="0" data-bind="if: !viewModel.paymentMethod.poRequired()"/>
                <!-- ko if: !viewModel.paymentMethod.poRequired() -->
                    <p id="ponum_help" class="help-block text-small" data-bind="html: ofConfig.POLabelHelp"></p>
                <!-- /ko -->
                <input type="hidden" id="ponum_required" value="1" data-bind="visiblef: viewModel.paymentMethod.poRequired()"/>
                    <p id="ponum_help" class="help-block text-small" data-bind="visible: viewModel.paymentMethod.poRequired()">(required)</p>
            </div>
        </div>
        <div id="controlgroup_invoice_comments" class="control-group" data-bind="visible: ofConfig.showFulfillmentcomments">
            <label for="order_comments" class="control-label">
                <strong data-bind="text: ofConfig.fulfillmentCommentsText"></strong>
            </label>
            <div class="controls">
                <textarea type="text" name="order_comments" id="order_comments" autocomplete="off" data-bind="value: comments"></textarea>
                    <p class="help-block text-small">(optional)</p>
            </div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.productSelectList">
<!-- ko if: $data -->
    <div id="modal_add_prods" class="modal fade hide" data-backdrop="static" data-max-height="400">
        <div class="modal-header">
            <h3>Select Products to Ship</h3>
        </div>
        <div class="modal-body">
            <div class="list-group list-group-flex js-shipItemSelect" data-bind="if: detailsMap">
                <!-- ko foreach: detailsMap -->
                    <span data-forasdf="checkout_item_1" class="list-group-item">
                    <!-- was a label, changed to span to keep checkbox from being erroneously
                        changed as you click other elements in the list item, will drive check
                        box off of qty, and set qty to 0 if checkbox is un-checked by user -->
                        <div class="flex-item checkbox">
                            <input type="checkbox" id="checkout_item_1" data-bind="checked: toggleItemSelect, attr : { disabled: unallocatedQty() == 0 && qtyToShip() == 0} " />
                        </div>
                        <div class="flex-item flex-item-grow media checkout-multiship-item">
                            <img data-bind="attr : { alt: detailLine.sku() + ' - ' + detailLine.name(), src: utils.buildImagePath(detailLine.commodity.pic.thumb()) }"
                                class="media-object pull-left" onerror="utils.handleImageError(this)" />
                            <div class="media-body">
                                <div class="media-heading">
                                    <div class="text-trim" style="max-width: 20em;" data-bind="attr: { 'title': detailLine.sku() + ' - ' + detailLine.name() }">
                                        <span data-bind="text: detailLine.sku"></span> - <span data-bind="text: detailLine.name"></span>
                                    </div>
                                </div>
                                <table class="table table-condensed text-xsmall">
                                    <tbody>
                                        <tr>
                                            <td>Total Qty</td>
                                            <td class="cell-right" data-bind="text: totalOrderQty"></td>
                                        </tr>
                                        <tr>
                                            <td>Currently included in this shipment</td>
                                            <td class="cell-right">
                                                <span data-bind="text: qtyToShip"></span>
                                                &nbsp;
                                                <!-- ko if:ofConfig.showUom -->
                                                <span class="uom" data-bind="text: detailLine.uom"></span>
                                                <!-- /ko -->
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>Included in all shipments</td>
                                            <td class="cell-right" data-bind="text: qtyInAllShipments"></td>
                                        </tr>
                                        <tr>
                                            <td>Remaining</td>
                                            <td class="cell-right" data-bind="text: unallocatedQty"></td>
                                        </tr>
                                    </tbody>
                                </table>
                            </div>
                        </div>
                        <div class="flex-item">
                            <label for="multi_prod_qty_1">Include</label>
                            <input type="number"
                                id="multi_prod_qty_1"
                                class="qty-input"
                                min="0"
                                data-bind="attr: { max: Number(unallocatedQty()) + Number(qtyToShip()) }
                                    , value: qtyToShip, restrictedQty"
                             />
                        </div>
                    </span>
                <!-- /ko -->
            </div>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-link" data-dismiss="modal">Cancel</button>
            <button type="button" id="btn_add_to_shipment" class="btn btn-primary" data-bind="click: selectItemsComplete, clickBubble: false">Update shipment</button>
        </div>
    </div>
<!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentSummaryList">
    <!-- ko foreach: shipments -->
        <div class="list-group u-checkout-well">

            <h3 class="u-checkout-well__title">Shipment Summary List</h3>

            <div class="list-group-item" data-bind="visible: $parent.useMultiShipEditUI">
                <h5>
                    <!-- ko template: { name: 'cart.addressSummaryInfo', data: shipTo } --><!-- /ko -->
                </h5>
            </div>

            <div class="list-group-item">
                <!-- ko template: { name: 'cart.shipmentItemTable' } --><!-- /ko -->
                <div class="list-group-item__content-row row-fluid">
                    <div class="list-group-item__content-span span4" data-bind="if: selectedShipVia">
                        <div class="list-group-item__content">
                            <b>Shipping Method:</b>
                            <div>
                                <span data-bind="text: selectedShipVia.name"></span>
                                <!-- ko if : ofConfig.bShowShipTotalMessage -->
                                (<span data-bind="text: ofConfig.sShipTotalText"></span>)
                                <!-- /ko -->
                                <!-- ko ifnot: ofConfig.bShowShipTotalMessage -->
                                    <!-- ko if: ofConfig.bShowPriceText && selectedShipVia.total() == 0  -->
                                        (<span data-bind="text: ofConfig.sShipTotalText"></span>)
                                    <!-- /ko -->
                                    <!-- ko if: !ofConfig.bShowPriceText || selectedShipVia.total() > 0 -->
                                        (<span data-bind="html: utils.formatMoney(selectedShipVia.total())"></span>)
                                    <!-- /ko -->
                                <!-- /ko -->
                            </div>
                        </div>
                    </div>
                    <div class="list-group-item__content-span span4" data-bind="if: ofConfig.UseRequestedDay">
                        <div class="list-group-item__content">
                            <b>Will be shipped on: </b>
                            <div data-bind="text: requestedShipDate"></div>
                        </div>
                    </div>
                    <div class="list-group-item__content-span span4" data-bind="if: !ofConfig.UseRequestedDay && ofConfig.showExpectedShipDate">
                        <div class="list-group-item__content">
                            <b>Will be shipped on: </b>
                            <div data-bind="text: expectedShipDate"></div>
                        </div>
                    </div>
                    <!-- ko if : ofConfig.bShowShipmentComment -->
                        <div class="list-group-item__content-span span4">
                            <div class="list-group-item__content">
                                <b data-bind=" html : ofConfig.sShipmentCommentTitle + ':'"></b>
                                <div data-bind=" html : comments() ? comments : 'No ' + ofConfig.sShipmentCommentTitle"></div>
                            </div>
                        </div>
                    <!-- /ko -->
                </div>

            </div>

        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentList">
     <!-- ko foreach: shipments -->
        <div class="row-fluid shipment-list u-checkout-well" data-bind="attr: { id: key }">
            <h3 class="u-checkout-well__title">Shipment Details</h3>
            <div class="list-group shipment-list__group">
                <div class="shipment-list__text"
                    title="Edit This Shipment">
                    <!-- ko if: !viewModel.isOverLineLimit() -->
                        <a class="btn shipment-list__link" href="#0" data-bind="click:
                        function() {
                            viewModel.shippingComplete(false)
                        }">
                            <i class="icon-pencil"></i> <span data-bind="html: ofConfig.sEditShipmentText"></span>
                        </a>
                    <!-- /ko -->
                    <!-- ko if: viewModel.isOverLineLimit() -->
                        <a class="btn shipment-list__link global-modal" data-size="large" onclick="$('#handle-modal-exit').val(true)" data-bind="attr: { 'href': '/showcart.asp?o_key=' + ofConfig.OKey }">
                            <i class="icon-pencil"></i> <span data-bind="html: ofConfig.sEditShipmentText"></span>
                        </a>
                    <!-- /ko -->
                </div>

                <div class="shipment-list__item">
                    <div class="shipment-title well">
                        <!-- ko template: { name: 'cart.addressSummaryInfo', data: shipTo, if: !showShippingAddressEdit() && shipToValid() } --><!-- /ko -->
                        <!-- ko template: { name: 'cart.shipmentSplitByDisplay', if: ofConfig.showWarehouseOnShipment } --><!-- /ko -->
                    </div>
                </div>

                <!-- ko if : ofConfig.useProductSummaryTableView -->
                    <div class="shipment-list__table-wrapper">
                        <!-- ko template: { name: 'cart.shipmentItemTable' } --><!-- /ko -->
                    </div>

                    <div class="list-group-item">
                        <div class="row-fluid">
                            <div data-bind="if: ofConfig.bUsingShipping, css: { span7: ofConfig.bShowShipmentComment || ofConfig.UseRequestedDay || ofConfig.bUseExpectedShipDate }">
                                <div class="shipment-list__options" >
                                    <h4 data-bind="html: ofConfig.shipmentListChooseMethodLabel">Choose a Shipping Method</h4>
                                    <!-- ko template: { name: 'cart.shipmentMethodSelector' } --><!-- /ko -->
                                </div>
                                <!-- ko template: { if : ofConfig.CollectShipAccount, name: 'cart.shipperAccountSelector' }--><!-- /ko -->
                            </div>
                            <div class="span5 shipment-list__comments" data-bind="if: ofConfig.bShowShipmentComment || ofConfig.UseRequestedDay || ofConfig.bUseExpectedShipDate">
                                <h4 data-bind=" html : ofConfig.sShipmentCommentTitle"></h4>
                                <!-- ko template: { if: ofConfig.bShowShipmentComment, name: 'cart.shipmentGiftOptions' } --><!-- /ko -->
                                <!-- ko template: { if: ofConfig.UseRequestedDay, name: 'cart.requestedShipDate' } --> <!-- /ko -->
                                <!-- ko template: { if: ofConfig.bUseExpectedShipDate, name: 'cart.expectedShipDate' } --><!-- /ko -->
                            </div>
                        </div>
                    </div>
                <!-- /ko -->

                <!-- ko if : !ofConfig.useProductSummaryTableView -->
                    <div class="list-group-item">
                        <div class="row-fluid">
                            <div class="span5">
                                <!-- ko template: { name: 'cart.shipmentItemList' } --><!-- /ko -->
                            </div>
                            <div class="span7">
                                <h4 data-bind="html: ofConfig.shipmentListChooseMethodLabel">Choose a Shipping Method</h4>
                                <!-- ko template: { name: 'cart.shipmentMethodSelector' } --><!-- /ko -->
                                <!-- ko template: { if: ofConfig.bShowShipmentComment, name: 'cart.shipmentGiftOptions' } --><!-- /ko -->
                                <!-- ko template: { if: ofConfig.UseRequestedDay, name: 'cart.requestedShipDate' } --> <!-- /ko -->
                                <!-- ko template: { if: ofConfig.bUseExpectedShipDate, name: 'cart.expectedShipDate' } --><!-- /ko -->
                            </div>
                        </div>
                    </div>
                <!-- /ko -->
            </div>
        </div>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.shipmentSplitByDisplay">
    <div class="ship-from" data-bind="html: $data.shipFrom.name"></div>
</script>

<script type="text/html" id="cart.errorMessage">
    <p class="cart__error-message" data-bind="visible: field.isModified() && !field.isValid(), text: field.error"></p>
</script>

<script type="text/html" id="cart.processingOverlay">
    <div class="sk-three-bounce--full-screen">
        <div class="sk-three-bounce">
            <div class="sk-child sk-bounce1"></div>
            <div class="sk-child sk-bounce2"></div>
            <div class="sk-child sk-bounce3"></div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.expirationDate">
    <div class="control-group" data-bind="if: (superUserOrderFormMode() && ofConfig.superUserAllowExpirationDateEdits) || viewModel.isValidDate(expirationDate())">
        <label class="control-label">Expires On</label>
        <div class="controls">
            <!-- ko if: superUserOrderFormMode() && ofConfig.superUserAllowExpirationDateEdits -->
            <div class="input-append">
                <input type="text" class="input-medium" id="ExpirationDate"
                    style="background-color: white;cursor: pointer"
                    readonly="readonly"
                    data-bind="attr: { disabled: viewModel.orderPlaced }
                        , datepicker: expirationDate
                        , datepickerOptions: {
                            minDate: (new Date(expirationDate())) < new Date() ? new Date(expirationDate()) : new Date(),
                            maxDate: moment(new Date()).add(ofConfig.maxExpirationDays, 'days').toDate(), //TODO: this should be configurable
                            constrainInput: true,
                            showOn:'both',
                            buttonText: '<i class=\'icon-calendar\'></i>',
                            beforeShowDay: function (date) {
                                var currentExpiration = (new Date(expirationDate())).getTime();
                                var checkDate = date.getTime();
                                var todayDate = (new Date());
                                todayDate.setHours(0,0,0,0);
                                var today = todayDate.getTime();
                                validDate = checkDate == currentExpiration || checkDate >= today;
                                return [validDate];
                            }
                        }">
                <button type="button" class="btn" data-bind="attr: { disabled: viewModel.orderPlaced }, click: function(shipment) { $('#ExpirationDate').datepicker('show') }, clickBubble: false">
                    <i class="icon-calendar"></i>
                </button>
            </div>
            <!-- /ko -->
            <!-- ko if: !superUserOrderFormMode() || !ofConfig.superUserAllowExpirationDateEdits -->
                <span data-bind="text: expirationDate"></span>
            <!-- /ko -->
        </div>
    </div>
</script>

<script type="text/html" id="cart.softgoods">
    <!-- ko if: $data.orderFlags.indexOf("create_softgoods_auth") >= 0 -->
        <span data-bind="text: oConfig.labels.softgoods"></span>
    <!-- /ko -->
</script>

<script type="text/html" id="cart.backorderMessage">
    <!-- ko if: (qty() - Math.max(0, commodity.qtyAvailable() - commodity.qtyBuffer())) > 0 && ofConfig.backorderMessageText -->
        <span data-bind="html: ofConfig.backorderMessageText.replace(/<BO>/g, '{{BO}}').replace(/<SHIPPING>/g, '{{SHIPPING}}').replace(/{{BO}}/g, qty() - Math.max(0, commodity.qtyAvailable() - commodity.qtyBuffer())).replace(/{{SHIPPING}}/g, Math.max(0, commodity.qtyAvailable() - commodity.qtyBuffer()))"></span>
    <!-- /ko -->
</script>



<script type="text/html" id="cart.recurringDetails">
    <h3 class="recurring-details__title u-checkout-well__title">
        Recurring Order Details
    </h3>
    <!-- ko if: viewModel.lifecycleStage() == "recurring-preprocessed" -->
        <div class="alert alert-warning">This order has recently been preprocessed and changes made here could affect the order being processed.</div>
    <!-- /ko -->
    <!-- ko if: viewModel.lifecycleStage() == "recurring-pending" -->
        <div class="alert alert-error">This order has recently been cloned and changes made here will not be reflected on the current order being processed.</div>
    <!-- /ko -->
    <!-- ko if: viewModel.lifecycleStage() == "recurring-disabled" -->
        <div class="alert alert-info">This order is currently disabled and will not be processed on the date selected.</div>
    <!-- /ko -->
    <div id="recurring_details" class="form-horizontal checkout-payment-form" >
        <div class="control-group input-append">
            <label class="control-label" for="ro_rundate"><strong>Next order date:</strong></label>
            <div class="controls">
                <input type="text" id="ro_rundate" class="input-medium"
                    style="background-color: white;cursor: pointer"
                    readonly="readonly"
                    data-bind="datepicker: roRunDate, value: moment(roRunDate()).format('MM/DD/YYYY')
                        , datepickerOptions: {
                            minDate: viewModel.getMinimumRecurringOrderDate(),
                            constrainInput: true,
                            showOn:'both',
                            buttonText: '<i class=\'icon-calendar\'></i>'
                        }">
                </div>
        </div>

        <div class="control-group">
            <label  class="control-label"for="ro_rec_qty"> <strong>Place order every: </strong></label>
            <div class="controls input-append u-flex">
                <input id="ro_rec_qty" class="qtyinput" data-bind="value: roRecQty" type="number" min="1">
                <select  id="ro_rec_case" class="input-medium" data-bind="value: roRecCase">
                    <option value="day">Day(s)</option>
                    <option value="week">Week(s)</option>
                    <option value="month">Month(s)</option>
                    <option value="year">Year(s)</option>
                </select>
            </div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.recurringLineDetails">
    <span class="ro-actions">
        <select id="ro_actions" data-bind="value: selectedRoAction, event:{ change: viewModel.updateRecurringType }">
            <option value="recurring" data-bind="text: ofConfig.roRecurringSelectText"></option>
            <option value="fixed" data-bind="text: ofConfig.roOneTimeSelectText"></option>
            <option value="skipnext" data-bind="text: ofConfig.roSkipSelectText"></option>
        </select>
    </span>
</script>


</div><!-- include files here -->


<script type="text/javascript">

	//Menu variables
	var quickAccessLinks = processQuickLinks(JSON.parse("[]"));
	var menuDrawerPanels = document.getElementsByClassName('menu-drawer__menu');
	var toolbarBtns = document.getElementsByClassName('toolbar__btn');
	var filterInput = document.getElementById('link-filter');
	var filterForm = document.getElementById('filterSearch');
	var activeToolbarBtn;
	var activeMenuDrawerPanel;

	var quickAccessLinkViewModel = {
		quickAccessLinks: ko.observableArray(quickAccessLinks),
		getQuickAccessClass: function(url) {
			var buttonClass = "add-to-quick-access";
			var inList = _.some(this.quickAccessLinks(), function(qal) {
				return qal.href.includes(url);
			});

			if(inList) {
				return buttonClass + "  add-to-quick-access-added";
			} else {
				return buttonClass;
			}
		}
	};

	var qaConfig = {
		menuTitle: "Quick Access",
		showLinks: false,
		useFilter: false			
	}

	function processQuickLinks(data){
		var quickLinks = [];
		_.each(data, function(link){
			//create add link if missing.
			if(!link.addLink || !link.addLink.href){
				link.addLink = {};
			}else{
				link.addLink = removeDomainName(link.addLink.href);
			}
			//remove base url since it gets tracked with the local url.
			link.href = removeDomainName(link.href);
			quickLinks.push(link);
		});
		return quickLinks;
	}
	
	function removeDomainName(url) {
		var parts = url.split(/^[A-Za-z0-9+.-]+:\/\/[^/]+\/+(.*)/);
		if (parts.length < 2) return url;
		return parts[1];
	}

	if(typeof Config != "undefined" && (qaConfig.showLinks || qaConfig.useFilter)){
		var sApiBaseUrl = Config.apiBaseUrl;
		var sessionKey = "1AD9CAFADF6F46278D5D4D367AAEBAF0";

		function addEventHandlersToLinks() {
			if (qaConfig.showLinks && $("#menuDrawer").length > 0) {

				var linkHrefs = _.pluck(quickAccessLinkViewModel.quickAccessLinks(), 'href');
				var existingLinks = {};
				for (var i in linkHrefs) {
					existingLinks[linkHrefs[i]] = true;
				}
				function attributesByAddedStatus(element) {
					var link = element.closest('li')[0].querySelector('a');
					if (link && existingLinks[link.href.replace(/^.*\/\/[^\/]+/, '')]) {
						return 'class="add-to-quick-access add-to-quick-access-added" disabled';
					} else {
						return 'class="add-to-quick-access"';
					}
				}

				$.each($('#menuDrawer .filter-menu ul li > .childlink__actions'), function() {
					$(this).append(
						'<button ' + attributesByAddedStatus($(this)) + ' title="Add to ' + qaConfig.menuTitle + '" onclick="addToQuickAccess(this); return false;">' +
						'<i class="fas fa-star"></i>' +
						'</button>'
					);
				});

				// Find top level links that require a favorite button
				$.each($('#menuDrawer .filter-menu .linkset__li-1'), function() {
					if ($(this).children('a').attr('href') !== '#' && $(this).children('a').attr('href') !== 'javascript:void(0);') {
						$(this).append(
							'<div class="childlink__actions">' +
							'<button ' + attributesByAddedStatus($(this)) + ' title="Add to ' + qaConfig.menuTitle + '" onclick="addToQuickAccess(this); return false;">' +
							'<i class="fas fa-star"></i>' +
							'</button>' +
							'</div>');
					}
				});

				$.each($('#menuDrawer .filter-menu .linkset-dashboard__li-2:not(:has(.childlink__actions)), #menuDrawer #linkset-dashboard-user .linkset-dashboard-user__li-1:not(:has(.childlink__actions))'), function() {
					// Find the linkset data-generated manage links and add the favorites button and addedit button
					$(this)
						.append(
							'<div class="childlink__actions">' +
							'<button ' + attributesByAddedStatus($(this)) + ' title="Add to ' + qaConfig.menuTitle + '" onclick="addToQuickAccess(this); return false;">' +
							'<i class="fas fa-star"></i>' +
							'</button>' +
							'</div>')
						.next('.linkset__li-2.add')
						.children('a')
						.detach()
						.prependTo($(this).children('.childlink__actions'))
						.addClass('add')
						.removeClass('linkset__a-2')
						.html('<i class="icon-pencil"></i>');

					// Find the linkset data-generated addedit buttons and move them to the correct place in the markup
					$('.filter-menu .linkset__li-2.manage + .linkset__li-2.add').remove();
				});
					
				// Find the linkset data-generated links (not manage) and add the favorites button
				$.each($('#menuDrawer .filter-menu .linkset__li-2:not(.manage):not(:has(.childlink__actions))'), function() {
					$(this).append(
						'<div class="childlink__actions">' +
						'<button ' + attributesByAddedStatus($(this)) + ' title="Add to ' + qaConfig.menuTitle + '" onclick="addToQuickAccess(this); return false;">' +
						'<i class="fas fa-star"></i>' +
						'</button>' +
						'</div>');
				});
					
			}

			// Listen for keyup, then send to debounce function
			if (qaConfig.useFilter) {
				//Save the active menu when the user clicks the filter.  this is to make sure KO is ready.
				$("#link-filter, .menu-drawer__filter-search").on('click focus', function(){
					activeLink = $(".linkset a.active");
				});
				$("#link-filter, .menu-drawer__filter-search").on('keyup reset', function () {
					linkSearch();
					//Close the active menu before filtering.
					if($('#link-filter').val() == ''){
						activeLink.addClass('active');
					}else{
						activeLink.removeClass('active');
						$('.filter-alert').hide();
					}
				});
			}
		}

		var linkSearch = _.debounce(debouncedSearch, 250);

		function debouncedSearch() {
			
			clearFilter();
			// Track our filter value
			var filter = filterInput.value;

			if( filter == '' ) {
				$('.filter-alert').show('slow');
				return false;
			}

			// Find the current active menu panel and store it
			for (var i = 0; i < toolbarBtns.length; i++) {
				if (toolbarBtns[i].classList.contains("active")) {
					activeToolbarBtn = toolbarBtns[i].dataset.menu;
					activeMenuDrawerPanel = document.getElementById(activeToolbarBtn);
				}
			}

			// Make sure all the menus are active while filtering, with case exceptions
			for (var i = 0; i < menuDrawerPanels.length; i++) {
				if (!menuDrawerPanels[i].classList.contains("active")) {

					// Hide the titles
					menuDrawerPanels[i].getElementsByClassName('menu-drawer__menu-title')[0].classList.add("hidden");

					switch (menuDrawerPanels[i].id) {
						case "quickMenu":
						case "quickAddMenu":
						case "accountMenu":
							break;
						default:
							menuDrawerPanels[i].classList.add("active");
						}
					}

				// Hide the current title
				menuDrawerPanels[i].getElementsByClassName('menu-drawer__menu-title')[0].classList.add("hidden");
			}	

			// Loop the remaining links. If you match on an A tag, show it's direct LI, and any parent/child with link-parent as a class.
			$(".filter-menu ul li > a").each(function () {
				try{
					setAccordionHeight(false);
					if ( $(this).text().search(new RegExp(filter, "i")) >= 0 || ( $(this).data('section') && $(this).data('section').search(new RegExp(filter, "i")) >= 0 ) ){
						// Match. Show this link's LI and any parent/child li.link-parent with the search term highlighted
						$(this).addClass('partial-highlight').removeClass('highlight').highlight(filter);
						$(this).parent().show();

						// Show any parent dropdown for the link being shown	
						$(this).parent().parents('li.link-parent').show().addClass('open');

						// Show any child elements of the link being shown
						$(this).parent().find('li').show();
						$(this).parent().find('li.link-parent').removeClass('open');
					} else if ( false && $(this).attr('href').search(new RegExp(filter, "i")) >= 0) {
						//Turned this off for now, it was doing weird things when only an ADD link was found.
						//TODO: investigate to see if we can fix the weird bug mentioned above.

						// Match. Show this link's LI and any parent/child li.link-parent 
						$(this).addClass('highlight');
						$(this).parent().show();

						// Show any parent dropdown for the link being shown	
						$(this).parent().parents('li.link-parent').show().addClass('open');

						// Show any child elements of the link being shown
						$(this).parent().find('li').show();
						$(this).parent().find('li.link-parent').removeClass('open');
					} else {
						$(this).removeClass('highlight');
						$(this).unhighlight()
						$(this).parent().hide();
					}

				}catch(error){ console.error(error); }
			
			});

			// Loop just the top levels to see if a non-parent matches the filter.
			$(".filter-menu > li > a").each(function () {
				
				if ($(this).text().search(new RegExp(filter, "i")) < 0) {
					//no match was found on the parent but
					//Only it if the sub links didn't trigger a match
					if(!$(this).parent().hasClass('open')){ 
						$(this).parent().hide();
						$(this).removeClass('highlight');
					}

					$('#quickAddMenu').removeClass('active');
					$('#quickMenu').removeClass('active');

				} else {
					$(this).parents('.menu-drawer__menu').find('.menu-drawer__menu-title').removeClass('hidden');
					$(this).addClass('partial-highlight').removeClass('highlight').highlight(filter);

					//If this is a parent top level, enable all links below but collapse the menu
					if ($(this).parent().hasClass('link-parent')) {
						if(!$(this).parent().hasClass('open')){ 
							$(this).click();
						}
						$(this).next('ul').children('li').show();
						setAccordionHeight(false);
					}
					
				}
			});

			// Check to see if we have an empty filter value
			if (filter.length === '') {
				clearFilter();
			} else {
				// Check to see if the key we are pressing is the ESC key
				filterInput.addEventListener("keydown", function (event) {
					if (event.keyCode === 27) {
						filterForm.reset();
						clearFilter();
					}
				});
			}

			$('.toolbar__btn').click(function() {
				clearFilter();
				filterForm.reset();
				clearFilter();
			});
		}

		// Clear all the filter classes and reset to original active menu
		function clearFilter() {

			// Reset the classes
			$('.partial-highlight').unhighlight().removeClass('partial-highlight');
			$('.highlight').removeClass('highlight');
			$('.hidden').removeClass('hidden');
			$('.filter-menu li, .filter-menu li.link-parent.drop').removeClass('open').show();

			// Find the active parent and re-add the open class			
			$('.filter-menu a.active').parents('li.link-parent.drop:not(.open)').addClass('open');

			if ($('#quickAddMenuBtn').hasClass('active')) {
				$('#quickAddMenu').addClass('active');
			} else {
				$('#quickAddMenu').removeClass('active');
			}

			if ($('#quickMenuBtn').hasClass('active')) {
				$('#quickMenu').addClass('active');
			} else {
				$('#quickMenu').removeClass('active');
			}

			//Clear active menus
			for (var i = 0; i < menuDrawerPanels.length; i++) {
				if (menuDrawerPanels[i].classList.contains("active")) {
					menuDrawerPanels[i].classList.remove("active");
					menuDrawerPanels[i].getElementsByClassName('menu-drawer__menu-title')[0].classList.remove("hidden");
				}
			}

			//Only show the active menu if there is no filter
			if($('#link-filter').val() == ''){
				//Reset to the current open menu panel
				if (activeMenuDrawerPanel && !activeMenuDrawerPanel.classList.contains("active")) {
					activeMenuDrawerPanel.classList.add("active");
				}
			}
		}
		
		function addToQuickAccessKO(data, event) {addToQuickAccess(event.target, data.useGlobalModal)};

		function addToQuickAccess(el, useGlobalModal=null) {
			$(el).addClass('add-to-quick-access-added');
			$(el).attr("disabled", true);

			var link = $(el).closest('li')[0].querySelector('a');
			var href = link.href.replace(/^.*\/\/[^\/]+/, '');
			var name = link.innerText.trim();
			var key = $(el).closest('li')[0].dataset.key;
			var bSave = true;

			try {
				_.each(quickAccessLinkViewModel.quickAccessLinks(), function (link) {
					if (link.href == href && link.name == name) {
						//don't save a duplicate
						bSave = false;
					}
				});

				if (bSave) {
					var basePayload	= {
							href: href,
							name: name,
							key: key,
							addLink:{},
					};
					if(useGlobalModal){
						basePayload.useGlobalModal = useGlobalModal();
					} 
					

					if ($(link).closest('li')[0].classList.contains('manage') && $(link).closest('li')[0].querySelector('.add').length > 0) {
						var childHref = link.nextElementSibling.querySelector('a').href.replace(/^.*\/\/[^\/]+/, '');
						var childName = "+";
						var childKey = link.nextElementSibling.querySelector('a').dataset.key;

						basePayload.addLink = {
								href: childHref,
								name: childName,
								key: childKey
						};
					}

					quickAccessLinkViewModel.quickAccessLinks.push(basePayload);
					saveQuickLinks();
				}
			} catch (err) {
				console.log(err);
			}
			return false;
		}

		var saveQuickLinks = _.debounce(debouncedSave , 1000);

		function removeFromQuickAccess(link){

			try{
				quickAccessLinkViewModel.quickAccessLinks.remove(link)
				saveQuickLinks();
			}catch(err){
				console.log(err);
			}
			return false;
		}

		function debouncedSave(){
			console.log('saving...');
			$.ajax({
				url: Config.apiBaseUrl + 'UserConfigurations/properties/QuickAccessLinks',
				type: 'POST',
				headers: { 'Authorization' : 'Bearer ' + sessionKey},
				contentType: 'application/json',
				dataType: 'json',
				data: ko.mapping.toJSON(quickAccessLinkViewModel.quickAccessLinks),
				success: function(data) {
					utils.popToastr('Success', 'Quick Access Links saved');
				},
				error: Utilities.ajaxError('Error Saving Data')
			})			
		}

		function isEmpty(obj){
			if(!obj) return false;

			for(var prop in obj) {
				if(obj.hasOwnProperty(prop))
					return false;
			}

			return JSON.stringify(obj) === JSON.stringify({});	
		}

		$( function(){
			addEventHandlersToLinks();
			markActiveCategory();
		});
	}

	jQuery.extend({
		highlight: function (node, re, nodeName, className) {
			if (node.nodeType === 3) {
				var match = node.data.match(re);
				if (match) {
					var highlight = document.createElement(nodeName || 'span');
					highlight.className = className || 'highlight';
					var wordNode = node.splitText(match.index);
					wordNode.splitText(match[0].length);
					var wordClone = wordNode.cloneNode(true);
					highlight.appendChild(wordClone);
					wordNode.parentNode.replaceChild(highlight, wordNode);
					return 1; //skip added node in parent
				}
			} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
					!/(script|style)/i.test(node.tagName) && // ignore script and style nodes
					!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
				for (var i = 0; i < node.childNodes.length; i++) {
					i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
				}
			}
			return 0;
		}
	});

	jQuery.fn.unhighlight = function (options) {
		var settings = { className: 'highlight', element: 'span' };
		jQuery.extend(settings, options);

		return this.find(settings.element + "." + settings.className).each(function () {
			var parent = this.parentNode;
			parent.replaceChild(this.firstChild, this);
			parent.normalize();
		}).end();
	};

	jQuery.fn.highlight = function (words, options) {
		var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
		jQuery.extend(settings, options);

		if (words.constructor === String) {
			words = [words];
		}
		words = jQuery.grep(words, function(word, i){
		return word != '';
		});
		words = jQuery.map(words, function(word, i) {
		return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
		});
		if (words.length == 0) { return this; };

		var flag = settings.caseSensitive ? "" : "i";
		var pattern = "(" + words.join("|") + ")";
		if (settings.wordsOnly) {
			pattern = "\\b" + pattern + "\\b";
		}
		var re = new RegExp(pattern, flag);

		return this.each(function () {
			jQuery.highlight(this, re, settings.element, settings.className);
		});
	};

</script>



<script type="text/html" id="links.quickAccessLinks">

	<div id="quick_access_links">
		<span class="menu-drawer__menu-content qa-noresults" data-bind="visible: !quickAccessLinks().length">
			<p>To add a link for quick access, press the star icon that appears in menu items. For example:</p>
			<ul class="linkset accordion linkset__ul-1">
				<li class="linkset__li-1">
					<a href="https://www.descovac.com" class="qa-example linkset__a-1">Home Page</a>
					<div class="childlink__actions">
						<button class="add-to-quick-access" title="Add to Bookmarks" onclick="addToQuickAccess(this); return false;">
							<i class="fas fa-star"></i>
						</button>
					</div>
				</li>
			</ul>
		</span>
		
		<div class="quick-access__container" data-bind="visible: quickAccessLinks().length > 0 ">
			<div
				data-bind="sortable: 
				{
					data: quickAccessLinks,
					afterMove: saveQuickLinks,
					containment: 'parent'
				}">

				<ul class="quick-access__wrapper linkset accordion linkset__ul-1" data-bind="css: { hybrid: addLink && !isEmpty(addLink) && $data.addLink.href != '' }">
					<li class="linkset__li-1" data-bind="css: { manage: !isEmpty(addLink) && $data.addLink.href != '' }">
						<a class="quick-access linkset__a-1" 
							data-bind="
								attr: { href : $data.href, id: 'ql_' + $index() }, 
								css: {'global-modal': function() { return $data.useGlobalModal == 'TRUE' }()}, 
								click: 
									function() {
										if($data.useGlobalModal == 'TRUE'){
											addGlobalModalHandlerBySelector('#ql_' + $index(), function() {window.location.href = window.location.href});
										}else{
											window.location.href = $data.href;
										}
									} 
								">
							<span data-bind="attr: { class : 'qa-delete delete-button-' + $index() }">
								<i class="icon-remove qa-remove"  data-bind="click: removeFromQuickAccess" title="Remove from Quick Access"></i>
							</span>
							<span data-bind="html: $data.name "></span>
						</a> 
						<div class="childlink__actions" data-bind="if: !isEmpty(addLink) && $data.addLink.href != ''">
							<a class="add" data-bind="attr: { 'href': addLink.href }">
								<i class="icon-pencil"></i>
							</a>
						</div>
					</li>
				</ul>

			</div>
		</div>
	</div>
</script><!-- Overridden for PO Upload link -->
<script type="text/html" id="cart.confirmation_custom">
    <div id="checkout_confirmation" class="checkout-section u-checkout-well" data-bind="visible: viewModel.showConfirmationMessage ">
        <div class="print-hide print-btn__wrapper">
            <!-- ko template: 'cart.continueShoppingButton'--><!-- /ko -->
            <!-- ko template: 'cart.printButton'--><!-- /ko -->
        </div>
        <div class="confirmation-alert__wrapper">
            <!-- ko if: viewModel.selectedLifecycleStage().confirmationMessage() != '' -->
            <div clas="confirmation-alert" data-bind="attr: { 'class': 'confirmation-alert-box ' + selectedLifecycleStage().displayClass() }">
                <i class="icon-2x pull-left"></i>
                <h4 style="margin-top: 4px;" data-bind="html: selectedLifecycleStage().confirmationMessage()"></h4>
            </div>
            <!-- /ko -->
            <!-- ko if: viewModel.selectedLifecycleStage().confirmationMessage() == '' -->
            <div class="confirmation-alert">
                <h3 class="text-success" data-bind="visible: completed"><i class="icon-ok"></i> Thank you for your order!</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.recordType() == 'recurring' "><i class="icon-save"></i> Recurring Order Saved.</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.lifecycleStage() == 'pending' "><i class="icon-refresh"></i> This order is pending approval.</h3>
                <h3 class="text-success" data-bind="visible: !completed() && viewModel.lifecycleStage() != 'pending' && viewModel.lifecycleStage() != 'recurring' && viewModel.lifecycleStage() != 'cancelled' "><i class="icon-save"></i> This order has been saved.</h3>
                <h3 class="text-error" data-bind="visible: viewModel.lifecycleStage() == 'cancelled' "><i class="icon-remove"></i> This order was rejected.</h3>
            </div>
            <!-- /ko -->
        </div>

        <div class="checkout-section-body">

            <div class="order-number checkout-section-inner well">

                <!-- ko if: completed() && orderNumber() -->
                <h3>Your order number is&nbsp;<span data-bind="text: ofConfig.orderNumberPrefix"></span><span data-bind="text: orderNumber"></span></h3>
                <!-- /ko -->
                <div class="row-fluid checkout-section__row">

                    <div class="span3 checkout-section__span">
                        <!-- ko template: 'cart.paymentMethodSummary' --><!-- /ko -->
                    </div>

                    <div class="span3 checkout-section__span">
                        <div id="controlgroup_invoice_ponumber_summary" class="control-group checkout-section__summary-wrapper" data-bind="if: poNumber">
                            <div class="checkout-section__summary">
                                <b for="ponumber_summary" class="po-label" data-bind="html: ofConfig.POLabel"></b>
                                <div class="controls">
                                    <span id="ponumber_summary" class="" data-bind="text: poNumber"></span>
                                </div>
                            </div>
                            <div class="checkout-section__summary">
                                <b for="ponumber_upload" class="po-label" >Upload</b>
                                <div class="controls">
                                    <a id="ponumber_upload_link" data-bind="
                                        visible: (uploadKey() == ''),
                                        attr: { href: 'form.asp?modal=1&f_key=A97C4931D61F48D59EC57852488331BE&o_id=' + orderKey() },
                                        addModalHandler: { 'element' : $('#ponumber_upload_link'), 'handler' : function(data){  viewModel.handleUpload(data);} }
                                    " class="global-modal">Click here to upload a file</a>
                                    <span id="ponumber_upload" data-bind="
                                        visible: (uploadKey() !== '')" >PO File Received</span>
                                </div>
                            </div>
                        </div>
                        <div id="controlgroup_invoice_comments_summary" class="control-group checkout-section__summary-wrapper" data-bind="if: comments">
                            <div class="checkout-section__summary">
                                <label for="order_comments_summary" class="control-label">
                                    <strong data-bind="text: ofConfig.fulfillmentCommentsText"></strong>
                                </label>
                                <div class="controls">
                                    <div id="order_comments_summary" data-bind="text: comments"></div>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </div>
    </div>
</script>

<script type="text/html" id="cart.abovePaymentMethods_custom">
    <fieldset class="checkout-review__fieldset u-checkout-well" id="dropship_flag" >
        <h3 class="checkout-review__fieldset-content u-checkout-well__title">
            Dropship Order            
        </h3>        
        <div class="form-horizontal checkout-review__fieldset-content" data-bind="if: !completed()">
            <label><input type="checkbox" data-bind="checked: dropship" />Yes, Dropship my order.</label>
        </div>
        <div class="form-horizontal checkout-review__fieldset-content" data-bind="if: completed() && dropship()">
            You order will be dropshipped.
        </div>
        <div class="form-horizontal checkout-review__fieldset-content" data-bind="if: completed() && !dropship()">
            You order will <em>not</em> be dropshipped.
        </div>
    </fieldset>
</script>

<script>
    registerHook({
        name: 'orderModelBottom',
        func: function(args) {
            var self = args.self;
            self.dropship = ko.observable(self.opt1() == "1");
            self.dropship.subscribe(function(toggle){
                postOrderHeaderField("opt1", toggle ? "1" : "0");
            });

            self.uploadKey = ko.observable("");
            //if the order is complete then check for an upload...
            if(self.completed()) {
                $.ajax({
                    url: "default.asp?ajax=getpoupload&key=" + self.orderKey(),
                    success: function(data) {
                        self.uploadKey(data.key);
                    }
                });
            }
            self.handleUpload = function(data){
                self.uploadKey(data.key);
            };
        }
    });
    registerHook({
        name: 'productModelBottom',
        func: function(args) {
            var self = args.self;
            if(oConfig.showPricingOrderEntry && oConfig.pageName == 'pc_product_detail.asp' && self.mapPriceMessage === ''){ 
                self.mapPriceMessage = 'Call for pricing';
            }
        }
    });
</script>
    <div class="hide browser-alert -bottom">
        <div class="browser-alert__title">
            <strong class="browser-alert__title-text">
            Browser Compatibility Warning
            </strong>
            <button type="button" class="browser-alert__close" onclick="acknowledgeBrowserAlert()">
            <svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M6.54688 4.5L8.89062 2.15625C9.19531 1.875 9.19531 1.40625 8.89062 1.125L8.375 0.609375C8.09375 0.304688 7.625 0.304688 7.34375 0.609375L5 2.95312L2.63281 0.609375C2.35156 0.304688 1.88281 0.304688 1.60156 0.609375L1.08594 1.125C0.78125 1.40625 0.78125 1.875 1.08594 2.15625L3.42969 4.5L1.08594 6.86719C0.78125 7.14844 0.78125 7.61719 1.08594 7.89844L1.60156 8.41406C1.88281 8.71875 2.35156 8.71875 2.63281 8.41406L5 6.07031L7.34375 8.41406C7.625 8.71875 8.09375 8.71875 8.375 8.41406L8.89062 7.89844C9.19531 7.61719 9.19531 7.14844 8.89062 6.86719L6.54688 4.5Z" fill="white"/>
            </svg>
            </button>
        </div>
        <div class="browser-alert__text">
            The browser you are using is not supported on this site. You may experience issues with some features on the site. It is recommended that you use one of the following browsers - Chrome, Edge, Firefox, or Safari.
        </div>
    </div>
    <script>
        function acknowledgeBrowserAlert(){
            document.querySelector('.browser-alert').style.display = 'none';
            document.cookie = 'browseralert=1';
        }

        if(parseInt(getInternetExplorerVersion()) <= 11){
            jQuery('.browser-alert').show();
        }
    </script>
    </body>

</html>
