]]]]>]]> Home – Gruber Communications ]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]>]]> 0) { for (var y = 0; y ]]]]]]>]]]]>]]> ]]]]>]]> ]]]]>]]>
ATTENTION! Use code “50OFFSHIP” and enjoy 50% OFF GROUND SHIPPING ON ALL ORDERS!! If you have any questions, please contact us by phone, email, or live chat.
]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-23-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-353-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-355-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-357-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-359-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-278-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); });
Contact our team for CUSTOM manufacturing of our Metal, Copper and Fiber products today!
We specialize in Custom Metal, Copper, and Fiber products and our engineers can make almost anything your projects or data center require! Fill out the information below to send us your request TODAY and one of our Team Members will contact you in 24 hours or less!
]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-328-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]>]]]]>]]>’); }); jQuery(‘#-pro-menu-330-288 .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a’, ‘body’).each(function(){ jQuery(this).append(”); }); a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]]]>]]]]]]>]]]]>]]> a’, ‘body’).each(function(){ jQuery(this).append(”); }); ]]]]]]]]>]]]]]]>]]]]>]]>Contact Our Team
If you have questions about Custom products, shipping and tracking, past orders or existing orders, or pricing, fill out the information below to CONTACT US TODAY!
Gruber Communications ]]]]]]>]]]]>]]> plussearchuserclosearrow-circle-o-downchevron-leftchevron-rightarrow-rightchevron-downshopping-cartbarsangle-double-upellipsis-vcross .menu-item”, menu).width(); jQuery(“.oxy-pro-menu-open-container > div:first-child, .oxy-pro-menu-off-canvas-container > div:first-child”, menu).width(menuItemWidth); } function oxygen_pro_menu_unset_static_width(menu) { jQuery(“.oxy-pro-menu-container > div:first-child”, menu).width(“”); } // close icon click jQuery(‘body’).on(‘click’, ‘.oxy-pro-menu-mobile-close-icon’, function(e) { var menu = jQuery(this).parents(‘.oxy-pro-menu’); menu.removeClass(‘oxy-pro-menu-open’); jQuery(this).parents(‘.oxy-pro-menu-container’).removeClass(‘oxy-pro-menu-open-container’); jQuery(‘.oxy-nav-menu-prevent-overflow’).removeClass(‘oxy-nav-menu-prevent-overflow’); if (jQuery(this).parent(‘.oxy-pro-menu-container’).hasClass(‘oxy-pro-menu-off-canvas-container’)) { oxygen_offcanvas_menu_run(menu); } oxygen_pro_menu_unset_static_width(menu); }); // dropdown toggle icon click jQuery(‘body’).on( ‘touchstart click’, ‘.oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-off-canvas-container .menu-item-has-children > a > .oxy-pro-menu-dropdown-icon-click-area,’+ ‘.oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-open-container .menu-item-has-children > a > .oxy-pro-menu-dropdown-icon-click-area’, function(e) { e.preventDefault(); // fix for iOS false triggering submenu clicks jQuery(‘.sub-menu’).css(‘pointer-events’, ‘none’); setTimeout( function() { jQuery(‘.sub-menu’).css(‘pointer-events’, ‘initial’); }, 500); // workaround to stop click event from triggering after touchstart if (window.oxygenProMenuIconTouched === true) { window.oxygenProMenuIconTouched = false; return; } if (e.type===’touchstart’) { window.oxygenProMenuIconTouched = true; } oxygen_pro_menu_toggle_dropdown(this); } ); function oxygen_pro_menu_toggle_dropdown(trigger) { var duration = jQuery(trigger).parents(‘.oxy-pro-menu-container’).data(‘oxy-pro-menu-dropdown-animation-duration’); jQuery(trigger).closest(‘.menu-item-has-children’).children(‘.sub-menu’).slideToggle({ start: function () { jQuery(this).css({ display: “flex” }) }, duration: duration*1000 }); } // fullscreen menu link click var selector = ‘.oxy-pro-menu-open .menu-item a’; jQuery(‘body’).on(‘click’, selector, function(event){ if (jQuery(event.target).closest(‘.oxy-pro-menu-dropdown-icon-click-area’).length > 0) { // toggle icon clicked, no need to hide the menu return; } else if ((jQuery(this).attr(“href”) === “#” || jQuery(this).closest(“.oxy-pro-menu-container”).data(“entire-parent-toggles-dropdown”)) && jQuery(this).parent().hasClass(‘menu-item-has-children’)) { // empty href don’t lead anywhere, treat it as toggle trigger oxygen_pro_menu_toggle_dropdown(event.target); // keep anchor links behavior as is, and prevent regular links from page reload if (jQuery(this).attr(“href”).indexOf(“#”)!==0) { return false; } } // hide the menu and follow the anchor if (jQuery(this).attr(“href”).indexOf(“#”)===0) { jQuery(‘.oxy-pro-menu-open’).removeClass(‘oxy-pro-menu-open’); jQuery(‘.oxy-pro-menu-open-container’).removeClass(‘oxy-pro-menu-open-container’); jQuery(‘.oxy-nav-menu-prevent-overflow’).removeClass(‘oxy-nav-menu-prevent-overflow’); } }); // off-canvas menu link click var selector = ‘.oxy-pro-menu-off-canvas .menu-item a’; jQuery(‘body’).on(‘click’, selector, function(event){ if (jQuery(event.target).closest(‘.oxy-pro-menu-dropdown-icon-click-area’).length > 0) { // toggle icon clicked, no need to trigger it return; } else if ((jQuery(this).attr(“href”) === “#” || jQuery(this).closest(“.oxy-pro-menu-container”).data(“entire-parent-toggles-dropdown”)) && jQuery(this).parent().hasClass(‘menu-item-has-children’)) { // empty href don’t lead anywhere, treat it as toggle trigger oxygen_pro_menu_toggle_dropdown(event.target); // keep anchor links behavior as is, and prevent regular links from page reload if (jQuery(this).attr(“href”).indexOf(“#”)!==0) { return false; } } }); // off canvas function oxygen_offcanvas_menu_init(menu) { // only init off-canvas animation if trigger icon is visible i.e. mobile menu in action var offCanvasActive = jQuery(menu).siblings(‘.oxy-pro-menu-off-canvas-trigger’).css(‘display’); if (offCanvasActive!==’none’) { var animation = menu.data(‘oxy-pro-menu-off-canvas-animation’); setTimeout(function() {menu.attr(‘data-aos’, animation);}, 10); } else { // remove AOS menu.attr(‘data-aos’, ”); }; } function oxygen_offcanvas_menu_run(menu) { var container = menu.find(“.oxy-pro-menu-container”); if (!container.attr(‘data-aos’)) { // initialize animation setTimeout(function() {oxygen_offcanvas_menu_toggle(menu, container)}, 0); } else { oxygen_offcanvas_menu_toggle(menu, container); } } var oxygen_offcanvas_menu_toggle_in_progress = false; function oxygen_offcanvas_menu_toggle(menu, container) { if (oxygen_offcanvas_menu_toggle_in_progress) { return; } container.toggleClass(‘aos-animate’); if (container.hasClass(‘oxy-pro-menu-off-canvas-container’)) { oxygen_offcanvas_menu_toggle_in_progress = true; var animation = container.data(‘oxy-pro-menu-off-canvas-animation’), timeout = container.data(‘aos-duration’); if (!animation){ timeout = 0; } setTimeout(function() { container.removeClass(‘oxy-pro-menu-off-canvas-container’) menu.removeClass(‘oxy-pro-menu-off-canvas’); oxygen_offcanvas_menu_toggle_in_progress = false; }, timeout); } else { container.addClass(‘oxy-pro-menu-off-canvas-container’); menu.addClass(‘oxy-pro-menu-off-canvas’); oxygen_pro_menu_set_static_width(menu); } } ]]]]]]]]>]]]]]]>]]]]>]]> ]]]]>]]> { $modal.focus(); }, 500) // Check if this modal can be shown according to settings and last shown time // Current and last time in milliseconds var currentTime = new Date().getTime(); var lastShownTime = localStorage && localStorage[‘oxy-‘ + modalId + ‘-last-shown-time’] ? JSON.parse( localStorage[‘oxy-‘ + modalId + ‘-last-shown-time’] ) : false; // manual triggers aren’t affected by last shown time if( $modal.data( ‘trigger’ ) != ‘user_clicks_element’ ) { switch( $modal.data( ‘open-again’ ) ) { case ‘never_show_again’: // if it was shown at least once, don’t show it again if( lastShownTime !== false ) return; break; case ‘show_again_after’: var settingDays = parseInt( $modal.data( ‘open-again-after-days’ ) ); var actualDays = ( currentTime – lastShownTime ) / ( 60*60*24*1000 ); if( actualDays 0 ) { setTimeout(function () { hideModal(modal); }, 3000); } // Formidable Forms // Formidable Forms replaces the form with a confirmation message on page refresh if( $modal.find(“.frm_message”).length > 0 ) { setTimeout(function () { hideModal(modal); }, 3000); } // Caldera Forms // Caldera Forms replaces the form with a confirmation message on page refresh if( $modal.find(“.caldera-grid .alert-success”).length > 0 ) { setTimeout(function () { hideModal(modal); }, 3000); } } } var hideModal = function ( modal ) { // The function may be called by third party code, without argument, so we must close the first visible modal if( typeof modal === ‘undefined’ ) { var openModals = jQuery(“.oxy-modal-backdrop.live”); if( openModals.length == 0 ) return; modal = openModals[0]; } var $modal = jQuery( modal ); // refresh any iframe so media embedded this way is stopped $modal.find( ‘iframe’).each(function(index){ this.src = this.src; }); // HTML5 videos can be stopped easily $modal.find( ‘video’ ).each(function(index){ this.pause(); }); // If there are any forms in the modal, reset them $modal.find(“form”).each(function(index){ this.reset(); }); $modal.fadeOut(400, function(){ $modal.removeClass(“live”); }); }; window.oxyCloseModal = hideModal; jQuery( “.oxy-modal-backdrop” ).each(function( index ) { var modal = this; (function( modal ){ var $modal = jQuery( modal ); var exitIntentFunction = function( e ){ if( e.clientY scrollTop) isScrollUp = true; } jQuery( modal ).data( ‘previous_scroll_top’, scrollTop ); var trackLength = docheight – winheight; var pctScrolled = Math.floor(scrollTop/trackLength * 100); if( isNaN( pctScrolled ) ) pctScrolled = 0; if( ( isScrollUp && jQuery( modal ).data( ‘trigger_scroll_direction’ ) == ‘up’ ) || ( !isScrollUp && jQuery( modal ).data( ‘trigger_scroll_direction’ ) == ‘down’ && pctScrolled >= parseInt( jQuery( modal ).data( ‘trigger_scroll_amount’ ) ) ) ) { showModal( modal ); window.removeEventListener( “scroll”, scrollDetection ); } }, false); break; case “on_scroll_to_element”: window.addEventListener(“scroll”, function scrollDetection(){ var $element = jQuery( jQuery( modal ).data( ‘scroll_to_selector’ ) ); if( $element.length == 0 ) { window.removeEventListener( “scroll”, scrollDetection ); return; } var top_of_element = $element.offset().top; var bottom_of_element = $element.offset().top + $element.outerHeight(); var bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).innerHeight(); var top_of_screen = jQuery(window).scrollTop(); if ((bottom_of_screen > bottom_of_element – $element.outerHeight() /2 ) && (top_of_screen time ){ clearInterval( idleInterval ); document.removeEventListener( “click”, activityDetected ); document.removeEventListener( “mousemove”, activityDetected ); document.removeEventListener( “keypress”, activityDetected ); document.removeEventListener( “scroll”, activityDetected ); showModal( modal ); } }, 100); break; case “after_number_of_page_views”: var modalId = modal.querySelector(‘.ct-modal’).id; var pageViews = localStorage && localStorage[‘oxy-‘ + modalId + ‘-page-views’] ? parseInt( localStorage[‘oxy-‘ + modalId + ‘-page-views’] ) : 0; pageViews++; if( localStorage ) localStorage[‘oxy-‘ + modalId + ‘-page-views’] = pageViews; if( parseInt( jQuery( modal ).data( ‘number_of_page_views’ ) ) == pageViews ) { if( localStorage ) localStorage[‘oxy-‘ + modalId + ‘-page-views’] = 0; showModal( modal ); } break; } // add event handler to close modal automatically after AJAX form submit if( $modal.data( ‘close-after-form-submit’ ) == ‘yes’ ) { // Contact Form 7 if (typeof wpcf7 !== ‘undefined’) { $modal.find(‘div.wpcf7’).each(function () { var $form = jQuery(this).find(‘form’); this.addEventListener(‘wpcf7submit’, function (event) { if (event.detail.contactFormId == $form.attr(“id”)) { setTimeout(function () { hideModal(modal); }, 3000); } }, false); }); } // Caldera Forms document.addEventListener( “cf.submission”, function(event){ // Pending, Caldera AJAX form submissions aren’t working since Oxygen 2.2, see: https://github.com/soflyy/oxygen/issues/1638 console.log( event ); }); // Ninja Forms jQuery(document).on(“nfFormSubmitResponse”, function(event, response){ // Only close the modal if the event was triggered from a Ninja Form inside the modal if( $modal.find(“#nf-form-” + response.id + “-cont”).length > 0 ) { setTimeout(function () { hideModal(modal); }, 3000); } }); } })( modal ); }); // handle clicks on modal backdrop and on .oxy-close-modal jQuery(“body”).on(‘click touchend’, ‘.oxy-modal-backdrop, .oxy-close-modal’, function( event ) { var $this = jQuery( this ); var $target = jQuery( event.target ); // Click event in the modal div and it’s children is propagated to the backdrop if( !$target.hasClass( ‘oxy-modal-backdrop’ ) && !$this.hasClass( ‘oxy-close-modal’ ) ) { event.stopPropagation(); return; } if( $target.hasClass( ‘oxy-modal-backdrop’ ) && $this.hasClass( ‘oxy-not-closable’ ) ) { return; } if( $this.hasClass( ‘oxy-close-modal’ ) ) event.preventDefault(); var $modal = $this.hasClass( ‘oxy-close-modal’ ) ? $this.closest(‘.oxy-modal-backdrop’) : $this; hideModal( $modal[0] ); }); jQuery(document).keyup( function(e){ if( e.key == ‘Escape’ ){ jQuery(“.oxy-modal-backdrop:visible”).each(function(index){ if( jQuery(this).data(“close_on_esc”) == ‘on’ ) hideModal(this); }); } } ); }); ]]]]]]]]>]]]]]]>]]]]>]]> -1});for(var o=[];e&&e!==document;e=e.parentNode)t?e.matches(t)&&o.push(e):o.push(e);return o}}; function ouAccordionMenu(){var e=document.querySelectorAll(“.oxy-ou-accordion-menu”);e.forEach(e=>{var t=e.querySelector(“nav”),r=t.getAttribute(“data-sub-menu-icon”),a=t.getAttribute(“data-toggle-duration”);t.querySelectorAll(“.menu-item-has-children > a”).forEach(e=>{if(void 0!==r||null!=r){e.insertAdjacentHTML(“beforeend”,”);var t=e.querySelector(“.ou-menu-items-arrow”);t.querySelector(“use”).setAttribute(“xlink:href”,”#”+r),t.setAttribute(“aria-label”,”Sub Menu of “+e.getAttribute(“data-title”))}[“click”,”touchstart”].forEach(r=>{“#”===e.getAttribute(“href”)&&e.addEventListener(r,function(e){e.stopPropagation(),e.preventDefault(),(t=this.querySelector(“.ou-menu-items-arrow”)).click()}),t.addEventListener(r,function(e){e.stopPropagation(),e.preventDefault();var t=”false”==this.getAttribute(“aria-expanded”)?”true”:”false”,r=”false”==this.getAttribute(“aria-pressed”)?”true”:”false”,i=”true”==this.getAttribute(“aria-hidden”)?”false”:”true”;this.setAttribute(“aria-expanded”,t),this.setAttribute(“aria-pressed”,r),this.setAttribute(“aria-hidden”,i);var s=this.closest(“li.menu-item-has-children”).querySelectorAll(“.sub-menu”)[0];OxyUltimate.slideToggle(s,parseInt(a)),”false”==i?this.classList.add(“acrd-menu-open”):this.classList.remove(“acrd-menu-open”)})})}),currentItems=t.querySelectorAll(“.current-menu-item”),currentItems&¤tItems.forEach(e=>{var t=OxyUltimate.getParents(e,”.current-menu-ancestor”);t&&t.forEach(e=>{link=e.querySelector(“a”),arrowBtn=link.closest(“.menu-item-has-children > a”).querySelector(“.ou-menu-items-arrow”),arrowBtn.click()})})})} ]]]]]]]]>]]]]]]>]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]>]]> ]]]]]]>]]]]>]]> ]]]]]]>]]]]>]]> ]]]]>]]>
Source