(function() { 'use strict'; // Default Object var g = { settings: { version: '2.0.1', description: 'A client module to responsify HQ Sites on businesswire', bwjq: '1.2.6', debug_mode: false, custom_mode: false, force_desktop_mode: 'IPE', toggle_nav: false, break_points: [960, 600, 480], hq_type: '', base_theme: '', client_url: '#', client_logo: '', client_menu: '', client_search: '', bw_menu: '', bw_search: '', key_image_t: '', key_image_m: '', key_image_crop: 'crop', bg_top: '', bg_menu: '', link_default: '', link_active: '', hide_these: '', ignore_list: '.emvideo-thumbnail-replacement span, #panels-ipe-control-container, .pane-pr-body ul, .pane-node-body ul, img[class*="listview_thumb"], .more, .bw-user-links-list li, map, var, .pane-pr-body table, .pane-node-body table, .node-type-press-release #bw-content-content table', m_ignore: '', m_wrapper: 'body' } }; // Debug functions g.debuggers = { triggered: false, debug: function(f) { if (!g.debuggers.triggered) { window.onerror = function(error) { g.debuggers.logger(error); }; var bwjq = bw_responsive.debuggers.jquery(), stringTest = bw_responsive.settings.bg_top + bw_responsive.settings.bg_menu + bw_responsive.settings .link_default + bw_responsive.settings.link_active; if (bwjq.v !== bw_responsive.settings.bwjq) { if (bwjq.loaded) { g.debuggers.logger('jQuery on window is ' + bw_responsive.debuggers.jquery().v, 'Should be: ' + bw_responsive.settings .bwjq); } else { g.debuggers.logger('No jQuery detected', 'Please load jQuery' + bw_responsive.settings .bwjq ); } } if (stringTest.indexOf(';') === -1) { bw_responsive.debuggers.clock.t_start(); f(); //g.debuggers.logger(bw_responsive.debuggers.clock.t_stop()); } else { g.debuggers.logger( 'please do not use semi colons in variable settings' ); } } else { bw_responsive.debuggers.clock.t_start(); f(); //g.debuggers.logger(bw_responsive.debuggers.clock.t_stop()); } g.debuggers.triggered = true; }, logger: function() { bw_responsive.debuggers.log_history = bw_responsive.debuggers .log_history || []; // store logs to an array for reference bw_responsive.debuggers.log_history.push(arguments); if (g.settings.debug_mode) { if (window.console) { console.log(Array.prototype.slice.call( arguments)); } else { alert(Array.prototype.slice.call(arguments)); } } }, clock: { now: (function() { var performance = window.performance || {}; performance.now = (function() { return performance.now || performance.webkitNow || performance.msNow || performance.oNow || performance.mozNow || function() { return new Date().getTime(); }; })(); return performance.now(); }), t_start: function() { bw_responsive.debuggers.clock.i = bw_responsive.debuggers .clock .now(); }, t_stop: function() { bw_responsive.debuggers.clock.o = bw_responsive.debuggers .clock .now(); return bw_responsive.debuggers.clock.o - bw_responsive.debuggers .clock.i; } }, jquery: function() { var j; typeof jQuery === 'undefined' ? j = { loaded: false, v: '' } : j = { loaded: true, v: $().jquery }; return j; }, in_iframe: function() { try { return window.self !== window.top; } catch (e) { return true; } } }; //Init to grab overides and construct / replace window.bw_responsive object g.init = function() { if (g.debuggers.in_iframe()) { $(document).ready(function() { $('body').removeClass('bw_mobile_loader bw-responsive-mobile-loader') }); return false; } window.bw_responsive_overrides = window.bw_responsive_overrides || {}; g.settings = $.extend(g.settings, bw_responsive_overrides); g.settings.debug_mode ? g.debuggers.debug(w) : w(); }; function w() { // Actions g.detectors = { device: { android: function() { return /Android/i.test(navigator.userAgent); }, black_berry: function() { return /BlackBerry/i.test(navigator.userAgent); }, ios: function() { return /iPhone|iPad|iPod/i.test(navigator.userAgent); }, opera: function() { return /Opera Mini/i.test(navigator.userAgent); }, windows: function() { return /IEMobile/i.test(navigator.userAgent); }, hand_held: function() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|android|ipad|playbook|silk|Opera Mini/i.test(navigator.userAgent); }, emulator: function() { return window.self !== window.top; } }, media_query_ok: function() { return (typeof document.addEventListener != 'undefined' && (typeof window.matchMedia != 'undefined' || typeof window .msMatchMedia != 'undefined')); }, screen_size: function() { var e = window, a = 'inner'; if (!('innerWidth' in window)) { a = 'client'; e = document.documentElement || document.body; } return { width: e[a + 'Width'], height: e[a + 'Height'] }; }, orientation_change: function(f) { function onOrientationChange() { var doit = doit || ''; clearTimeout(doit); doit = setTimeout(function() { f(); }, 100); } if(typeof(window.orientation) == "undefined") { bw_responsive.detectors.screen_resize(f); return; } //Check if orientation changed var previousOrientation = window.orientation; var checkOrientation = function() { if (window.orientation !== previousOrientation) { previousOrientation = window.orientation; onOrientationChange(); } }; // Listeners window.addEventListener('resize', checkOrientation, false); window.addEventListener('orientationchange', checkOrientation, false); // Android doesn't always fire orientationChange on 180 degree turns if (bw_responsive.detectors.device.android()) { setInterval(checkOrientation, 2000); } //trigger onOrientationChange(); }, screen_resize: function(f) { $(window).resize(function() { var doit = doit || ''; clearTimeout(doit); var doit = setTimeout(function() { f(); }, 10); }).trigger('resize'); }, base_theme: function() { if (typeof bw_responsive.settings.base_theme !== 'undefined') { return bw_responsive.settings.base_theme; } else { //determin hq base it was not provided return 'unknown'; } }, plugin_path: function() { var path = '', scripts = document.getElementsByTagName( 'script'); for (var i = 0; i < scripts.length; i++) { var n = scripts[i].src.indexOf( '/js/bw-responsive.'); if (n > -1) { path = scripts[i].src.slice(0, n) + '/'; } } if (path.length == 0) path = window.location.protocol + '//' + window.location .hostname + '/sites/all/modules/custom/bw_responsive/'; return path; }, hq_type: function() { if (typeof bw_responsive.settings.hq_type !== 'undefined') { return bw_responsive.settings.hq_type; } else { //determin hq base it was not provided return 'unknown'; } }, get_visible: function(parent) { var p = $(parent)[0], found = [p], checked = 0; if (p == undefined) return []; function get_children(o) { var all = o.childNodes, children = []; for (var i = 0; i < all.length; i++) { var obj = all[i]; if (obj.nodeType == 1 && obj.nodeName != 'SCRIPT' && obj.nodeName != 'NOSCRIPT' && obj.nodeName != 'STYLE' && (obj.className).indexOf( 'bw_mobile_') == - 1) { var comp = obj.currentStyle || getComputedStyle( obj, null); if (comp.display !== 'none') { children.push(obj); } } } checked++; found = found.concat(children); } while (checked < found.length && checked < 1000) { get_children(found[checked]); } return found; }, check_css: function(elements, rule, width) { var found = [], total = 0, checks = { position: function(o) { return o.position == 'fixed' || o.position == 'absolute'; }, width: function(o, w) { return parseInt(o.width) > w; }, box: function(o) { return (Math.abs(parseInt(o.marginLeft)) > 0 || Math.abs(parseInt(o.marginRight)) > 0 || parseInt(o.paddingLeft) > 0 || parseInt(o.paddingRight) > 0) && (o.backgroundColor == 'transparent' || o.backgroundColor == 'rgba(0, 0, 0, 0)') && o.backgroundImage == 'none'; } }; for (var i = 0; i < elements.length; i++) { var obj = elements[i]; var comp = obj.currentStyle || getComputedStyle(obj, null); if (checks[rule](comp, width)) { found[total++] = obj; } } return $(found).not('#bw-content-content'); }, double_check: function(obj, rule, range) { range = range || ''; var not_fixed = [], i = 0, checks = { position: function(o) { if (o.css('position') == 'fixed' || o .css( 'position') == 'absolute') not_fixed[i++] = o[0]; }, width: function(o, w) { if (o.width() > w) not_fixed[i++] = o[ 0]; }, box: function(o) { if (Math.abs(parseInt(o.css( 'margin-left'))) > 0 || Math.abs(parseInt(o.css( 'margin-right'))) > 0 || parseInt(o.css( 'padding-left')) > 0 || parseInt(o.css( 'padding-right')) > 0) not_fixed[i++] = o[0]; } }; obj.each(function() { checks[rule]($(this), range); }); if (not_fixed.length > 0) bw_responsive.debuggers .logger( 'possible ' + rule + ' issues detected. ' + range, not_fixed); } }; g.cookies = { set_cookie: function(c_name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var c_value = escape(value) + ((exdays == null) ? '' : '; expires=' + exdate.toUTCString()); c_value += '; path=/'; document.cookie = c_name + '=' + c_value; }, get_cookie: function(c_name) { var c_value = document.cookie; var c_start = c_value.indexOf(' ' + c_name + '='); if (c_start == -1) { c_start = c_value.indexOf(c_name + '='); } if (c_start == -1) { c_value = null; } else { c_start = c_value.indexOf('=', c_start) + 1; var c_end = c_value.indexOf(';', c_start); if (c_end == -1) { c_end = c_value.length; } c_value = unescape(c_value.substring( c_start, c_end)); } return c_value; } }; g.fixers = { add_style: function(css) { var rules = css.join(' '); $('head').append(''); }, toggle_responsive: function() { var f = 'on'; if (bw_responsive.cookies.view_mobile_site.length <= 2) f = 'off'; bw_responsive.cookies.set_cookie('bw_mobile_c', f, 365); window.location.reload(); return false; }, viewport_meta: function(m) { if (m) { if ($('meta[name="viewport"]') .length == 0) $('head').append( '' ); } else { $('meta[name="viewport"]').remove(); $('head').append( '' ); } if ($('meta[name="mobileoptimized"]').length == 0) $('head').append( '' ); }, configure_toggle_nav: function() { var i = 4; while(i>1) { $('.m_depth_'+(i--)).prev('.m_depth_'+i).prepend('
'); } $('.bw_toggle_nav').bind('click',function(){ var $toggle = $(this), level = $toggle.attr('data-level'); if($(this).hasClass('bw_toggle_nav_closed')) { $(this).parent().nextAll('li').each(function() { var $this = $(this); if ($this.hasClass('m_depth_'+(level-1)) || $this.hasClass('m_depth_'+(level-2)) || $this.hasClass('m_depth_'+(level-3)) || $this.hasClass('m_depth_'+(level-4))) { return false; } else if($this.hasClass('m_depth_'+level)) { $this.slideDown(); } }) } else { $(this).parent().nextAll('li').each(function() { var $this = $(this), $innerToggle = $this.find('.bw_toggle_nav'); if ($this.hasClass('m_depth_'+(level-1)) || $this.hasClass('m_depth_'+(level-2)) || $this.hasClass('m_depth_'+(level-3)) || $this.hasClass('m_depth_'+(level-4))) { return false; } else { if($innerToggle.length > 0) { $innerToggle.addClass('bw_toggle_nav_closed'); } $this.slideUp(); } }); } $toggle.toggleClass('bw_toggle_nav_closed'); }); }, break_points: function(w) { for (var i = 0; i < bw_responsive.settings.break_points .length; i++) { if (w <= bw_responsive.settings.break_points[ i] && w > bw_responsive.settings.break_points[i + 1] ) { if (bw_responsive.detectors.break_point != bw_responsive.settings.break_points[ i] ) { var c = '', c2 = '', r = ''; for (var i2 = 1; i2 < bw_responsive .settings .break_points .length; i2++) { if (i2 < i) { r += ' bw_max_' + i2; } else if (i2 > i) { c += ' bw_max_' + i2; c2 += ' bw_min_' + i2; } else { r += ' bw_max_' + i; } } bw_responsive.detectors.break_point = bw_responsive.settings.break_points[ i]; return { 'p': bw_responsive.detectors.break_point, 'r': r, 'a': c, 'b': c2 }; } break; } } return false; }, create_link_tree: function(parent) { var newList = '', checked, found, links, depths; function insertArrayAt(array, index, arrayToInsert) { Array.prototype.splice.apply(array, [ index, 0 ] .concat( arrayToInsert)); } function get_children(o) { var all = o.childNodes, children = []; for (var i = 0; i < all.length; i++) { var obj = all[i]; if (obj.nodeType == 1 && obj.nodeName != 'SCRIPT' && obj.nodeName != 'NOSCRIPT' && obj.nodeName != 'STYLE') { obj.nodeName == 'A' ? links.push( obj) : children.push(obj); } } checked++; insertArrayAt(found, checked, children); } $(parent).each(function() { var p = this; found = [p], links = [], depths = [], checked = 0; while (checked < found.length) { get_children(found[checked]); } for (var i = 0; i < links.length; i++) { var total = 0, a = links[i]; while (a) { a = a.parentNode; total++; } if (depths.indexOf(total) == -1) depths.push( total); var depth = depths.indexOf(total) + 1; var linkText = $.trim($(links[i]).text()), linkHREF = $(links[i]).attr('href') || ''; if (linkText.length == 0) try { linkText = $(this).find('img:first') .attr( 'alt'); } catch (err) {} try { if (linkHREF.length > 0 && linkHREF != '#' && linkText.length > 0 ) newList += '