/* ATTENTION! This file was generated automatically! Don't change it!!! ----------------------------------------------------------------------- */ /** * Full Background Video * * More info on Audio/Video Media Events/Attributes/Methods * - https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events * - http://www.w3schools.com/tags/ref_av_dom.asp */ (function (global) { "use strict"; // Define Bideo constructor on the global object global.Bideo = function () { // Plugin options this.opt = null; // The Video element this.videoEl = null; // Approximate Loading Rate // // The value will be a number like 0.8 // which means to load 4 seconds of the video // it takes 5 seconds. If the number is super low // like 0.2 (regular 3g connections) then you can // decide whether to play the video or not. // This behaviour will be controller with // the `acceptableLoadingRate` option. this.approxLoadingRate = null; // Methods to which `this` will be bound this._resize = null; this._progress = null; // Time at which video is initialized this.startTime = null; this.onLoadCalled = false; // Initialize and setup the video in DOM` this.init = function (opt) { // If not set then set to an empty object this.opt = opt = opt || {}; var self = this; self._resize = self.resize.bind(this); // Video element self.videoEl = opt.videoEl; // Meta data event self.videoEl.addEventListener('loadedmetadata', self._resize, false); // Fired when enough has been buffered to begin the video // self.videoEl.readyState === 4 (HAVE_ENOUGH_DATA) self.videoEl.addEventListener('canplay', function () { // Play the video when enough has been buffered if (!self.opt.isMobile) { self.opt.onLoad && self.opt.onLoad(); if (self.opt.autoplay !== false) self.videoEl.play(); } }); // If resizing is required (resize video as window/container resizes) if (self.opt.resize) { global.addEventListener('resize', self._resize, false); } // Start time of video initialization this.startTime = (new Date()).getTime(); // Create `source` for video this.opt.src.forEach(function (srcOb, i, arr) { var key , val , source = document.createElement('source'); // Set all the attribute key=val supplied in `src` option for (key in srcOb) { if (srcOb.hasOwnProperty(key)) { val = srcOb[key]; source.setAttribute(key, val); } } self.videoEl.appendChild(source); }); if (self.opt.isMobile) { if (self.opt.playButton) { self.opt.videoEl.addEventListener('timeupdate', function () { if (!self.onLoadCalled) { self.opt.onLoad && self.opt.onLoad(); self.onLoadCalled = true; } }); self.opt.playButton.addEventListener('click', function () { self.opt.pauseButton.style.display = 'inline-block'; this.style.display = 'none'; self.videoEl.play(); }, false); self.opt.pauseButton.addEventListener('click', function () { this.style.display = 'none'; self.opt.playButton.style.display = 'inline-block'; self.videoEl.pause(); }, false); } } return; }; // Called once video metadata is available // // Also called when window/container is resized this.resize = function () { // IE/Edge still don't support object-fit: cover if ('object-fit' in document.body.style) return; // Video's intrinsic dimensions var w = this.videoEl.videoWidth , h = this.videoEl.videoHeight; // Intrinsic ratio // Will be more than 1 if W > H and less if H > W var videoRatio = (w / h).toFixed(2); // Get the container DOM element and its styles // // Also calculate the min dimensions required (this will be // the container dimentions) var container = this.opt.container , containerStyles = global.getComputedStyle(container) , minW = parseInt( containerStyles.getPropertyValue('width') ) , minH = parseInt( containerStyles.getPropertyValue('height') ); // If !border-box then add paddings to width and height if (containerStyles.getPropertyValue('box-sizing') !== 'border-box') { var paddingTop = containerStyles.getPropertyValue('padding-top') , paddingBottom = containerStyles.getPropertyValue('padding-bottom') , paddingLeft = containerStyles.getPropertyValue('padding-left') , paddingRight = containerStyles.getPropertyValue('padding-right'); paddingTop = parseInt(paddingTop); paddingBottom = parseInt(paddingBottom); paddingLeft = parseInt(paddingLeft); paddingRight = parseInt(paddingRight); minW += paddingLeft + paddingRight; minH += paddingTop + paddingBottom; } // What's the min:intrinsic dimensions // // The idea is to get which of the container dimension // has a higher value when compared with the equivalents // of the video. Imagine a 1200x700 container and // 1000x500 video. Then in order to find the right balance // and do minimum scaling, we have to find the dimension // with higher ratio. // // Ex: 1200/1000 = 1.2 and 700/500 = 1.4 - So it is best to // scale 500 to 700 and then calculate what should be the // right width. If we scale 1000 to 1200 then the height // will become 600 proportionately. var widthRatio = minW / w; var heightRatio = minH / h; // Whichever ratio is more, the scaling // has to be done over that dimension if (widthRatio > heightRatio) { var new_width = minW; var new_height = Math.ceil( new_width / videoRatio ); } else { var new_height = minH; var new_width = Math.ceil( new_height * videoRatio ); } this.videoEl.style.width = new_width + 'px'; this.videoEl.style.height = new_height + 'px'; }; }; }(window));/* jQuery tubular plugin |* by Sean McCambridge |* http://www.seanmccambridge.com/tubular |* version: 1.0 |* updated: October 1, 2012 |* since 2010 |* licensed under the MIT License |* Enjoy. |* |* Thanks, |* Sean */ ;(function ($, window) { // test for feature support and return if failure // defaults var defaults = { ratio: 16/9, // usually either 4/3 or 16/9 -- tweak as needed videoId: 'ZCAnLxRvNNc', // toy robot in space is a good default, no? mute: true, repeat: true, width: $(window).width(), wrapperZIndex: 99, playButtonClass: 'tubular-play', pauseButtonClass: 'tubular-pause', muteButtonClass: 'tubular-mute', volumeUpClass: 'tubular-volume-up', volumeDownClass: 'tubular-volume-down', increaseVolumeBy: 10, start: 0 }; // methods var tubular = function(node, options) { // should be called on the wrapper div var options = $.extend({}, defaults, options), $body = $('body'), // cache body node $node = $(node); // cache wrapper node // build container var tubularContainer = '
'; // set up css prereq's, inject tubular container and set up wrapper defaults $('html,body').css({'width': '100%', 'height': '100%'}); $body.prepend(tubularContainer); $node.css({position: 'relative', 'z-index': options.wrapperZIndex}); // set up iframe player, use global scope so YT api can talk window.player; window.onYouTubeIframeAPIReady = function() { player = new YT.Player('tubular-player', { width: options.width, height: Math.ceil(options.width / options.ratio), videoId: options.videoId, playerVars: { controls: 0, showinfo: 0, modestbranding: 1, wmode: 'transparent' }, events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange } }); }; window.onPlayerReady = function(e) { resize(); if (options.mute) e.target.mute(); e.target.seekTo(options.start); e.target.playVideo(); }; window.onPlayerStateChange = function(state) { if (state.data === 0 && options.repeat) { // video ended and repeat option is set true player.seekTo(options.start); // restart } }; // resize handler updates width, height and offset of player after resize/init var resize = function() { var width = $(window).width(), pWidth, // player width, to be defined height = $(window).height(), pHeight, // player height, tbd $tubularPlayer = $('#tubular-player'); // when screen aspect ratio differs from video, video must center and underlay one dimension if (width / options.ratio < height) { // if new video height < window height (gap underneath) pWidth = Math.ceil(height * options.ratio); // get new player width $tubularPlayer.width(pWidth).height(height).css({left: (width - pWidth) / 2, top: 0}); // player width is greater, offset left; reset top } else { // new video width < window width (gap to right) pHeight = Math.ceil(width / options.ratio); // get new player height $tubularPlayer.width(width).height(pHeight).css({left: 0, top: (height - pHeight) / 2}); // player height is greater, offset top; reset left } }; // events $(window).on('resize.tubular', function() { resize(); }); $('body').on('click','.' + options.playButtonClass, function(e) { // play button e.preventDefault(); player.playVideo(); }).on('click', '.' + options.pauseButtonClass, function(e) { // pause button e.preventDefault(); player.pauseVideo(); }).on('click', '.' + options.muteButtonClass, function(e) { // mute button e.preventDefault(); (player.isMuted()) ? player.unMute() : player.mute(); }).on('click', '.' + options.volumeDownClass, function(e) { // volume down button e.preventDefault(); var currentVolume = player.getVolume(); if (currentVolume < options.increaseVolumeBy) currentVolume = options.increaseVolumeBy; player.setVolume(currentVolume - options.increaseVolumeBy); }).on('click', '.' + options.volumeUpClass, function(e) { // volume up button e.preventDefault(); if (player.isMuted()) player.unMute(); // if mute is on, unmute var currentVolume = player.getVolume(); if (currentVolume > 100 - options.increaseVolumeBy) currentVolume = 100 - options.increaseVolumeBy; player.setVolume(currentVolume + options.increaseVolumeBy); }); }; // load yt iframe js api var tag = document.createElement('script'); tag.src = "//www.youtube.com/iframe_api"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); // create plugin $.fn.tubular = function (options) { return this.each(function () { if (!$.data(this, 'tubular_instantiated')) { // let's only run one $.data(this, 'tubular_instantiated', tubular(this, options)); } }); }; })(jQuery, window);/** * Javascript utilities * * @package WordPress * @subpackage SHIELDGROUP * @since SHIELDGROUP 1.0 */ /* global jQuery:false */ /* global SHIELDGROUP_STORAGE:false */ /* Global variables manipulations ---------------------------------------------------------------- */ (function(){ "use strict"; // Global variables storage if (typeof SHIELDGROUP_STORAGE == 'undefined') window.SHIELDGROUP_STORAGE = {}; // Get global variable window.shieldgroup_storage_get = function(var_name) { return shieldgroup_isset(SHIELDGROUP_STORAGE[var_name]) ? SHIELDGROUP_STORAGE[var_name] : ''; }; // Set global variable window.shieldgroup_storage_set = function(var_name, value) { SHIELDGROUP_STORAGE[var_name] = value; }; // Inc/Dec global variable with specified value window.shieldgroup_storage_inc = function(var_name) { var value = arguments[1]===undefined ? 1 : arguments[1]; SHIELDGROUP_STORAGE[var_name] += value; }; // Concatenate global variable with specified value window.shieldgroup_storage_concat = function(var_name, value) { SHIELDGROUP_STORAGE[var_name] += ''+value; }; // Get global array element window.shieldgroup_storage_get_array = function(var_name, key) { return shieldgroup_isset(SHIELDGROUP_STORAGE[var_name][key]) ? SHIELDGROUP_STORAGE[var_name][key] : ''; }; // Set global array element window.shieldgroup_storage_set_array = function(var_name, key, value) { if (!shieldgroup_isset(SHIELDGROUP_STORAGE[var_name])) SHIELDGROUP_STORAGE[var_name] = {}; SHIELDGROUP_STORAGE[var_name][key] = value; }; // Inc/Dec global array element with specified value window.shieldgroup_storage_inc_array = function(var_name, key) { var value = arguments[2]===undefined ? 1 : arguments[2]; SHIELDGROUP_STORAGE[var_name][key] += value; }; // Concatenate global array element with specified value window.shieldgroup_storage_concat_array = function(var_name, key, value) { SHIELDGROUP_STORAGE[var_name][key] += ''+value; }; /* PHP-style functions ---------------------------------------------------------------- */ window.shieldgroup_isset = function(obj) { return typeof(obj) != 'undefined'; }; window.shieldgroup_empty = function(obj) { return typeof(obj) == 'undefined' || (typeof(obj)=='object' && obj == null) || (typeof(obj)=='array' && obj.length == 0) || (typeof(obj)=='string' && shieldgroup_alltrim(obj)=='') || obj===0; }; window.shieldgroup_is_array = function(obj) { return typeof(obj)=='array'; }; window.shieldgroup_is_object = function(obj) { return typeof(obj)=='object'; }; window.shieldgroup_clone_object = function(obj) { if (obj == null || typeof(obj) != 'object') { return obj; } var temp = {}; for (var key in obj) { temp[key] = shieldgroup_clone_object(obj[key]); } return temp; }; window.shieldgroup_merge_objects = function(obj1, obj2) { for (var i in obj2) obj1[i] = obj2[i]; return obj1; }; // Generates a storable representation of a value window.shieldgroup_serialize = function(mixed_val) { var obj_to_array = arguments.length==1 || argument[1]===true; switch (typeof(mixed_val)) { case "number": if (isNaN(mixed_val) || !isFinite(mixed_val)) return false; else return (Math.floor(mixed_val) == mixed_val ? "i" : "d") + ":" + mixed_val + ";"; case "string": return "s:" + mixed_val.length + ":\"" + mixed_val + "\";"; case "boolean": return "b:" + (mixed_val ? "1" : "0") + ";"; case "object": if (mixed_val == null) return "N;"; else if (mixed_val instanceof Array) { var idxobj = { idx: -1 }; var map = []; for (var i=0; i < mixed_val.length; i++) { idxobj.idx++; var ser = shieldgroup_serialize(mixed_val[i]); if (ser) map.push(shieldgroup_serialize(idxobj.idx) + ser); } return "a:" + mixed_val.length + ":{" + map.join("") + "}"; } else { var class_name = shieldgroup_get_class(mixed_val); if (class_name == undefined) return false; var props = new Array(); for (var prop in mixed_val) { var ser = shieldgroup_serialize(mixed_val[prop]); if (ser) props.push(shieldgroup_serialize(prop) + ser); } if (obj_to_array) return "a:" + props.length + ":{" + props.join("") + "}"; else return "O:" + class_name.length + ":\"" + class_name + "\":" + props.length + ":{" + props.join("") + "}"; } case "undefined": return "N;"; } return false; }; // Returns the name of the class of an object window.shieldgroup_get_class = function(obj) { if (obj instanceof Object && !(obj instanceof Array) && !(obj instanceof Function) && obj.constructor) { var arr = obj.constructor.toString().match(/function\s*(\w+)/); if (arr && arr.length == 2) return arr[1]; } return false; }; /* String functions ---------------------------------------------------------------- */ window.shieldgroup_in_list = function(str, list) { var delim = arguments[2]!==undefined ? arguments[2] : '|'; var icase = arguments[3]!==undefined ? arguments[3] : true; var retval = false; if (icase) { if (typeof(str)=='string') str = str.toLowerCase(); list = list.toLowerCase(); } var parts = list.split(delim); for (var i=0; i < parts.length; i++) { if (parts[i]==str) { retval=true; break; } } return retval; }; window.shieldgroup_alltrim = function(str) { var dir = arguments[1]!==undefined ? arguments[1] : 'a'; var rez = ''; var i, start = 0, end = str.length-1; if (dir=='a' || dir=='l') { for (i=0; i < str.length; i++) { if (str.substr(i,1)!=' ') { start = i; break; } } } if (dir=='a' || dir=='r') { for (i=str.length-1; i >= 0; i--) { if (str.substr(i,1)!=' ') { end = i; break; } } } return str.substring(start, end+1); }; window.shieldgroup_ltrim = function(str) { return shieldgroup_alltrim(str, 'l'); }; window.shieldgroup_rtrim = function(str) { return shieldgroup_alltrim(str, 'r'); }; window.shieldgroup_padl = function(str, len) { var ch = arguments[2]!==undefined ? arguments[2] : ' '; var rez = str.substr(0,len); if (rez.length < len) { for (var i=0; i < len-str.length; i++) rez += ch; } return rez; }; window.shieldgroup_padr = function(str, len) { var ch = arguments[2]!==undefined ? arguments[2] : ' '; var rez = str.substr(0,len); if (rez.length < len) { for (var i=0; i < len-str.length; i++) rez = ch + rez; } return rez; }; window.shieldgroup_padc = function(str, len) { var ch = arguments[2]!==undefined ? arguments[2] : ' '; var rez = str.substr(0,len); if (rez.length < len) { for (var i=0; i < Math.floor((len-str.length)/2); i++) rez = ch + rez + ch; } return rez+(rez.length") .replace(/\}\}/g, "") .replace(/\(\(/g, "") .replace(/\)\)/g, "") .replace(/\|\|/g, "
"); }; /* Numbers functions ---------------------------------------------------------------- */ // Round number to specified precision. // For example: num=1.12345, prec=2, rounded=1.12 // num=12345, prec=-2, rounded=12300 window.shieldgroup_round_number = function(num) { var precision = arguments[1]!==undefined ? arguments[1] : 0; var p = Math.pow(10, precision); return Math.round(num*p)/p; }; // Clear number from any characters and append it with 0 to desired precision // For example: num=test1.12dd, prec=3, cleared=1.120 window.shieldgroup_clear_number = function(num) { var precision = arguments[1]!==undefined ? arguments[1] : 0; var defa = arguments[2]!==undefined ? arguments[2] : 0; var res = ''; var decimals = -1; num = ""+num; if (num=="") num=""+defa; for (var i=0; i < num.length; i++) { if (decimals==0) break; else if (decimals>0) decimals--; var ch = num.substr(i,1); if (ch=='.') { if (precision>0) { res += ch; } decimals = precision; } else if ((ch>=0 && ch<=9) || (ch=='-' && i==0)) res+=ch; } if (precision>0 && decimals!=0) { if (decimals==-1) { res += '.'; decimals = precision; } for (i=decimals; i > 0; i--) res +='0'; } //if (isNaN(res)) res = clearNumber(defa, precision, defa); return res; }; // Convert number from decimal to hex window.shieldgroup_dec2hex = function(n) { return Number(n).toString(16); }; // Convert number from hex to decimal window.shieldgroup_hex2dec = function(hex) { return parseInt(hex,16); }; /* Array manipulations ---------------------------------------------------------------- */ window.shieldgroup_in_array = function(val, thearray) { var rez = false; for (var i=0; i < thearray.length-1; i++) { if (thearray[i] == val) { rez = true; break; } } return rez; }; window.shieldgroup_sort_array = function(thearray) { var caseSensitive = arguments[1]!==undefined ? arguments[1] : false; var tmp = ''; for (var x=0; x < thearray.length-1; x++) { for (var y=(x+1); y < thearray.length; y++) { if (caseSensitive) { if (thearray[x] > thearray[y]) { tmp = thearray[x]; thearray[x] = thearray[y]; thearray[y] = tmp; } } else { if (thearray[x].toLowerCase() > thearray[y].toLowerCase()) { tmp = thearray[x]; thearray[x] = thearray[y]; thearray[y] = tmp; } } } } return thearray; }; /* Date manipulations ---------------------------------------------------------------- */ // Return array[Year, Month, Day, Hours, Minutes, Seconds] // from string: Year[-/.]Month[-/.]Day[T ]Hours:Minutes:Seconds window.shieldgroup_parse_date = function(dt) { dt = dt.replace(/\//g, '-').replace(/\./g, '-').replace(/T/g, ' ').split('+')[0]; var dt2 = dt.split(' '); var d = dt2[0].split('-'); var t = dt2[1].split(':'); d.push(t[0], t[1], t[2]); return d; }; // Return difference string between two dates window.shieldgroup_get_date_difference = function(dt1) { var dt2 = arguments[1]!==undefined ? arguments[1] : ''; var short_date = arguments[2]!==undefined ? arguments[2] : true; var sec = arguments[3]!==undefined ? arguments[3] : false; var a1 = shieldgroup_parse_date(dt1); dt1 = Date.UTC(a1[0], a1[1], a1[2], a1[3], a1[4], a1[5]); if (dt2 == '') { dt2 = new Date(); var a2 = [dt2.getFullYear(), dt2.getMonth()+1, dt2.getDate(), dt2.getHours(), dt2.getMinutes(), dt2.getSeconds()]; } else var a2 = shieldgroup_parse_date(dt2); dt2 = Date.UTC(a2[0], a2[1], a2[2], a2[3], a2[4], a2[5]); var diff = Math.round((dt2 - dt1)/1000); var days = Math.floor(diff / (24*3600)); diff -= days * 24 * 3600; var hours = Math.floor(diff / 3600); diff -= hours * 3600; var minutes = Math.floor(diff / 60); diff -= minutes * 60; var rez = ''; if (days > 0) rez += (rez!='' ? ' ' : '') + days + ' day' + (days > 1 ? 's' : ''); if ((!short_date || rez=='') && hours > 0) rez += (rez!='' ? ' ' : '') + hours + ' hour' + (hours > 1 ? 's' : ''); if ((!short_date || rez=='') && minutes > 0) rez += (rez!='' ? ' ' : '') + minutes + ' minute' + (minutes > 1 ? 's' : ''); if (sec || rez=='') rez += rez!='' || sec ? (' ' + diff + ' second' + (diff > 1 ? 's' : '')) : 'less then minute'; return rez; }; /* Colors functions ---------------------------------------------------------------- */ window.shieldgroup_hex2rgb = function(hex) { hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; }; window.shieldgroup_hex2rgba = function(hex, alpha) { var rgb = shieldgroup_hex2rgb(hex); return 'rgba('+rgb.r+','+rgb.g+','+rgb.b+','+alpha+')'; }; window.shieldgroup_rgb2hex = function(color) { var aRGB; color = color.replace(/\s/g,"").toLowerCase(); if (color=='rgba(0,0,0,0)' || color=='rgba(0%,0%,0%,0%)') color = 'transparent'; if (color.indexOf('rgba(')==0) aRGB = color.match(/^rgba\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i); else aRGB = color.match(/^rgb\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i); if(aRGB) { color = ''; for (var i=1; i <= 3; i++) color += Math.round((aRGB[i][aRGB[i].length-1]=="%"?2.55:1)*parseInt(aRGB[i])).toString(16).replace(/^(.)$/,'0$1'); } else color = color.replace(/^#?([\da-f])([\da-f])([\da-f])$/i, '$1$1$2$2$3$3'); return (color.substr(0,1)!='#' ? '#' : '') + color; }; window.shieldgroup_components2hex = function(r,g,b) { return '#'+ Number(r).toString(16).toUpperCase().replace(/^(.)$/,'0$1') + Number(g).toString(16).toUpperCase().replace(/^(.)$/,'0$1') + Number(b).toString(16).toUpperCase().replace(/^(.)$/,'0$1'); }; window.shieldgroup_rgb2components = function(color) { color = shieldgroup_rgb2hex(color); var matches = color.match(/^#?([\dabcdef]{2})([\dabcdef]{2})([\dabcdef]{2})$/i); if (!matches) return false; for (var i=1, rgb = new Array(3); i <= 3; i++) rgb[i-1] = parseInt(matches[i],16); return rgb; }; window.shieldgroup_hex2hsb = function(hex) { var h = arguments[1]!==undefined ? arguments[1] : 0; var s = arguments[2]!==undefined ? arguments[2] : 0; var b = arguments[3]!==undefined ? arguments[3] : 0; var hsb = shieldgroup_rgb2hsb(shieldgroup_hex2rgb(hex)); hsb.h = Math.min(359, hsb.h + h); hsb.s = Math.min(100, hsb.s + s); hsb.b = Math.min(100, hsb.b + b); return hsb; }; window.shieldgroup_hsb2hex = function(hsb) { var rgb = shieldgroup_hsb2rgb(hsb); return shieldgroup_components2hex(rgb.r, rgb.g, rgb.b); }; window.shieldgroup_rgb2hsb = function(rgb) { var hsb = {}; hsb.b = Math.max(Math.max(rgb.r,rgb.g),rgb.b); hsb.s = (hsb.b <= 0) ? 0 : Math.round(100*(hsb.b - Math.min(Math.min(rgb.r,rgb.g),rgb.b))/hsb.b); hsb.b = Math.round((hsb.b /255)*100); if ((rgb.r==rgb.g) && (rgb.g==rgb.b)) hsb.h = 0; else if (rgb.r>=rgb.g && rgb.g>=rgb.b) hsb.h = 60*(rgb.g-rgb.b)/(rgb.r-rgb.b); else if (rgb.g>=rgb.r && rgb.r>=rgb.b) hsb.h = 60 + 60*(rgb.g-rgb.r)/(rgb.g-rgb.b); else if (rgb.g>=rgb.b && rgb.b>=rgb.r) hsb.h = 120 + 60*(rgb.b-rgb.r)/(rgb.g-rgb.r); else if (rgb.b>=rgb.g && rgb.g>=rgb.r) hsb.h = 180 + 60*(rgb.b-rgb.g)/(rgb.b-rgb.r); else if (rgb.b>=rgb.r && rgb.r>=rgb.g) hsb.h = 240 + 60*(rgb.r-rgb.g)/(rgb.b-rgb.g); else if (rgb.r>=rgb.b && rgb.b>=rgb.g) hsb.h = 300 + 60*(rgb.r-rgb.b)/(rgb.r-rgb.g); else hsb.h = 0; hsb.h = Math.round(hsb.h); return hsb; }; window.shieldgroup_hsb2rgb = function(hsb) { var rgb = {}; var h = Math.round(hsb.h); var s = Math.round(hsb.s*255/100); var v = Math.round(hsb.b*255/100); if (s == 0) { rgb.r = rgb.g = rgb.b = v; } else { var t1 = v; var t2 = (255-s)*v/255; var t3 = (t1-t2)*(h%60)/60; if (h==360) h = 0; if (h<60) { rgb.r=t1; rgb.b=t2; rgb.g=t2+t3; } else if (h<120) { rgb.g=t1; rgb.b=t2; rgb.r=t1-t3; } else if (h<180) { rgb.g=t1; rgb.r=t2; rgb.b=t2+t3; } else if (h<240) { rgb.b=t1; rgb.r=t2; rgb.g=t1-t3; } else if (h<300) { rgb.b=t1; rgb.g=t2; rgb.r=t2+t3; } else if (h<360) { rgb.r=t1; rgb.g=t2; rgb.b=t1-t3; } else { rgb.r=0; rgb.g=0; rgb.b=0; } } return { r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b) }; }; window.shieldgroup_color_picker = function(){ var id = arguments[0]!==undefined ? arguments[0] : "iColorPicker"+Math.round(Math.random()*1000); var colors = arguments[1]!==undefined ? arguments[1] : '#f00,#ff0,#0f0,#0ff,#00f,#f0f,#fff,#ebebeb,#e1e1e1,#d7d7d7,#cccccc,#c2c2c2,#b7b7b7,#acacac,#a0a0a0,#959595,' +'#ee1d24,#fff100,#00a650,#00aeef,#2f3192,#ed008c,#898989,#7d7d7d,#707070,#626262,#555,#464646,#363636,#262626,#111,#000,' +'#f7977a,#fbad82,#fdc68c,#fff799,#c6df9c,#a4d49d,#81ca9d,#7bcdc9,#6ccff7,#7ca6d8,#8293ca,#8881be,#a286bd,#bc8cbf,#f49bc1,#f5999d,' +'#f16c4d,#f68e54,#fbaf5a,#fff467,#acd372,#7dc473,#39b778,#16bcb4,#00bff3,#438ccb,#5573b7,#5e5ca7,#855fa8,#a763a9,#ef6ea8,#f16d7e,' +'#ee1d24,#f16522,#f7941d,#fff100,#8fc63d,#37b44a,#00a650,#00a99e,#00aeef,#0072bc,#0054a5,#2f3192,#652c91,#91278f,#ed008c,#ee105a,' +'#9d0a0f,#a1410d,#a36209,#aba000,#588528,#197b30,#007236,#00736a,#0076a4,#004a80,#003370,#1d1363,#450e61,#62055f,#9e005c,#9d0039,' +'#790000,#7b3000,#7c4900,#827a00,#3e6617,#045f20,#005824,#005951,#005b7e,#003562,#002056,#0c004b,#30004a,#4b0048,#7a0045,#7a0026'; var colorsList = colors.split(','); var tbl = ''; for (var i=0; i < colorsList.length; i++) { if (i%16==0) tbl += (i>0 ? '' : '') + ''; tbl += ''; } tbl += '' + '' + '' + '' + '
 
' + '' + '' + '' + '' + '
'; jQuery(document.createElement("div")) .attr("id", id) .css('display','none') .html(tbl) .appendTo("body") .addClass("iColorPickerTable") .on('mouseover', 'thead td', function(){ var aaa = shieldgroup_rgb2hex(jQuery(this).css('background-color')); jQuery('#'+id+'_colorPreview').css('background',aaa); jQuery('#'+id+'_colorPreview input').val(aaa); }) .on('keypress', '#'+id+'_colorPreview input', function(key){ var aaa = jQuery(this).val(); if (aaa.length<7 && ((key.which>=48 && key.which<=57) || (key.which>=97 && key.which<=102) || (key.which===35 || aaa.length===0))) { aaa += String.fromCharCode(key.which); } else if (key.which == 8 && aaa.length>0) { aaa = aaa.substring(0, aaa.length-1); } else if (key.which===13 && (aaa.length===4 || aaa.length===7)) { var fld = jQuery('#'+id).data('field'); var func = jQuery('#'+id).data('func'); if (func!=null && func!='undefined') { func(fld, aaa); } else { fld.val(aaa).css('backgroundColor', aaa).trigger('change'); } jQuery('#'+id+'_Bg').fadeOut(500); jQuery('#'+id).fadeOut(500); } else { key.preventDefault(); return false; } if (aaa.substr(0,1)==='#' && (aaa.length===4 || aaa.length===7)) { jQuery('#'+id+'_colorPreview').css('background',aaa); } }) .on('click', 'thead td', function(e){ var fld = jQuery('#'+id).data('field'); var func = jQuery('#'+id).data('func'); var aaa = shieldgroup_rgb2hex(jQuery(this).css('background-color')); if (func!=null && func!='undefined') { func(fld, aaa); } else { fld.val(aaa).css('backgroundColor', aaa).trigger('change'); } jQuery('#'+id+'_Bg').fadeOut(500); jQuery('#'+id).fadeOut(500); e.preventDefault(); return false; }) .on('click', 'tbody .iColorPicker_moreColors', function(e){ var thead = jQuery(this).parents('table').find('thead'); var out = ''; if (thead.hasClass('more_colors')) { for (var i=0; i < colorsList.length; i++) { if (i%16==0) out += (i>0 ? '' : '') + ''; out += ' '; } thead.removeClass('more_colors').empty().html(out+''); jQuery('#'+id+'_colorPreview').attr('colspan', 8); jQuery('#'+id+'_colorOriginal').attr('colspan', 8); } else { var rgb=[0,0,0], i=0, j=-1; // Set j=-1 or j=0 - show 2 different colors layouts while (rgb[0]<0xF || rgb[1]<0xF || rgb[2]<0xF) { if (i%18==0) out += (i>0 ? '' : '') + ''; i++; out += ' '; rgb[2]+=3; if (rgb[2]>0xF) { rgb[1]+=3; if (rgb[1]>(j===0 ? 6 : 0xF)) { rgb[0]+=3; if (rgb[0]>0xF) { if (j===0) { j=1; rgb[0]=0; rgb[1]=9; rgb[2]=0; } else { break; } } else { rgb[1]=(j < 1 ? 0 : 9); rgb[2]=0; } } else { rgb[2]=0; } } } thead.addClass('more_colors').empty().html(out+' '); jQuery('#'+id+'_colorPreview').attr('colspan', 9); jQuery('#'+id+'_colorOriginal').attr('colspan', 9); } jQuery('#'+id+' table.colorPickerTable thead td') .css({ 'width':'12px', 'height':'14px', 'border':'1px solid #000', 'cursor':'pointer' }); e.preventDefault(); return false; }); jQuery(document.createElement("div")) .attr("id", id+"_Bg") .on('click', function(e) { jQuery("#"+id+"_Bg").fadeOut(500); jQuery("#"+id).fadeOut(500); e.preventDefault(); return false; }) .appendTo("body"); jQuery('#'+id+' table.colorPickerTable thead td') .css({ 'width':'12px', 'height':'14px', 'border':'1px solid #000', 'cursor':'pointer' }); jQuery('#'+id+' table.colorPickerTable') .css({'border-collapse':'collapse'}); jQuery('#'+id) .css({ 'border':'1px solid #ccc', 'background':'#333', 'padding':'5px', 'color':'#fff' }); jQuery('#'+id+'_colorPreview') .css({'height':'50px'}); return id; }; window.shieldgroup_color_picker_show = function(id, fld, func) { if (id===null || id==='') { id = jQuery('.iColorPickerTable').attr('id'); } var eICP = fld.offset(); var w = jQuery('#'+id).width(); var h = jQuery('#'+id).height(); var l = eICP.left + w < jQuery(window).width()-10 ? eICP.left : jQuery(window).width()-10 - w; var t = eICP.top + fld.outerHeight() + h < jQuery(document).scrollTop() + jQuery(window).height()-10 ? eICP.top + fld.outerHeight() : eICP.top - h - 13; jQuery("#"+id) .data({field: fld, func: func}) .css({ 'top':t+"px", 'left':l+"px", 'position':'absolute', 'z-index':999999 }) .fadeIn(500); jQuery("#"+id+"_Bg") .css({ 'position':'fixed', 'z-index':999998, 'top':0, 'left':0, 'width':'100%', 'height':'100%' }) .fadeIn(500); var def = fld.val().substr(0, 1)=='#' ? fld.val() : shieldgroup_rgb2hex(fld.css('backgroundColor')); jQuery('#'+id+'_colorPreview input,#'+id+'_colorOriginal input').val(def); jQuery('#'+id+'_colorPreview,#'+id+'_colorOriginal').css('background',def); }; /* Cookies manipulations ---------------------------------------------------------------- */ window.shieldgroup_get_cookie = function(name) { var defa = arguments[1]!==undefined ? arguments[1] : null; var start = document.cookie.indexOf(name + '='); var len = start + name.length + 1; if ((!start) && (name != document.cookie.substring(0, name.length))) { return defa; } if (start == -1) return defa; var end = document.cookie.indexOf(';', len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len, end)); }; window.shieldgroup_set_cookie = function(name, value) { var expires = arguments[2]!==undefined ? arguments[2] : 0; var path = arguments[3]!==undefined ? arguments[3] : '/'; var domain = arguments[4]!==undefined ? arguments[4] : ''; var secure = arguments[5]!==undefined ? arguments[5] : ''; var today = new Date(); today.setTime(today.getTime()); if (expires) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date(today.getTime() + (expires)); document.cookie = name + '=' + escape(value) + ((expires) ? ';expires=' + expires_date.toGMTString() : '') + ((path) ? ';path=' + path : '') + ((domain) ? ';domain=' + domain : '') + ((secure) ? ';secure' : ''); }; window.shieldgroup_del_cookie = function(name, path, domain) { var path = arguments[1]!==undefined ? arguments[1] : '/'; var domain = arguments[2]!==undefined ? arguments[2] : ''; if (shieldgroup_get_cookie(name)) document.cookie = name + '=' + ((path) ? ';path=' + path : '') + ((domain) ? ';domain=' + domain : '') + ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; }; /* ListBox and ComboBox manipulations ---------------------------------------------------------------- */ window.shieldgroup_clear_listbox = function(box) { for (var i=box.options.length-1; i >= 0; i--) box.options[i] = null; }; window.shieldgroup_add_listbox_item = function(box, val, text) { var item = new Option(); item.value = val; item.text = text; box.options.add(item); }; window.shieldgroup_del_listbox_item_by_value = function(box, val) { for (var i=0; i < box.options.length; i++) { if (box.options[i].value == val) { box.options[i] = null; break; } } }; window.shieldgroup_del_listbox_item_by_text = function(box, txt) { for (var i=0; i < box.options.length; i++) { if (box.options[i].text == txt) { box.options[i] = null; break; } } }; window.shieldgroup_find_listbox_item_by_value = function(box, val) { var idx = -1; for (var i=0; i < box.options.length; i++) { if (box.options[i].value == val) { idx = i; break; } } return idx; }; window.shieldgroup_find_listbox_item_by_text = function(box, txt) { var idx = -1; for (var i=0; i < box.options.length; i++) { if (box.options[i].text == txt) { idx = i; break; } } return idx; }; window.shieldgroup_select_listbox_item_by_value = function(box, val) { for (var i = 0; i < box.options.length; i++) { box.options[i].selected = (val == box.options[i].value); } }; window.shieldgroup_select_listbox_item_by_text = function(box, txt) { for (var i = 0; i < box.options.length; i++) { box.options[i].selected = (txt == box.options[i].text); } }; window.shieldgroup_get_listbox_values = function(box) { var delim = arguments[1]!==undefined ? arguments[1] : ','; var str = ''; for (var i=0; i < box.options.length; i++) { str += (str ? delim : '') + box.options[i].value; } return str; }; window.shieldgroup_get_listbox_texts = function(box) { var delim = arguments[1]!==undefined ? arguments[1] : ','; var str = ''; for (var i=0; i < box.options.length; i++) { str += (str ? delim : '') + box.options[i].text; } return str; }; window.shieldgroup_sort_listbox = function(box) { var temp_opts = new Array(); var temp = new Option(); for(var i=0; i temp_opts[y].text) { temp = temp_opts[x]; temp_opts[x] = temp_opts[y]; temp_opts[y] = temp; } } } for(var i=0; i 0 && val.length < opt.rules[i].min_length.value) { if (error_msg=='') jQuery(this).get(0).focus(); error_msg += '

' + (typeof(opt.rules[i].min_length.message)!='undefined' ? opt.rules[i].min_length.message : opt.error_message_text ) + '

'; error = true; } } if ((!error || !opt.exit_after_first_error) && typeof(opt.rules[i].max_length) == 'object') { if (opt.rules[i].max_length.value > 0 && val.length > opt.rules[i].max_length.value) { if (error_msg=='') jQuery(this).get(0).focus(); error_msg += '

' + (typeof(opt.rules[i].max_length.message)!='undefined' ? opt.rules[i].max_length.message : opt.error_message_text ) + '

'; error = true; } } if ((!error || !opt.exit_after_first_error) && typeof(opt.rules[i].mask) == 'object') { if (opt.rules[i].mask.value != '') { var regexp = new RegExp(opt.rules[i].mask.value); if (!regexp.test(val)) { if (error_msg=='') jQuery(this).get(0).focus(); error_msg += '

' + (typeof(opt.rules[i].mask.message)!='undefined' ? opt.rules[i].mask.message : opt.error_message_text ) + '

'; error = true; } } } if ((!error || !opt.exit_after_first_error) && typeof(opt.rules[i].state) == 'object') { if (opt.rules[i].state.value=='checked' && !jQuery(this).get(0).checked) { if (error_msg=='') jQuery(this).get(0).focus(); error_msg += '

' + (typeof(opt.rules[i].state.message)!='undefined' ? opt.rules[i].state.message : opt.error_message_text ) + '

'; error = true; } } if ((!error || !opt.exit_after_first_error) && typeof(opt.rules[i].equal_to) == 'object') { if (opt.rules[i].equal_to.value != '' && val!=jQuery(jQuery(this).get(0).form[opt.rules[i].equal_to.value]).val()) { if (error_msg=='') jQuery(this).get(0).focus(); error_msg += '

' + (typeof(opt.rules[i].equal_to.message)!='undefined' ? opt.rules[i].equal_to.message : opt.error_message_text ) + '

'; error = true; } } if (opt.error_fields_class != '') jQuery(this).toggleClass(opt.error_fields_class, error); } } }); if (error_msg!='' && opt.error_message_show) { var error_message_box = form.find(".result"); if (error_message_box.length == 0) error_message_box = form.parent().find(".result"); if (error_message_box.length == 0) { form.append('
'); error_message_box = form.find(".result"); } if (opt.error_message_class) error_message_box.toggleClass(opt.error_message_class, true); error_message_box.html(error_msg).fadeIn(); setTimeout(function() { error_message_box.fadeOut(); }, opt.error_message_time); } return error_msg!=''; }; /* Document manipulations ---------------------------------------------------------------- */ // Animated scroll to selected id window.shieldgroup_document_animate_to = function(id, callback) { var oft = !isNaN(id) ? Number(id) : 0; if (isNaN(id)) { if (id.indexOf('#')==-1) id = '#' + id; var obj = jQuery(id).eq(0); if (obj.length == 0) return; oft = obj.offset().top; } var st = jQuery(window).scrollTop(); var oft2 = Math.max(0, oft - shieldgroup_fixed_rows_height()); var speed = Math.min(1200, Math.max(300, Math.round(Math.abs(oft2-st) / jQuery(window).height() * 300))); if (st == 0) { setTimeout(function() { if (isNaN(id)) oft = obj.offset().top; oft2 = Math.max(0, oft - shieldgroup_fixed_rows_height()); jQuery('body,html').stop(true).animate( {scrollTop: oft2}, Math.floor(speed/2), 'linear', callback ); }, Math.floor(speed/2)); } jQuery('body,html').stop(true).animate( {scrollTop: oft2}, speed, 'linear', callback ); }; // Detect fixed rows height window.shieldgroup_fixed_rows_height = function() { var with_admin_bar = arguments.length>0 ? arguments[0] : true; var with_fixed_rows = arguments.length>1 ? arguments[1] : true; var oft = 0; // Admin bar height (if visible and fixed) if (with_admin_bar) { var admin_bar = jQuery('#wpadminbar'); oft += admin_bar.length > 0 && admin_bar.css('display')!='none' && admin_bar.css('position')=='fixed' ? admin_bar.height() : 0; } // Fixed rows height if (with_fixed_rows) { jQuery('.sc_layouts_row_fixed_on').each(function() { if (jQuery(this).css('position')=='fixed') oft += jQuery(this).height(); }); } return oft; }; // Change browser address without reload page window.shieldgroup_document_set_location = function(curLoc){ try { history.pushState(null, null, curLoc); return; } catch(e) {} location.href = curLoc; }; // Add/Change arguments to the url address window.shieldgroup_add_to_url = function(loc, prm) { var ignore_empty = arguments[2]!==undefined ? arguments[2] : true; var q = loc.indexOf('?'); var attr = {}; if (q > 0) { var qq = loc.substr(q+1).split('&'); var parts = ''; for (var i=0; i < qq.length; i++) { var parts = qq[i].split('='); attr[parts[0]] = parts.length>1 ? parts[1] : ''; } } for (var p in prm) { attr[p] = prm[p]; } loc = (q > 0 ? loc.substr(0, q) : loc) + '?'; var i = 0; for (p in attr) { if (ignore_empty && attr[p]=='') continue; loc += (i++ > 0 ? '&' : '') + p + '=' + attr[p]; } return loc; }; // Check if url is page-inner (local) link window.shieldgroup_is_local_link = function(url) { var rez = url!==undefined; if (rez) { var url_pos = url.indexOf('#'); if (url_pos == 0 && url.length == 1) rez = false; else { if (url_pos < 0) url_pos = url.length; var loc = window.location.href; var loc_pos = loc.indexOf('#'); if (loc_pos > 0) loc = loc.substring(0, loc_pos); rez = url_pos==0; if (!rez) rez = loc == url.substring(0, url_pos); } } return rez; }; /* Browsers detection ---------------------------------------------------------------- */ window.shieldgroup_browser_is_mobile = function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|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|phone)|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; }; window.shieldgroup_browser_is_ios = function() { return navigator.userAgent.match(/iPad|iPhone|iPod/i) != null; }; window.shieldgroup_is_retina = function() { var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)'; return (window.devicePixelRatio > 1) || (window.matchMedia && window.matchMedia(mediaQuery).matches); }; /* File functions ---------------------------------------------------------------- */ window.shieldgroup_get_file_name = function(path) { path = path.replace(/\\/g, '/'); var pos = path.lastIndexOf('/'); if (pos >= 0) path = path.substr(pos+1); return path; }; window.shieldgroup_get_file_ext = function(path) { var pos = path.lastIndexOf('.'); path = pos >= 0 ? path.substr(pos+1) : ''; return path; }; /* Image functions ---------------------------------------------------------------- */ // Return true, if all images in the specified container are loaded window.shieldgroup_check_images_complete = function(cont) { var complete = true; cont.find('img').each(function() { if (!complete) return; if (!jQuery(this).get(0).complete) complete = false; }); return complete; }; /* Debug functions ---------------------------------------------------------------- */ window.shieldgroup_debug_object = function(obj) { var recursive = arguments[1] ? arguments[1] : 0; // Show inner objects (arrays) in depth var showMethods = arguments[2] ? arguments[2] : false; // Show object's methods var level = arguments[3] ? arguments[3] : 0; // Nesting level (for internal usage only) var dispStr = ""; var addStr = ""; var curStr = ""; if (level > 0) { dispStr += (obj===null ? "null" : typeof(obj)) + "\n"; addStr = shieldgroup_replicate(' ', level*2); } if (obj!==null && (typeof(obj)=='object' || typeof(obj)=='array')) { for (var prop in obj) { if (!showMethods && typeof(obj[prop])=='function') // || prop=='innerHTML' || prop=='outerHTML' || prop=='innerText' || prop=='outerText') continue; if (levelx
'); 
				jQuery("#debug_log_close").on('click', function(e) {
					jQuery('#debug_log').hide();
					e.preventDefault();
					return false;
				});
			}
			if (clr) jQuery('#debug_log_content').empty();
			jQuery('#debug_log_content').prepend(s+' ');
			jQuery('#debug_log').show();
		}
	};
	
	window.dcl===undefined && (window.dcl = function(s) { console.log(s); });
	window.dco===undefined && (window.dco = function(s,r) { console.log(shieldgroup_debug_object(s,r)); });
	window.dal===undefined && (window.dal = function(s) { if (SHIELDGROUP_STORAGE['user_logged_in']) alert(s); });
	window.dao===undefined && (window.dao = function(s,r) { if (SHIELDGROUP_STORAGE['user_logged_in']) alert(shieldgroup_debug_object(s,r)); });
	window.ddl===undefined && (window.ddl = function(s,c) { shieldgroup_debug_log(s,c); });
	window.ddo===undefined && (window.ddo = function(s,r,c) { shieldgroup_debug_log(shieldgroup_debug_object(s,r),c); });

})();/* global jQuery:false */
/* global SHIELDGROUP_STORAGE:false */

jQuery(document).ready(function() {
    "use strict";

    var theme_init_counter = 0;

    shieldgroup_init_actions();

    // Theme init actions
    function shieldgroup_init_actions() {

        if (SHIELDGROUP_STORAGE['vc_edit_mode'] && jQuery('.vc_empty-placeholder').length==0 && theme_init_counter++ < 30) {
            setTimeout(shieldgroup_init_actions, 200);
            return;
        }

        // Check fullheight elements
        jQuery(document).on('action.init_hidden_elements', shieldgroup_stretch_height);
        jQuery(document).on('action.init_shortcodes', shieldgroup_stretch_height);
        jQuery(document).on('action.sc_layouts_row_fixed_off', shieldgroup_stretch_height);
        jQuery(document).on('action.sc_layouts_row_fixed_on', shieldgroup_stretch_height);

        // Add resize on VC action vc-full-width-row
        // But we emulate 'action.resize_vc_row_start' and 'action.resize_vc_row_end'
        // to correct resize sliders and video inside 'boxed' pages
        var vc_resize = false;
        jQuery(document).on('action.resize_vc_row_start', function(e, el) {
            vc_resize = true;
            shieldgroup_resize_actions(el);
        });

        // Resize handlers
        jQuery(window).resize(function() {
            if (!vc_resize) {
                shieldgroup_resize_actions();
            }
        });

        // Scroll handlers
        jQuery(window).scroll(function() {
            shieldgroup_scroll_actions();
        });

        // First call to init core actions
        shieldgroup_ready_actions();
        shieldgroup_resize_actions();
        shieldgroup_scroll_actions();

        // Wait for logo load
        if (jQuery('body').hasClass('menu_style_side') && !shieldgroup_check_images_complete(jQuery('.menu_side_wrap .sc_layouts_logo'))) {
            setTimeout(function() {
                shieldgroup_stretch_sidemenu();
            }, 500);
        }
    }
	
	
	
	// Theme first load actions
	//==============================================
	function shieldgroup_ready_actions() {
	
		// Add scheme class and js support
		//------------------------------------
		document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/,'js');
		if (document.documentElement.className.indexOf(SHIELDGROUP_STORAGE['site_scheme'])==-1)
			document.documentElement.className += ' ' + SHIELDGROUP_STORAGE['site_scheme'];

		// Init background video
		//------------------------------------
		// Use Bideo to play local video
		if (SHIELDGROUP_STORAGE['background_video'] && jQuery('.top_panel.with_bg_video').length > 0 && window.Bideo) {
			// Waiting 10ms after mejs init
			setTimeout(function() {
				jQuery('.top_panel.with_bg_video').prepend('');
				var bv = new Bideo();
				bv.init({
					// Video element
					videoEl: document.querySelector('#background_video'),
					
					// Container element
					container: document.querySelector('.top_panel'),
					
					// Resize
					resize: true,
					
					// autoplay: false,
					
					isMobile: window.matchMedia('(max-width: 768px)').matches,
					
					playButton: document.querySelector('#background_video_play'),
					pauseButton: document.querySelector('#background_video_pause'),
					
					// Array of objects containing the src and type
					// of different video formats to add
					// For example:
					//	src: [
					//			{	src: 'night.mp4', type: 'video/mp4' }
					//			{	src: 'night.webm', type: 'video/webm;codecs="vp8, vorbis"' }
					//		]
					src: [
						{
							src: SHIELDGROUP_STORAGE['background_video'],
							type: 'video/'+shieldgroup_get_file_ext(SHIELDGROUP_STORAGE['background_video'])
						}
					],
					
					// What to do once video loads (initial frame)
					onLoad: function () {
						//document.querySelector('#background_video_cover').style.display = 'none';
					}
				});
			}, 10);
		
		// Use Tubular to play video from Youtube
		} else if (jQuery.fn.tubular) {
			jQuery('div#background_video').each(function() {
				var youtube_code = jQuery(this).data('youtube-code');
				if (youtube_code) {
					jQuery(this).tubular({videoId: youtube_code});
					jQuery('#tubular-player').appendTo(jQuery(this)).show();
					jQuery('#tubular-container,#tubular-shield').remove();
				}
			});
		}
	
		// Tabs
		//------------------------------------
		if (jQuery('.shieldgroup_tabs:not(.inited)').length > 0 && jQuery.ui && jQuery.ui.tabs) {
			jQuery('.shieldgroup_tabs:not(.inited)').each(function () {
				// Get initially opened tab
				var init = jQuery(this).data('active');
				if (isNaN(init)) {
					init = 0;
					var active = jQuery(this).find('> ul > li[data-active="true"]').eq(0);
					if (active.length > 0) {
						init = active.index();
						if (isNaN(init) || init < 0) init = 0;
					}
				} else {
					init = Math.max(0, init);
				}
				// Init tabs
				jQuery(this).addClass('inited').tabs({
					active: init,
					show: {
						effect: 'fadeIn',
						duration: 300
					},
					hide: {
						effect: 'fadeOut',
						duration: 300
					},
					create: function( event, ui ) {
						if (ui.panel.length > 0) jQuery(document).trigger('action.init_hidden_elements', [ui.panel]);
					},
					activate: function( event, ui ) {
						if (ui.newPanel.length > 0) jQuery(document).trigger('action.init_hidden_elements', [ui.newPanel]);
					}
				});
			});
		}
		// AJAX loader for the tabs
		jQuery('.shieldgroup_tabs_ajax').on( "tabsbeforeactivate", function( event, ui ) {
			if (ui.newPanel.data('need-content')) shieldgroup_tabs_ajax_content_loader(ui.newPanel, 1, ui.oldPanel);
		});
		// AJAX loader for the pages in the tabs
		jQuery('.shieldgroup_tabs_ajax').on( "click", '.nav-links a', function(e) {
			var panel = jQuery(this).parents('.shieldgroup_tabs_content');
			var page = 1;
			var href = jQuery(this).attr('href');
			var pos = -1;
			if ((pos = href.lastIndexOf('/page/')) != -1 ) {
				page = Number(href.substr(pos+6).replace("/", ""));
				if (!isNaN(page)) page = Math.max(1, page);
			}
			shieldgroup_tabs_ajax_content_loader(panel, page);
			e.preventDefault();
			return false;
		});
	
		// Menu
		//----------------------------------------------
	
		// Add TOC in the side menu
		if (jQuery('.menu_side_inner').length > 0 && jQuery('#toc_menu').length > 0)
			jQuery('#toc_menu').appendTo('.menu_side_inner');
	
		// Open/Close side menu
		jQuery('.menu_side_button').on('click', function(e){
			jQuery(this).parent().toggleClass('opened');
			e.preventDefault();
			return false;
		});

		// Add images to the menu items with classes image-xxx
		jQuery('.sc_layouts_menu li[class*="image-"]').each(function() {
			var classes = jQuery(this).attr('class').split(' ');
			var icon = '';
			for (var i=0; i < classes.length; i++) {
				if (classes[i].indexOf('image-') >= 0) {
					icon = classes[i].replace('image-', '');
					break;
				}
			}
			if (icon) jQuery(this).find('>a').css('background-image', 'url('+SHIELDGROUP_STORAGE['theme_url']+'/trx_addons/css/icons.png/'+icon+'.png');
		});
	
		// Add arrows to the mobile menu
		jQuery('.menu_mobile .menu-item-has-children > a').append('');
	
		// Open/Close mobile menu
		jQuery('.sc_layouts_menu_mobile_button > a,.menu_mobile_button,.menu_mobile_description').on('click', function(e) {
			if (jQuery(this).parent().hasClass('sc_layouts_menu_mobile_button_burger') && jQuery(this).next().hasClass('sc_layouts_menu_popup')) return;
			jQuery('.menu_mobile_overlay').fadeIn();
			jQuery('.menu_mobile').addClass('opened');
			jQuery(document).trigger('action.stop_wheel_handlers');
			e.preventDefault();
			return false;
		});
		jQuery(document).on('keypress', function(e) {
			if (e.keyCode == 27) {
				if (jQuery('.menu_mobile.opened').length == 1) {
					jQuery('.menu_mobile_overlay').fadeOut();
					jQuery('.menu_mobile').removeClass('opened');
					jQuery(document).trigger('action.start_wheel_handlers');
					e.preventDefault();
					return false;
				}
			}
		});;
		jQuery('.menu_mobile_close, .menu_mobile_overlay').on('click', function(e){
			jQuery('.menu_mobile_overlay').fadeOut();
			jQuery('.menu_mobile').removeClass('opened');
			jQuery(document).trigger('action.start_wheel_handlers');
			e.preventDefault();
			return false;
		});
	
		// Open/Close mobile submenu
		jQuery('.menu_mobile').on('click', 'li a, li a .open_child_menu', function(e) {
			var $a = jQuery(this).hasClass('open_child_menu') ? jQuery(this).parent() : jQuery(this);
			if ($a.parent().hasClass('menu-item-has-children')) {
				if ($a.attr('href')=='#' || jQuery(this).hasClass('open_child_menu')) {
					if ($a.siblings('ul:visible').length > 0)
						$a.siblings('ul').slideUp().parent().removeClass('opened');
					else {
						jQuery(this).parents('li').siblings('li').find('ul:visible').slideUp().parent().removeClass('opened');
						$a.siblings('ul').slideDown().parent().addClass('opened');
					}
				}
			}
			if (!jQuery(this).hasClass('open_child_menu') && shieldgroup_is_local_link($a.attr('href')))
				jQuery('.menu_mobile_close').trigger('click');
			if (jQuery(this).hasClass('open_child_menu') || $a.attr('href')=='#') {
				e.preventDefault();
				return false;
			}
		});
	
		if (!SHIELDGROUP_STORAGE['trx_addons_exist'] || jQuery('.top_panel.top_panel_default .sc_layouts_menu_default').length > 0) {
			// Init superfish menus
			shieldgroup_init_sfmenu('.sc_layouts_menu:not(.inited) > ul:not(.inited)');
			// Show menu		
			jQuery('.sc_layouts_menu:not(.inited)').each(function() {
				if (jQuery(this).find('>ul.inited').length == 1) jQuery(this).addClass('inited');
			});
			// Generate 'scroll' event after the menu is showed
			jQuery(window).trigger('scroll');
		}

		
		// Forms
		//----------------------------------------------
	
		// Wrap select with .select_container
		jQuery('select:not(.esg-sorting-select):not([class*="trx_addons_attrib_"])').each(function() {
			var s = jQuery(this);
			if (s.css('display') != 'none' && !s.next().hasClass('select2') && !s.hasClass('select2-hidden-accessible'))
				s.wrap('
'); }); // Comment form jQuery("form#commentform").submit(function(e) { var rez = shieldgroup_comments_validate(jQuery(this)); if (!rez) e.preventDefault(); return rez; }); jQuery("form").on('keypress', '.error_field', function() { if (jQuery(this).val() != '') jQuery(this).removeClass('error_field'); }); // Blocks with stretch width //---------------------------------------------- // Action to prepare stretch blocks in the third-party plugins jQuery(document).trigger('action.prepare_stretch_width'); // Wrap stretch blocks jQuery('.trx-stretch-width').wrap('
'); jQuery('.trx-stretch-width').after('
'); shieldgroup_stretch_width(); // Pagination //------------------------------------ // Load more jQuery('.nav-links-more a').on('click', function(e) { if (SHIELDGROUP_STORAGE['load_more_link_busy']) return; SHIELDGROUP_STORAGE['load_more_link_busy'] = true; var more = jQuery(this); var page = Number(more.data('page')); var max_page = Number(more.data('max-page')); if (page >= max_page) { more.parent().hide(); return; } more.parent().addClass('loading'); var panel = more.parents('.shieldgroup_tabs_content'); if (panel.length == 0) { // Load simple page content jQuery.get(location.href, { paged: page+1 }).done(function(response) { // Get inline styles and add to the page styles var selector = 'shieldgroup-inline-styles-inline-css'; var p1 = response.indexOf(selector); if (p1 < 0) { selector = 'trx_addons-inline-styles-inline-css'; p1 = response.indexOf(selector); } if (p1 > 0) { p1 = response.indexOf('>', p1) + 1; var p2 = response.indexOf('', p1); var inline_css_add = response.substring(p1, p2); var inline_css = jQuery('#'+selector); if (inline_css.length == 0) jQuery('body').append(''); else inline_css.append(inline_css_add); } // Get new posts and append to the .posts_container shieldgroup_loadmore_add_items(jQuery('.content .posts_container').eq(0), jQuery(response).find('.content .posts_container > article,' +'.content .posts_container > div[class*="column-"],' +'.content .posts_container > .masonry_item') ); }); } else { // Load tab's panel content jQuery.post(SHIELDGROUP_STORAGE['ajax_url'], { nonce: SHIELDGROUP_STORAGE['ajax_nonce'], action: 'shieldgroup_ajax_get_posts', blog_template: panel.data('blog-template'), blog_style: panel.data('blog-style'), posts_per_page: panel.data('posts-per-page'), cat: panel.data('cat'), parent_cat: panel.data('parent-cat'), post_type: panel.data('post-type'), taxonomy: panel.data('taxonomy'), page: page+1 }).done(function(response) { var rez = {}; try { rez = JSON.parse(response); } catch (e) { rez = { error: SHIELDGROUP_STORAGE['strings']['ajax_error'] }; console.log(response); } if (rez.error !== '') { panel.html('
'+rez.error+'
'); } else { shieldgroup_loadmore_add_items(panel.find('.posts_container'), jQuery(rez.data).find('article')); } }); } // Append items to the container function shieldgroup_loadmore_add_items(container, items) { if (container.length > 0 && items.length > 0) { container.append(items); if (container.hasClass('portfolio_wrap') || container.hasClass('masonry_wrap')) { container.masonry( 'appended', items ).masonry(); if (container.hasClass('gallery_wrap')) { SHIELDGROUP_STORAGE['GalleryFx'][container.attr('id')].appendItems(); } } more.data('page', page+1).parent().removeClass('loading'); // Remove TOC if exists (rebuild on init_shortcodes) jQuery('#toc_menu').remove(); // Trigger actions to init new elements SHIELDGROUP_STORAGE['init_all_mediaelements'] = true; jQuery(document).trigger('action.init_shortcodes', [container.parent()]); jQuery(document).trigger('action.init_hidden_elements', [container.parent()]); } if (page+1 >= max_page) more.parent().hide(); else SHIELDGROUP_STORAGE['load_more_link_busy'] = false; // Fire 'window.scroll' after clearing busy state jQuery(window).trigger('scroll'); } e.preventDefault(); return false; }); // Infinite scroll jQuery(document).on('action.scroll_shieldgroup', function(e) { if (SHIELDGROUP_STORAGE['load_more_link_busy']) return; var container = jQuery('.content > .posts_container').eq(0); var inf = jQuery('.nav-links-infinite'); if (inf.length == 0) return; if (container.offset().top + container.height() < jQuery(window).scrollTop() + jQuery(window).height()*1.5) inf.find('a').trigger('click'); }); // Comments //------------------------------------ // Checkbox with "I agree..." if (jQuery('input[type="checkbox"][name="i_agree_privacy_policy"]:not(.inited),input[type="checkbox"][name="gdpr_terms"]:not(.inited),input[type="checkbox"][name="wpgdprc"]:not(.inited)').length > 0) { jQuery('input[type="checkbox"][name="i_agree_privacy_policy"]:not(.inited),input[type="checkbox"][name="gdpr_terms"]:not(.inited),input[type="checkbox"][name="wpgdprc"]:not(.inited)') .addClass('inited') .on('change', function(e) { if (jQuery(this).get(0).checked) jQuery(this).parents('form').find('button,input[type="submit"]').removeAttr('disabled'); else jQuery(this).parents('form').find('button,input[type="submit"]').attr('disabled', 'disabled'); }).trigger('change'); } // Other settings //------------------------------------ jQuery(document).trigger('action.ready_shieldgroup'); // Init post format specific scripts jQuery(document).on('action.init_hidden_elements', shieldgroup_init_post_formats); // Init hidden elements (if exists) jQuery(document).trigger('action.init_hidden_elements', [jQuery('body').eq(0)]); } //end ready // Scroll actions //============================================== // Do actions when page scrolled function shieldgroup_scroll_actions() { var scroll_offset = jQuery(window).scrollTop(); var adminbar_height = Math.max(0, jQuery('#wpadminbar').height()); // Call theme/plugins specific action (if exists) //---------------------------------------------- jQuery(document).trigger('action.scroll_shieldgroup'); // Fix/unfix sidebar shieldgroup_fix_sidebar(); // Shift top and footer panels when header position equal to 'Under content' if (jQuery('body').hasClass('header_position_under') && !shieldgroup_browser_is_mobile()) { var delta = 50; var adminbar = jQuery('#wpadminbar'); var adminbar_height = adminbar.length == 0 && adminbar.css('position') == 'fixed' ? 0 : adminbar.height(); var header = jQuery('.top_panel'); var header_height = header.height(); var mask = header.find('.top_panel_mask'); if (mask.length==0) { header.append('
'); mask = header.find('.top_panel_mask'); } if (scroll_offset > adminbar_height) { var offset = scroll_offset - adminbar_height; if (offset <= header_height) { var mask_opacity = Math.max(0, Math.min(0.8, (offset-delta)/header_height)); // Don't shift header with Revolution slider in Chrome if ( !(/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)) || header.find('.slider_engine_revo').length == 0 ) header.css('top', Math.round(offset/1.2)+'px'); mask.css({ 'opacity': mask_opacity, 'display': offset==0 ? 'none' : 'block' }); } else if (parseInt(header.css('top')) != 0) { header.css('top', Math.round(offset/1.2)+'px'); } } else if (parseInt(header.css('top')) != 0 || mask.css('display')!='none') { header.css('top', '0px'); mask.css({ 'opacity': 0, 'display': 'none' }); } var footer = jQuery('.footer_wrap'); var footer_height = Math.min(footer.height(), jQuery(window).height()); var footer_visible = (scroll_offset + jQuery(window).height()) - (header.outerHeight() + jQuery('.page_content_wrap').outerHeight()); if (footer_visible > 0) { mask = footer.find('.top_panel_mask'); if (mask.length==0) { footer.append('
'); mask = footer.find('.top_panel_mask'); } if (footer_visible <= footer_height) { var mask_opacity = Math.max(0, Math.min(0.8, (footer_height - footer_visible)/footer_height)); // Don't shift header with Revolution slider in Chrome if ( !(/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)) || footer.find('.slider_engine_revo').length == 0 ) footer.css('top', -Math.round((footer_height - footer_visible)/1.2)+'px'); mask.css({ 'opacity': mask_opacity, 'display': footer_height - footer_visible <= 0 ? 'none' : 'block' }); } else if (parseInt(footer.css('top')) != 0 || mask.css('display')!='none') { footer.css('top', 0); mask.css({ 'opacity': 0, 'display': 'none' }); } } } } // Resize actions //============================================== // Do actions when page scrolled function shieldgroup_resize_actions(cont) { shieldgroup_check_layout(); shieldgroup_fix_sidebar(); shieldgroup_fix_footer(); shieldgroup_stretch_width(cont); shieldgroup_stretch_height(null, cont); shieldgroup_stretch_bg_video(); shieldgroup_vc_row_fullwidth_to_boxed(cont); if (SHIELDGROUP_STORAGE['menu_side_stretch']) shieldgroup_stretch_sidemenu(); // Call theme/plugins specific action (if exists) //---------------------------------------------- jQuery(document).trigger('action.resize_shieldgroup', [cont]); } // Stretch sidemenu (if present) function shieldgroup_stretch_sidemenu() { var toc_items = jQuery('.menu_side_wrap.menu_side_icons .toc_menu_item'); if (toc_items.length < 5) return; var toc_items_height = jQuery(window).height() - shieldgroup_fixed_rows_height(true, false) - jQuery('.menu_side_wrap .sc_layouts_logo').outerHeight() - toc_items.length; var th = Math.floor(toc_items_height / toc_items.length); var th_add = toc_items_height - th*toc_items.length; toc_items.find(".toc_menu_description,.toc_menu_icon").css({ 'height': th+'px', 'lineHeight': th+'px' }); toc_items.eq(0).find(".toc_menu_description,.toc_menu_icon").css({ 'height': (th+th_add)+'px', 'lineHeight': (th+th_add)+'px' }); } // Check for mobile layout function shieldgroup_check_layout() { var resize = true; if (jQuery('body').hasClass('no_layout')) { jQuery('body').removeClass('no_layout'); resize = false; } var w = window.innerWidth; if (w == undefined) w = jQuery(window).width()+(jQuery(window).height() < jQuery(document).height() || jQuery(window).scrollTop() > 0 ? 16 : 0); if (SHIELDGROUP_STORAGE['mobile_layout_width'] >= w) { if (!jQuery('body').hasClass('mobile_layout')) { jQuery('body').removeClass('desktop_layout').addClass('mobile_layout'); if (resize) jQuery(window).trigger('resize'); } } else { if (!jQuery('body').hasClass('desktop_layout')) { jQuery('body').removeClass('mobile_layout').addClass('desktop_layout'); jQuery('.menu_mobile').removeClass('opened'); jQuery('.menu_mobile_overlay').hide(); if (resize) jQuery(window).trigger('resize'); } } if (SHIELDGROUP_STORAGE['mobile_device'] || shieldgroup_browser_is_mobile()) jQuery('body').addClass('mobile_device'); } // Stretch area to full window width function shieldgroup_stretch_width(cont) { if (cont===undefined) cont = jQuery('body'); cont.find('.trx-stretch-width').each(function() { var $el = jQuery(this); var $el_cont = $el.parents('.page_wrap'); var $el_cont_offset = 0; if ($el_cont.length == 0) $el_cont = jQuery(window); else $el_cont_offset = $el_cont.offset().left; var $el_full = $el.next('.trx-stretch-width-original'); var el_margin_left = parseInt( $el.css( 'margin-left' ), 10 ); var el_margin_right = parseInt( $el.css( 'margin-right' ), 10 ); var offset = $el_cont_offset - $el_full.offset().left - el_margin_left; var width = $el_cont.width(); if (!$el.hasClass('inited')) { $el.addClass('inited invisible'); $el.css({ 'position': 'relative', 'box-sizing': 'border-box' }); } $el.css({ 'left': offset, 'width': $el_cont.width() }); if ( !$el.hasClass('trx-stretch-content') ) { var padding = Math.max(0, -1*offset); var paddingRight = Math.max(0, width - padding - $el_full.width() + el_margin_left + el_margin_right); $el.css( { 'padding-left': padding + 'px', 'padding-right': paddingRight + 'px' } ); } $el.removeClass('invisible'); }); } // Stretch area to the full window height function shieldgroup_stretch_height(e, cont) { if (cont===undefined) cont = jQuery('body'); cont.find('.shieldgroup-full-height').each(function () { var fullheight_item = jQuery(this); // If item now invisible if (jQuery(this).parents('div:hidden,section:hidden,article:hidden').length > 0) { return; } var fullheight_row = jQuery(this).parents('.vc_row-o-full-height'); if (fullheight_row.length > 0) fullheight_item.height(fullheight_row.height()); else { var fh = shieldgroup_fixed_rows_height(); var wh = jQuery(window).width() >= 960 ? jQuery(window).height() - fh : 'auto'; if (wh > 0) { if (fullheight_item.data('display') != fullheight_item.css('display')) fullheight_item.css('display', fullheight_item.data('display')); fullheight_item.css('height', wh); } else if (wh=='auto' && fullheight_item.css('height')!='auto') { if (fullheight_item.data('display')==undefined) fullheight_item.attr('data-display', fullheight_item.css('display')); fullheight_item.css({'height': wh, 'display': 'block'}); } } }); } // Stretch background video function shieldgroup_stretch_bg_video() { var video_wrap = jQuery('div#background_video'); if (video_wrap.length == 0) return; var video = video_wrap.find('>iframe,>video'), w = video_wrap.width(), h = video_wrap.height(); if (w/h < 16/9) w = h/9*16; else h = w/16*9; video .attr({'width': w, 'height': h}) .css({'width': w, 'height': h}); } // Recalculate width of the vc_row[data-vc-full-width="true"] when content boxed or menu_style=='left|right' function shieldgroup_vc_row_fullwidth_to_boxed(cont) { if (jQuery('body').hasClass('body_style_boxed') || jQuery('body').hasClass('menu_style_side')) { if (cont === undefined || !cont.hasClass('.vc_row') || !cont.data('vc-full-width')) cont = jQuery('.vc_row[data-vc-full-width="true"]'); var width_content = jQuery('.page_wrap').width(); var width_content_wrap = jQuery('.page_content_wrap .content_wrap').width(); var indent = ( width_content - width_content_wrap ) / 2; var rtl = jQuery('html').attr('dir') == 'rtl'; cont.each( function() { var mrg = parseInt(jQuery(this).css('marginLeft')); var stretch_content = jQuery(this).attr('data-vc-stretch-content'); var in_content = jQuery(this).parents('.content_wrap').length > 0; jQuery(this).css({ 'width': width_content, 'left': rtl ? 'auto' : (in_content ? -indent : 0) - mrg, 'right': !rtl ? 'auto' : (in_content ? -indent : 0) - mrg, 'padding-left': stretch_content ? 0 : indent + mrg, 'padding-right': stretch_content ? 0 : indent + mrg }); }); } } // Fix/unfix footer function shieldgroup_fix_footer() { if (jQuery('body').hasClass('header_position_under') && !shieldgroup_browser_is_mobile()) { var ft = jQuery('.footer_wrap'); if (ft.length > 0) { var ft_height = ft.outerHeight(false), pc = jQuery('.page_content_wrap'), pc_offset = pc.offset().top, pc_height = pc.height(); if (pc_offset + pc_height + ft_height < jQuery(window).height()) { if (ft.css('position')!='absolute') { ft.css({ 'position': 'absolute', 'left': 0, 'bottom': 0, 'width' :'100%' }); } } else { if (ft.css('position')!='relative') { ft.css({ 'position': 'relative', 'left': 'auto', 'bottom': 'auto' }); } } } } } // Fix/unfix sidebar function shieldgroup_fix_sidebar() { var sb = jQuery('.sidebar'); var content = sb.siblings('.content'); if (sb.length > 0) { // Unfix when sidebar is under content if (content.css('float') == 'none') { var old_style = sb.data('old_style'); if (old_style !== undefined) sb.attr('style', old_style).removeAttr('data-old_style'); } else { var sb_height = sb.outerHeight(); var content_height = content.outerHeight(); var content_top = content.offset().top; var scroll_offset = jQuery(window).scrollTop(); var top_panel_fixed_height = shieldgroup_fixed_rows_height(); // If sidebar shorter then content and page scrolled below the content's top if (sb_height < content_height && scroll_offset + top_panel_fixed_height > content_top) { var sb_init = { 'position': 'undefined', 'float': 'none', 'top': 'auto', 'bottom' : 'auto' }; if (typeof SHIELDGROUP_STORAGE['scroll_offset_last'] == 'undefined') { SHIELDGROUP_STORAGE['sb_top_last'] = content_top; SHIELDGROUP_STORAGE['scroll_offset_last'] = scroll_offset; SHIELDGROUP_STORAGE['scroll_dir_last'] = 1; } var scroll_dir = scroll_offset - SHIELDGROUP_STORAGE['scroll_offset_last']; if (scroll_dir == 0) scroll_dir = SHIELDGROUP_STORAGE['scroll_dir_last']; else scroll_dir = scroll_dir > 0 ? 1 : -1; var sb_big = sb_height + 30 >= jQuery(window).height() - top_panel_fixed_height, sb_top = sb.offset().top; if (sb_top < 0) sb_top = SHIELDGROUP_STORAGE['sb_top_last']; // If sidebar height greater then window height if (sb_big) { // If change scrolling dir if (scroll_dir != SHIELDGROUP_STORAGE['scroll_dir_last'] && sb.css('position') == 'fixed') { sb_init.top = sb_top - content_top; sb_init.position = 'absolute'; // If scrolling down } else if (scroll_dir > 0) { if (scroll_offset + jQuery(window).height() >= content_top + content_height + 30) { sb_init.bottom = 0; sb_init.position = 'absolute'; } else if (scroll_offset + jQuery(window).height() >= (sb.css('position') == 'absolute' ? sb_top : content_top) + sb_height + 30) { sb_init.bottom = 30; sb_init.position = 'fixed'; } // If scrolling up } else { if (scroll_offset + top_panel_fixed_height <= sb_top) { sb_init.top = top_panel_fixed_height; sb_init.position = 'fixed'; } } // If sidebar height less then window height } else { if (scroll_offset + top_panel_fixed_height >= content_top + content_height - sb_height) { sb_init.bottom = 0; sb_init.position = 'absolute'; } else { sb_init.top = top_panel_fixed_height; sb_init.position = 'fixed'; } } if (sb_init.position != 'undefined') { // Detect horizontal position when resize var pos = 0; if (sb_init.position == 'fixed' || (!jQuery('body').hasClass('body_style_wide') && !jQuery('body').hasClass('body_style_boxed'))) { var sb_parent = sb.parent(); pos = sb_parent.position(); pos = pos.left + Math.max(0, parseInt(sb_parent.css('paddingLeft'), 10)) + Math.max(0, parseInt(sb_parent.css('marginLeft'), 10)) + (jQuery('body').hasClass('menu_style_right') ? Math.max(0, parseInt(jQuery('body').css('marginRight'), 10)) : 0); } if (sb.hasClass('right')) sb_init.right = pos; else sb_init.left = pos; // Set position if (sb.css('position') != sb_init.position || SHIELDGROUP_STORAGE['scroll_dir_last'] != scroll_dir) { if (sb.data('old_style') === undefined) { var style = sb.attr('style'); if (!style) style = ''; sb.attr('data-old_style', style); } sb.css(sb_init); } } SHIELDGROUP_STORAGE['sb_top_last'] = sb_top; SHIELDGROUP_STORAGE['scroll_offset_last'] = scroll_offset; SHIELDGROUP_STORAGE['scroll_dir_last'] = scroll_dir; } else { // Unfix when page scrolling to top var old_style = sb.data('old_style'); if (old_style !== undefined) sb.attr('style', old_style).removeAttr('data-old_style'); } } } } // Navigation //============================================== // Init Superfish menu function shieldgroup_init_sfmenu(selector) { jQuery(selector).show().each(function() { var animation_in = jQuery(this).parent().data('animation_in'); if (animation_in == undefined) animation_in = "none"; var animation_out = jQuery(this).parent().data('animation_out'); if (animation_out == undefined) animation_out = "none"; jQuery(this).addClass('inited').superfish({ delay: 500, animation: { opacity: 'show' }, animationOut: { opacity: 'hide' }, speed: animation_in!='none' ? 500 : 200, speedOut: animation_out!='none' ? 500 : 200, autoArrows: false, dropShadows: false, onBeforeShow: function(ul) { if (jQuery(this).parents("ul").length > 1){ var w = jQuery('.page_wrap').width(); var par_offset = jQuery(this).parents("ul").offset().left; var par_width = jQuery(this).parents("ul").outerWidth(); var ul_width = jQuery(this).outerWidth(); if (par_offset+par_width+ul_width > w-20 && par_offset-ul_width > 0) jQuery(this).addClass('submenu_left'); else jQuery(this).removeClass('submenu_left'); } if (animation_in!='none') { jQuery(this).removeClass('animated fast '+animation_out); jQuery(this).addClass('animated fast '+animation_in); } }, onBeforeHide: function(ul) { if (animation_out!='none') { jQuery(this).removeClass('animated fast '+animation_in); jQuery(this).addClass('animated fast '+animation_out); } } }); }); } // Post formats init //===================================================== function shieldgroup_init_post_formats(e, cont) { // MediaElement init shieldgroup_init_media_elements(cont); // Video play button cont.find('.format-video .post_featured.with_thumb .post_video_hover:not(.inited)') .addClass('inited') .on('click', function(e) { jQuery(this).parents('.post_featured') .addClass('post_video_play') .find('.post_video').html(jQuery(this).data('video')); jQuery(window).trigger('resize'); e.preventDefault(); return false; }); } function shieldgroup_init_media_elements(cont) { if (SHIELDGROUP_STORAGE['use_mediaelements'] && cont.find('audio:not(.inited),video:not(.inited)').length > 0) { if (window.mejs) { if (window.mejs.MepDefaults) window.mejs.MepDefaults.enableAutosize = true; if (window.mejs.MediaElementDefaults) window.mejs.MediaElementDefaults.enableAutosize = true; cont.find('audio:not(.inited),video:not(.inited)').each(function() { // If item now invisible if (jQuery(this).parents('div:hidden,section:hidden,article:hidden').length > 0) { return; } if (jQuery(this).parents('.mejs-mediaelement').length == 0 && jQuery( this ).parents( '.wp-block-video' ).length === 0 && !jQuery( this ).hasClass( 'wp-block-cover__video-background' ) && jQuery( this ).parents( '.elementor-background-video-container' ).length === 0 && (SHIELDGROUP_STORAGE['init_all_mediaelements'] || (!jQuery(this).hasClass('wp-audio-shortcode') && !jQuery(this).hasClass('wp-video-shortcode') && !jQuery(this).parent().hasClass('wp-playlist')))) { var media_tag = jQuery(this); var settings = { enableAutosize: true, videoWidth: -1, // if set, overrides