daily pastebin goal
39%
SHARE
TWEET

Untitled

a guest Feb 14th, 2018 80 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function (window) {
  2.     var equestAnimationFrame = 'equestAnimationFrame', requestAnimationFrame = 'r' + equestAnimationFrame,
  3.         ancelAnimationFrame = 'ancelAnimationFrame', cancelAnimationFrame = 'c' + ancelAnimationFrame, expectedTime = 0,
  4.         vendors = ['moz', 'ms', 'o', 'webkit'], vendor;
  5.     while (!window[requestAnimationFrame] && (vendor = vendors.pop())) {
  6.         window[requestAnimationFrame] = window[vendor + 'R' + equestAnimationFrame];
  7.         window[cancelAnimationFrame] = window[vendor + 'C' + ancelAnimationFrame] || window[vendor + 'CancelR' + equestAnimationFrame];
  8.     }
  9.     if (!window[requestAnimationFrame]) {
  10.         window[requestAnimationFrame] = function (callback) {
  11.             var currentTime = new Date().getTime(), adjustedDelay = 16 - (currentTime - expectedTime),
  12.                 delay = adjustedDelay > 0 ? adjustedDelay : 0;
  13.             expectedTime = currentTime + delay;
  14.             return setTimeout(function () {
  15.                 callback(expectedTime);
  16.             }, delay);
  17.         };
  18.         window[cancelAnimationFrame] = clearTimeout;
  19.     }
  20. }(this));
  21. ;(function (window, document, undefined) {
  22.     var classes = [];
  23.     var tests = [];
  24.     var ModernizrProto = {
  25.         _version: '3.0.0-alpha.3',
  26.         _config: {'classPrefix': '', 'enableClasses': true, 'enableJSClass': true, 'usePrefixes': true},
  27.         _q: [],
  28.         on: function (test, cb) {
  29.             var self = this;
  30.             setTimeout(function () {
  31.                 cb(self[test]);
  32.             }, 0);
  33.         },
  34.         addTest: function (name, fn, options) {
  35.             tests.push({name: name, fn: fn, options: options});
  36.         },
  37.         addAsyncTest: function (fn) {
  38.             tests.push({name: null, fn: fn});
  39.         }
  40.     };
  41.     var Modernizr = function () {
  42.     };
  43.     Modernizr.prototype = ModernizrProto;
  44.     Modernizr = new Modernizr();
  45.  
  46.     function is(obj, type) {
  47.         return typeof obj === type;
  48.     };
  49.  
  50.     function testRunner() {
  51.         var featureNames;
  52.         var feature;
  53.         var aliasIdx;
  54.         var result;
  55.         var nameIdx;
  56.         var featureName;
  57.         var featureNameSplit;
  58.         for (var featureIdx in tests) {
  59.             featureNames = [];
  60.             feature = tests[featureIdx];
  61.             if (feature.name) {
  62.                 featureNames.push(feature.name.toLowerCase());
  63.                 if (feature.options && feature.options.aliases && feature.options.aliases.length) {
  64.                     for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {
  65.                         featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());
  66.                     }
  67.                 }
  68.             }
  69.             result = is(feature.fn, 'function') ? feature.fn() : feature.fn;
  70.             for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {
  71.                 featureName = featureNames[nameIdx];
  72.                 featureNameSplit = featureName.split('.');
  73.                 if (featureNameSplit.length === 1) {
  74.                     Modernizr[featureNameSplit[0]] = result;
  75.                 } else {
  76.                     if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {
  77.                         Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);
  78.                     }
  79.                     Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;
  80.                 }
  81.                 classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));
  82.             }
  83.         }
  84.     };var docElement = document.documentElement;
  85.  
  86.     function setClasses(classes) {
  87.         var className = docElement.className;
  88.         var classPrefix = Modernizr._config.classPrefix || '';
  89.         if (Modernizr._config.enableJSClass) {
  90.             var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)');
  91.             className = className.replace(reJS, '$1' + classPrefix + 'js$2');
  92.         }
  93.         if (Modernizr._config.enableClasses) {
  94.             className += ' ' + classPrefix + classes.join(' ' + classPrefix);
  95.             docElement.className = className;
  96.         }
  97.     };var createElement = function () {
  98.         if (typeof document.createElement !== 'function') {
  99.             return document.createElement(arguments[0]);
  100.         } else {
  101.             return document.createElement.apply(document, arguments);
  102.         }
  103.     };
  104.     Modernizr.addTest('rgba', function () {
  105.         var elem = createElement('div');
  106.         var style = elem.style;
  107.         style.cssText = 'background-color:rgba(150,255,150,.5)';
  108.         return ('' + style.backgroundColor).indexOf('rgba') > -1;
  109.     });
  110.     Modernizr.addTest('draganddrop', function () {
  111.         var div = createElement('div');
  112.         return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
  113.     });
  114.     var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : []);
  115.     ModernizrProto._prefixes = prefixes;
  116.     Modernizr.addTest('csspositionsticky', function () {
  117.         var prop = 'position:';
  118.         var value = 'sticky';
  119.         var el = createElement('modernizr');
  120.         var mStyle = el.style;
  121.         mStyle.cssText = prop + prefixes.join(value + ';' + prop).slice(0, -prop.length);
  122.         return mStyle.position.indexOf(value) !== -1;
  123.     });
  124.     var newSyntax = 'CSS' in window && 'supports' in window.CSS;
  125.     var oldSyntax = 'supportsCSS' in window;
  126.     Modernizr.addTest('supports', newSyntax || oldSyntax);
  127.     Modernizr.addTest('canvas', function () {
  128.         var elem = createElement('canvas');
  129.         return !!(elem.getContext && elem.getContext('2d'));
  130.     });
  131.     Modernizr.addTest('canvastext', function () {
  132.         if (Modernizr.canvas === false) return false;
  133.         return typeof createElement('canvas').getContext('2d').fillText == 'function';
  134.     });
  135.     Modernizr.addTest('emoji', function () {
  136.         if (!Modernizr.canvastext) return false;
  137.         var pixelRatio = window.devicePixelRatio || 1;
  138.         var offset = 12 * pixelRatio;
  139.         var node = createElement('canvas');
  140.         var ctx = node.getContext('2d');
  141.         ctx.fillStyle = '#f00';
  142.         ctx.textBaseline = 'top';
  143.         ctx.font = '32px Arial';
  144.         ctx.fillText('\ud83d\udc28', 0, 0);
  145.         return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;
  146.     });
  147.  
  148.     function getBody() {
  149.         var body = document.body;
  150.         if (!body) {
  151.             body = createElement('body');
  152.             body.fake = true;
  153.         }
  154.         return body;
  155.     };
  156.  
  157.     function injectElementWithStyles(rule, callback, nodes, testnames) {
  158.         var mod = 'modernizr';
  159.         var style;
  160.         var ret;
  161.         var node;
  162.         var docOverflow;
  163.         var div = createElement('div');
  164.         var body = getBody();
  165.         if (parseInt(nodes, 10)) {
  166.             while (nodes--) {
  167.                 node = createElement('div');
  168.                 node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
  169.                 div.appendChild(node);
  170.             }
  171.         }
  172.         style = ['&#173;', '<style id="s', mod, '">', rule, '</style>'].join('');
  173.         div.id = mod;
  174.         (!body.fake ? div : body).innerHTML += style;
  175.         body.appendChild(div);
  176.         if (body.fake) {
  177.             body.style.background = '';
  178.             body.style.overflow = 'hidden';
  179.             docOverflow = docElement.style.overflow;
  180.             docElement.style.overflow = 'hidden';
  181.             docElement.appendChild(body);
  182.         }
  183.         ret = callback(div, rule);
  184.         if (body.fake) {
  185.             body.parentNode.removeChild(body);
  186.             docElement.style.overflow = docOverflow;
  187.             docElement.offsetHeight;
  188.         } else {
  189.             div.parentNode.removeChild(div);
  190.         }
  191.         return !!ret;
  192.     };var testStyles = ModernizrProto.testStyles = injectElementWithStyles;
  193.     var blacklist = (function () {
  194.         var ua = navigator.userAgent;
  195.         var wkvers = ua.match(/applewebkit\/([0-9]+)/gi) && parseFloat(RegExp.$1);
  196.         var webos = ua.match(/w(eb)?osbrowser/gi);
  197.         var wppre8 = ua.match(/windows phone/gi) && ua.match(/iemobile\/([0-9])+/gi) && parseFloat(RegExp.$1) >= 9;
  198.         var oldandroid = wkvers < 533 && ua.match(/android/gi);
  199.         return webos || oldandroid || wppre8;
  200.     }());
  201.     if (blacklist) {
  202.         Modernizr.addTest('fontface', false);
  203.     } else {
  204.         testStyles('@font-face {font-family:"font";src:url("https://")}', function (node, rule) {
  205.             var style = document.getElementById('smodernizr');
  206.             var sheet = style.sheet || style.styleSheet;
  207.             var cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
  208.             var bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
  209.             Modernizr.addTest('fontface', bool);
  210.         });
  211.     }
  212.     ;Modernizr.addTest('touchevents', function () {
  213.         var bool;
  214.         if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
  215.             bool = true;
  216.         } else {
  217.             var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');
  218.             testStyles(query, function (node) {
  219.                 bool = node.offsetTop === 9;
  220.             });
  221.         }
  222.         return bool;
  223.     });
  224.     var omPrefixes = 'Moz O ms Webkit';
  225.     var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);
  226.     ModernizrProto._cssomPrefixes = cssomPrefixes;
  227.     var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);
  228.     ModernizrProto._domPrefixes = domPrefixes;
  229.  
  230.     function contains(str, substr) {
  231.         return !!~('' + str).indexOf(substr);
  232.     };
  233.  
  234.     function cssToDOM(name) {
  235.         return name.replace(/([a-z])-([a-z])/g, function (str, m1, m2) {
  236.             return m1 + m2.toUpperCase();
  237.         }).replace(/^-/, '');
  238.     };
  239.  
  240.     function fnBind(fn, that) {
  241.         return function () {
  242.             return fn.apply(that, arguments);
  243.         };
  244.     };
  245.  
  246.     function testDOMProps(props, obj, elem) {
  247.         var item;
  248.         for (var i in props) {
  249.             if (props[i] in obj) {
  250.                 if (elem === false) return props[i];
  251.                 item = obj[props[i]];
  252.                 if (is(item, 'function')) {
  253.                     return fnBind(item, elem || obj);
  254.                 }
  255.                 return item;
  256.             }
  257.         }
  258.         return false;
  259.     };var modElem = {elem: createElement('modernizr')};
  260.     Modernizr._q.push(function () {
  261.         delete modElem.elem;
  262.     });
  263.     var mStyle = {style: modElem.elem.style};
  264.     Modernizr._q.unshift(function () {
  265.         delete mStyle.style;
  266.     });
  267.  
  268.     function domToCSS(name) {
  269.         return name.replace(/([A-Z])/g, function (str, m1) {
  270.             return '-' + m1.toLowerCase();
  271.         }).replace(/^ms-/, '-ms-');
  272.     };
  273.  
  274.     function nativeTestProps(props, value) {
  275.         var i = props.length;
  276.         if ('CSS' in window && 'supports' in window.CSS) {
  277.             while (i--) {
  278.                 if (window.CSS.supports(domToCSS(props[i]), value)) {
  279.                     return true;
  280.                 }
  281.             }
  282.             return false;
  283.         }
  284.         else if ('CSSSupportsRule' in window) {
  285.             var conditionText = [];
  286.             while (i--) {
  287.                 conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');
  288.             }
  289.             conditionText = conditionText.join(' or ');
  290.             return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function (node) {
  291.                 return getComputedStyle(node, null).position == 'absolute';
  292.             });
  293.         }
  294.         return undefined;
  295.     };
  296.  
  297.     function testProps(props, prefixed, value, skipValueTest) {
  298.         skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;
  299.         if (!is(value, 'undefined')) {
  300.             var result = nativeTestProps(props, value);
  301.             if (!is(result, 'undefined')) {
  302.                 return result;
  303.             }
  304.         }
  305.         var afterInit, i, propsLength, prop, before;
  306.         if (!mStyle.style) {
  307.             afterInit = true;
  308.             mStyle.modElem = createElement('modernizr');
  309.             mStyle.style = mStyle.modElem.style;
  310.         }
  311.  
  312.         function cleanElems() {
  313.             if (afterInit) {
  314.                 delete mStyle.style;
  315.                 delete mStyle.modElem;
  316.             }
  317.         }
  318.  
  319.         propsLength = props.length;
  320.         for (i = 0; i < propsLength; i++) {
  321.             prop = props[i];
  322.             before = mStyle.style[prop];
  323.             if (contains(prop, '-')) {
  324.                 prop = cssToDOM(prop);
  325.             }
  326.             if (mStyle.style[prop] !== undefined) {
  327.                 if (!skipValueTest && !is(value, 'undefined')) {
  328.                     try {
  329.                         mStyle.style[prop] = value;
  330.                     } catch (e) {
  331.                     }
  332.                     if (mStyle.style[prop] != before) {
  333.                         cleanElems();
  334.                         return prefixed == 'pfx' ? prop : true;
  335.                     }
  336.                 }
  337.                 else {
  338.                     cleanElems();
  339.                     return prefixed == 'pfx' ? prop : true;
  340.                 }
  341.             }
  342.         }
  343.         cleanElems();
  344.         return false;
  345.     };
  346.  
  347.     function testPropsAll(prop, prefixed, elem, value, skipValueTest) {
  348.         var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
  349.             props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
  350.         if (is(prefixed, 'string') || is(prefixed, 'undefined')) {
  351.             return testProps(props, prefixed, value, skipValueTest);
  352.         } else {
  353.             props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
  354.             return testDOMProps(props, prefixed, elem);
  355.         }
  356.     }
  357.  
  358.     ModernizrProto.testAllProps = testPropsAll;
  359.  
  360.     function testAllProps(prop, value, skipValueTest) {
  361.         return testPropsAll(prop, undefined, undefined, value, skipValueTest);
  362.     }
  363.  
  364.     ModernizrProto.testAllProps = testAllProps;
  365.     Modernizr.addTest('borderradius', testAllProps('borderRadius', '0px', true));
  366.     Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));
  367.     Modernizr.addTest('csstransforms', function () {
  368.         return navigator.userAgent.indexOf('Android 2.') === -1 && testAllProps('transform', 'scale(1)', true);
  369.     });
  370.     Modernizr.addTest('csstransforms3d', function () {
  371.         var ret = !!testAllProps('perspective', '1px', true);
  372.         var usePrefix = Modernizr._config.usePrefixes;
  373.         if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {
  374.             var mq;
  375.             if (Modernizr.supports) {
  376.                 mq = '@supports (perspective: 1px)';
  377.             } else {
  378.                 mq = '@media (transform-3d)';
  379.                 if (usePrefix) mq += ',(-webkit-transform-3d)';
  380.             }
  381.             mq += '{#modernizr{left:9px;position:absolute;height:5px;margin:0;padding:0;border:0}}';
  382.             testStyles(mq, function (elem) {
  383.                 ret = elem.offsetLeft === 9 && elem.offsetHeight === 5;
  384.             });
  385.         }
  386.         return ret;
  387.     });
  388.     Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));
  389.     Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));
  390.     Modernizr.addTest('flexboxlegacy', testAllProps('boxDirection', 'reverse', true));
  391.     testRunner();
  392.     setClasses(classes);
  393.     delete ModernizrProto.addTest;
  394.     delete ModernizrProto.addAsyncTest;
  395.     for (var i = 0; i < Modernizr._q.length; i++) {
  396.         Modernizr._q[i]();
  397.     }
  398.     window.Modernizr = Modernizr;
  399.     ;
  400. })(window, document);
  401. var audentio;
  402. if (audentio === undefined) audentio = {};
  403. audentio.pagination = {
  404.     enabled: false,
  405.     id: "audentio_postPagination",
  406.     displaySize: 800,
  407.     scrollDuration: 300,
  408.     sizeValid: false,
  409.     needsInit: true,
  410.     running: false,
  411.     numPosts: 0,
  412.     currentPost: 0,
  413.     parent: null,
  414.     threads: null,
  415.     posts: [],
  416.     uixSticky: true,
  417.     input: null,
  418.     dropdown: null,
  419.     ele: null,
  420.     scrollInterval: null,
  421.     target: -1,
  422.     lastPost: -1,
  423.     listenersAdded: false,
  424.     nextPage: "",
  425.     prevPage: "",
  426.     keyFn: function (event) {
  427.         audentio.pagination.keyEvent(event)
  428.     },
  429.     offset: 0,
  430.     parentEle: 'navigation',
  431.     container: null,
  432.     containerParent: null,
  433.     containerRemoved: 0,
  434.     popupMenu: null,
  435.     useDropdown: true,
  436.     outOfPhrase: "Out of",
  437.     enterIndexPhrase: "Enter Index",
  438.     additionalPages: false,
  439.     init: function () {
  440.         var ap = audentio.pagination, d = document;
  441.         if (uix !== undefined && uix.maxResponsiveWideWidth !== undefined) audentio.pagination.displaySize = uix.maxResponsiveWideWidth;
  442.         if (ap.id != "") {
  443.             var pfTime = uix.time();
  444.             var parent = d.getElementById(ap.id);
  445.             audentio.pagination.parent = parent;
  446.             threads = d.getElementById('messageList');
  447.             audentio.pagination.threads = threads;
  448.             if (parent !== null && threads !== null && ap.needsInit) {
  449.                 audentio.pagination.enabled = true;
  450.                 var windowWidth = window.innerWidth;
  451.                 var links = d.getElementsByTagName("LINK");
  452.                 for (var i = 0, len = links.length; i < len; i++) {
  453.                     if (links[i].rel == "prev") {
  454.                         audentio.pagination.prevPage = links[i].href;
  455.                         audentio.pagination.additionalPages = true;
  456.                     }
  457.                     if (links[i].rel == "next") {
  458.                         audentio.pagination.nextPage = links[i].href;
  459.                         audentio.pagination.additionalPages = true;
  460.                     }
  461.                 }
  462.                 ap.updatePosts();
  463.                 if ((windowWidth > ap.displaySize) && (ap.numPosts > 1 || ap.additionalPages)) {
  464.                     if (windowWidth < 1025) audentio.pagination.useDropdown = false;
  465.                     content = '<a href="javascript: void(0)" onclick="audentio.pagination.scrollToPost(0)"><i class="fa fa-angle-double-up pointer fa-fw pagetop"></i></a>';
  466.                     content += '<a href="javascript: void(0)" onclick="audentio.pagination.prevPost()"><i class="fa fa-angle-up pointer fa-fw pageup"></i></a>';
  467.                     content += '<a href="javascript:void(0)" class="uix_paginationMenu">';
  468.                     content += '    <span>' + ap.outOfPhrase + '</span>';
  469.                     content += '</a>';
  470.                     content += '<a href="javascript: void(0)" onclick="audentio.pagination.nextPost()"><i class="fa fa-angle-down pointer fa-fw pagedown"></i></a>';
  471.                     content += '<a href="javascript: void(0)" onclick="audentio.pagination.scrollToPost(' + (ap.numPosts - 1) + ')"><i class="fa fa-angle-double-down pointer fa-fw pagebottom"></i></a>';
  472.                     content += '<div class="progress-container">';
  473.                     content += '    <div class="progress-bar" id="audentio_postPaginationBar"></div>';
  474.                     content += '</div>';
  475.                     if (ap.useDropdown) {
  476.                         content += '    <div class="Menu" id="audentio_postPaginationDropdown">';
  477.                         content += '        <div class="primaryContent">';
  478.                         content += '            <input type="text" id="audentio_postPaginationInput" class="textCtrl" placeholder="' + ap.enterIndexPhrase + '">';
  479.                         content += '        </div>';
  480.                         content += '    </div>';
  481.                     }
  482.                     var paginator = d.createElement("div");
  483.                     paginator.className = "navLink";
  484.                     paginator.setAttribute('rel', 'Menu')
  485.                     paginator.innerHTML = content;
  486.                     parent.appendChild(paginator);
  487.                     if (ap.useDropdown) {
  488.                         audentio.pagination.popupMenu = new XenForo.PopupMenu($(parent))
  489.                     }
  490.                     if (!uix.initDone) {
  491.                         uix.updateNavTabs = true;
  492.                     } else {
  493.                         uix.navTabs();
  494.                     }
  495.                     audentio.pagination.ele = paginator;
  496.                     ap.updateTotalPost(ap.numPosts)
  497.                     ap.updateCurrentPost();
  498.                     if (ap.useDropdown) {
  499.                         audentio.pagination.input = d.getElementById("audentio_postPaginationInput");
  500.                         audentio.pagination.dropdown = d.getElementById("audentio_postPaginationDropdown");
  501.                     }
  502.                     d.addEventListener("scroll", function (event) {
  503.                         ap.updateCurrentPost();
  504.                     });
  505.                     ap.updateBar()
  506.                     audentio.pagination.running = true;
  507.                     audentio.pagination.needsInit = false;
  508.                     window.setTimeout(function () {
  509.                         window.requestAnimationFrame(function () {
  510.                             ap.update()
  511.                             audentio.pagination.lastPost = ap.currentPost;
  512.                         });
  513.                     }, 100);
  514.                     ap.checkSize();
  515.                     var us = uix.sidebarSticky, d = document, B = d.body, H = d.documentElement, docHeight = d.height;
  516.                     window.setInterval(function () {
  517.                         if (ap.running && uix.initDone) {
  518.                             if (typeof docHeight !== 'undefined') {
  519.                                 var documentHeight = document.height
  520.                             } else {
  521.                                 var documentHeight = Math.max(B.scrollHeight, B.offsetHeight, H.clientHeight, H.scrollHeight, H.offsetHeight);
  522.                             }
  523.                             if (documentHeight != uix.documentHeight) {
  524.                                 uix.documentHeight = documentHeight;
  525.                                 ap.update();
  526.                             }
  527.                         }
  528.                     }, 300);
  529.                 }
  530.             } else {
  531.                 audentio.pagination.listenersAdded = true;
  532.             }
  533.             if (ap.listenersAdded == false) {
  534.                 if (ap.useDropdown) {
  535.                     if (ap.running) ap.input.addEventListener('keypress', ap.keyFn);
  536.                 }
  537.                 audentio.pagination.listenersAdded = true;
  538.             }
  539.         }
  540.         uix.tStamp("Pagination Init", 2, pfTime);
  541.     },
  542.     update: function () {
  543.         var ap = audentio.pagination, pfTime = uix.time();
  544.         ap.checkSize();
  545.         if (ap.sizeValid) {
  546.             if (ap.needsInit) {
  547.                 ap.init(ap.id);
  548.             } else {
  549.                 ap.updatePosts();
  550.                 ap.updateCurrentPost();
  551.             }
  552.         }
  553.         uix.tStamp("Pagination Update", 2, pfTime);
  554.     },
  555.     checkSize: function () {
  556.         var ap = audentio.pagination, d = document;
  557.         if (window.innerWidth > ap.displaySize) {
  558.             audentio.pagination.sizeValid = true;
  559.             if (ap.containerRemoved == 1 && ap.containerParent !== null && ap.container !== null) {
  560.                 ap.containerParent.appendChild(ap.container);
  561.                 if (!uix.initDone) {
  562.                     uix.updateNavTabs = true;
  563.                 } else {
  564.                     uix.navTabs();
  565.                 }
  566.                 audentio.pagination.containerRemoved = 0;
  567.             }
  568.             if (ap.running) {
  569.                 ap.ele.style.display = "block";
  570.                 if (d.getElementById(ap.parentEle) !== null) {
  571.                     var className = d.getElementById(ap.parentEle).className;
  572.                     if (className.indexOf("activePagination") == -1) {
  573.                         className += ' activePagination';
  574.                         d.getElementById(ap.parentEle).className = className;
  575.                     }
  576.                 }
  577.             } else {
  578.                 if (ap.needsInit) ap.init();
  579.             }
  580.         } else {
  581.             audentio.pagination.sizeValid = false;
  582.             if (ap.running) {
  583.                 ap.ele.style.display = "none";
  584.                 if (d.getElementById(ap.parentEle) !== null) {
  585.                     var className = d.getElementById(ap.parentEle).className;
  586.                     if (className.indexOf("activePagination") > -1) {
  587.                         className = className.replace('activePagination', '');
  588.                         d.getElementById(ap.parentEle).className = className;
  589.                     }
  590.                 }
  591.             }
  592.             if (ap.containerRemoved == 0) {
  593.                 if (d.getElementById('audentio_postPagination') !== null) {
  594.                     if (!uix.initDone) {
  595.                         uix.updateNavTabs = true;
  596.                     } else {
  597.                         uix.navTabs();
  598.                     }
  599.                     audentio.pagination.containerRemoved = 1;
  600.                 }
  601.             }
  602.         }
  603.     },
  604.     keyEvent: function (event) {
  605.         var key = event.which || event.keyCode, ap = audentio.pagination, d = document;
  606.         if (key == 13) {
  607.             if (ap.useDropdown) {
  608.                 var index = parseInt(ap.input.value);
  609.                 if (index < 1) index = 1;
  610.                 if (index > ap.numPosts) index = ap.numPosts;
  611.                 audentio.pagination.input.value = "";
  612.                 ap.scrollToPost(index - 1);
  613.                 d.getElementById('audentio_postPaginationDropdown').style.display = "none";
  614.             }
  615.         } else if (key == 37) {
  616.         } else if (key == 39) {
  617.         }
  618.     },
  619.     getOffset: function (num) {
  620.         var ap = audentio.pagination;
  621.         if (num - ap.currentPost > 0) {
  622.             if (ap.uixSticky) {
  623.                 return uix.sticky.downStickyHeight + ap.offset;
  624.             }
  625.         } else {
  626.             if (ap.uixSticky) return uix.sticky.fullStickyHeight + ap.offset;
  627.         }
  628.         return 0;
  629.     },
  630.     prevPost: function () {
  631.         var ap = audentio.pagination;
  632.         if (ap.target != -1) {
  633.             window.scrollTo(0, ap.target);
  634.             ap.updateCurrentPost();
  635.         }
  636.         var target = ap.currentPost - 1;
  637.         if (target < 0) {
  638.             if (ap.prevPage != "") window.location.href = ap.prevPage;
  639.         } else {
  640.             if (ap.currentPost > 0) ap.scrollToPost(target);
  641.         }
  642.         return false;
  643.     },
  644.     nextPost: function () {
  645.         var ap = audentio.pagination;
  646.         if (ap.target != -1) {
  647.             window.scrollTo(0, ap.target);
  648.             ap.updateCurrentPost();
  649.         }
  650.         var target = ap.currentPost + 1;
  651.         if (target >= ap.numPosts) {
  652.             if (ap.nextPage != "") window.location.href = ap.nextPage;
  653.         } else {
  654.             ap.scrollToPost(target);
  655.         }
  656.         return false;
  657.     },
  658.     scrollToPost: function (num) {
  659.         uix.hideDropdowns.hide();
  660.         var target = 0, ap = audentio.pagination, d = document, w = window;
  661.         if (num >= ap.numPosts) {
  662.             target = d.body.getBoundingClientRect().height;
  663.         } else if (num >= 0) {
  664.             target = ap.posts[num] - ap.getOffset(num);
  665.             if (target !== target) target = ap.posts[ap.posts.length - 1] - ap.getOffset(num);
  666.         }
  667.         audentio.pagination.target = target;
  668.         var startY = w.scrollY, numSteps = Math.ceil(ap.scrollDuration / 15), scrollStep = (startY - target) / numSteps,
  669.             scrollCount = 0;
  670.         clearInterval(ap.scrollInterval);
  671.         if (ap.lastPost == num) {
  672.             if (num <= 0 && ap.prevPage != "") w.location.href = ap.prevPage;
  673.             if (num >= (ap.numPosts - 1) && ap.nextPage != "") w.location.href = ap.nextPage;
  674.         } else {
  675.             audentio.pagination.scrollInterval = setInterval(function () {
  676.                 if (scrollCount < numSteps && ap.target != -1) {
  677.                     scrollCount += 1;
  678.                     w.scrollTo(0, (startY - (scrollStep * scrollCount)));
  679.                 } else {
  680.                     clearInterval(ap.scrollInterval);
  681.                     w.scrollTo(0, target);
  682.                     audentio.pagination.target = -1;
  683.                 }
  684.             }, 16);
  685.         }
  686.         audentio.pagination.lastPost = num;
  687.         return false;
  688.     },
  689.     updateNumPosts: function () {
  690.         var posts = audentio.pagination.threads.getElementsByClassName('message')
  691.         var count = 0;
  692.         for (var i = 0, len = posts.length; i < len; i++) {
  693.             if (posts[i].className.indexOf("deleted") < 0) count = count + 1;
  694.         }
  695.         audentio.pagination.numPosts = count;
  696.     },
  697.     updateCurrentPost: function () {
  698.         var d = document, w = window, ap = audentio.pagination, scrollTop = w.scrollY || d.documentElement.scrollTop,
  699.             currentPost = 0
  700.         scrollTop += ap.getOffset() - 20;
  701.         for (var i = 0; i < ap.numPosts - 1; i++) {
  702.             if (scrollTop >= ap.posts[i]) {
  703.                 currentPost = i + 1;
  704.             } else {
  705.                 break;
  706.             }
  707.         }
  708.         if (d.getElementById('audentio_postPaginationCurrent') !== null) {
  709.             d.getElementById('audentio_postPaginationCurrent').innerHTML = currentPost + 1;
  710.             if (currentPost != ap.currentPost) {
  711.                 audentio.pagination.currentPost = currentPost;
  712.                 ap.updateBar();
  713.                 audentio.pagination.lastPost = currentPost;
  714.             }
  715.         }
  716.     },
  717.     updateTotalPost: function (value) {
  718.         var d = document;
  719.         if (d.getElementById('audentio_postPaginationTotal') !== null) {
  720.             d.getElementById('audentio_postPaginationTotal').innerHTML = value;
  721.         }
  722.     },
  723.     updatePosts: function () {
  724.         var ap = audentio.pagination;
  725.         ap.updateNumPosts();
  726.         var postCount = 0, posts = ap.threads.getElementsByClassName('message');
  727.         for (var i = 0, len = posts.length; i < len; i++) {
  728.             var post = posts[i];
  729.             if (post.className.indexOf("deleted") < 0) {
  730.                 audentio.pagination.posts[postCount] = post.offsetTop
  731.                 postCount = postCount + 1;
  732.             }
  733.         }
  734.     },
  735.     updateBar: function () {
  736.         var ap = audentio.pagination;
  737.         document.getElementById('audentio_postPaginationBar').style.width = ((ap.currentPost + 1) / ap.numPosts) * 100 + "%"
  738.     }
  739. }
  740. audentio.grid = {
  741.     running: false,
  742.     listenersAdded: false,
  743.     minEnableWidth: 1,
  744.     layout: {},
  745.     eles: [],
  746.     equalCategories: true,
  747.     classAdded: false,
  748.     alwaysCheck: true,
  749.     nextSubnodeIds: [],
  750.     scriptTags: [],
  751.     layoutNodeIds: [],
  752.     debug: "",
  753.     parse: function (layoutOrig) {
  754.         audentio.grid.debug = layoutOrig;
  755.         var ag = audentio.grid, result = {global: {root: {numCol: 6, fillLast: 0, minWidth: 300,}}},
  756.             layout = JSON.parse(layoutOrig.split('&quot;').join('"')), layoutKeys = Object.keys(layout);
  757.         for (var i = 0, len = ag.scriptTags.length; i < len; i++) {
  758.             audentio.grid.nextSubnodeIds.push(ag.getNodeId(ag.scriptTags[i].nextElementSibling));
  759.         }
  760.         for (var keyNum = 0, keyLen = layoutKeys.length; keyNum < keyLen; keyNum++) {
  761.             var key = layoutKeys[keyNum], tempKey = (layoutKeys[keyNum] == 'category') ? 0 : layoutKeys[keyNum],
  762.                 nextSubnodeId = 0, subNodeIndex = 0;
  763.             for (var i = 0, len = ag.layoutNodeIds.length; i < len; i++) {
  764.                 if (ag.layoutNodeIds[i] == tempKey) {
  765.                     nextSubnodeId = ag.nextSubnodeIds[i];
  766.                     subNodeIndex = i;
  767.                     break;
  768.                 }
  769.             }
  770.             if (nextSubnodeId == 0) {
  771.                 var keyName = 'node_' + tempKey, keyEle = layout[key];
  772.                 if (key == 'default') keyName = 'global';
  773.                 if (typeof(result[keyName]) === 'undefined') result[keyName] = {}
  774.                 if (typeof(result[keyName].root) === 'undefined') result[keyName].root = {};
  775.                 if (keyEle.fill_last_row !== undefined && parseInt(keyEle.fill_last_row.value) >= 0) result[keyName].root.fillLast = parseInt(keyEle.fill_last_row.value);
  776.                 if (keyEle.minimum_column_width !== undefined && parseInt(keyEle.minimum_column_width.value) >= 0) result[keyName].root.minWidth = parseInt(keyEle.minimum_column_width.value);
  777.                 if (keyEle.maximum_columns !== undefined && parseInt(keyEle.maximum_columns.value) >= 0) result[keyName].root.numCol = parseInt(keyEle.maximum_columns.value);
  778.                 if (keyEle.column_widths !== undefined && keyEle.column_widths.value == 1) {
  779.                     if (keyEle.custom_column_widths !== undefined && keyEle.custom_column_widths.layouts !== undefined) {
  780.                         var colEles = keyEle.custom_column_widths.layouts, colKeys = Object.keys(colEles);
  781.                         for (var colNum = 0, colLen = colKeys.length; colNum < colLen; colNum++) {
  782.                             var col = colKeys[colNum], valEles = colEles[col], valKeys = Object.keys(velEles);
  783.                             result[keyName].root['col_' + col] = {};
  784.                             for (var valNum = 0, valLen = valKeys.length; valNum < valLen; valNum++) {
  785.                                 var val = valKeys[valNum];
  786.                                 var colWidth = parseInt(valEles[val]);
  787.                                 if (colWidth < 1 || colWidth !== colWidth) colWidth = 1;
  788.                                 result[keyName].root['col_' + col]['col' + val] = colWidth;
  789.                             }
  790.                         }
  791.                     }
  792.                 }
  793.                 if (typeof(result[keyName].listeners) === "undefined") {
  794.                     result[keyName].listeners = [];
  795.                 }
  796.             } else {
  797.                 var parentNodeId = ag.getNodeId(ag.scriptTags[subNodeIndex].parentElement.parentElement);
  798.                 if (parentNodeId == -1) parentNodeId = 0;
  799.                 var keyName = 'node_' + parentNodeId, subKeyName = 'node_' + nextSubnodeId, keyEle = layout[key];
  800.                 if (typeof(result[keyName]) === 'undefined') result[keyName] = {};
  801.                 if (typeof(result[keyName].root) === 'undefined') result[keyName].root = {
  802.                     fillLast: parseInt(layout.default.fill_last_row.value),
  803.                     minWidth: parseInt(layout.default.minimum_column_width.value),
  804.                     numCol: parseInt(layout.default.maximum_columns.value),
  805.                 };
  806.                 if (typeof(result[keyName][subKeyName]) === 'undefined') {
  807.                     result[keyName][subKeyName] = {};
  808.                     if (typeof(result[keyName].subLayout) === 'undefined') result[keyName].subLayout = {};
  809.                     result[keyName].subLayout[subKeyName] = subKeyName;
  810.                     if (keyEle.fill_last_row !== undefined && parseInt(keyEle.fill_last_row.value) >= 0) result[keyName][subKeyName].fillLast = parseInt(keyEle.fill_last_row.value);
  811.                     if (keyEle.minimum_column_width !== undefined && parseInt(keyEle.minimum_column_width.value) >= 0) result[keyName][subKeyName].minWidth = parseInt(keyEle.minimum_column_width.value);
  812.                     if (keyEle.maximum_columns !== undefined && parseInt(keyEle.maximum_columns.value) >= 0) result[keyName][subKeyName].numCol = parseInt(keyEle.maximum_columns.value);
  813.                     if (keyEle.column_widths !== undefined && keyEle.column_widths.value == 1) {
  814.                         if (keyEle.custom_column_widths !== undefined && keyEle.custom_column_widths.layouts !== undefined) {
  815.                             var colEles = keyEle.custom_column_widths.layouts, colKeys = Object.keys(colEles);
  816.                             for (var colNum = 0, colLen = colKeys.length; colNum < colLen; colNum++) {
  817.                                 var col = colKeys[colNum], valEles = colEles[col], valKeys = Object.keys(velEles);
  818.                                 result[keyName][subKeyName]['col_' + col] = {};
  819.                                 for (var valNum = 0, valLen = valKeys.length; valNum < valLen; valNum++) {
  820.                                     var val = valKeys[valNum];
  821.                                     var colWidth = parseInt(valKeys[val]);
  822.                                     if (colWidth < 1 || colWidth !== colWidth) colWidth = 1;
  823.                                     result[keyName][subKeyName]['col_' + col]['col' + val] = colWidth;
  824.                                 }
  825.                             }
  826.                         }
  827.                     }
  828.                 }
  829.             }
  830.         }
  831.         audentio.grid.layout = result;
  832.         if (ag.running) ag.update();
  833.         return result;
  834.     },
  835.     addSizeListener: function (node, className, widthMax, widthMin) {
  836.         var ag = audentio.grid;
  837.         if (typeof(ag.layout[node]) === "undefined") {
  838.             audentio.grid.layout[node] = {};
  839.         }
  840.         if (typeof(ag.layout[node].listeners) === "undefined") {
  841.             audentio.grid.layout[node].listeners = [];
  842.         }
  843.         audentio.grid.layout[node].listeners.push([className, widthMax, widthMin]);
  844.         if (ag.running) ag.update();
  845.     },
  846.     addSubNode: function (layoutNodeId) {
  847.         var scriptTag = document.scripts[document.scripts.length - 1];
  848.         audentio.grid.scriptTags.push(scriptTag);
  849.         audentio.grid.layoutNodeIds.push(layoutNodeId);
  850.     },
  851.     init: function (layout, minWidth) {
  852.         var ag = audentio.grid, pfTime = uix.time();
  853.         if (layout !== undefined) audentio.grid.layout = layout;
  854.         if (minWidth !== undefined) audentio.grid.minEnableWidth = minWidth;
  855.         if (ag.running == false && window.innerWidth >= ag.minEnableWidth) {
  856.             audentio.grid.running = true;
  857.             var forums = ag.getForums();
  858.             if (forums !== null) {
  859.                 if (ag.classAdded == false) {
  860.                     forums.className += ' audentio_grid_running';
  861.                     audentio.grid.classAdded = true;
  862.                 }
  863.                 var nodeId = 0, bodyClass = document.getElementsByTagName("body")[0].className.split(" ");
  864.                 for (var i = 0, len = bodyClass.length; i < len; i++) {
  865.                     if (bodyClass[i].indexOf("node") > -1) {
  866.                         var possibleId = bodyClass[i].replace("node", "")
  867.                         if (possibleId == parseInt(possibleId)) {
  868.                             nodeId = possibleId;
  869.                             break;
  870.                         }
  871.                     }
  872.                 }
  873.                 ag.checkWidths();
  874.                 ag.recurse(forums, "node_" + nodeId);
  875.                 ag.update();
  876.             }
  877.         } else {
  878.             var forums = ag.getForums();
  879.         }
  880.         if (forums != null) {
  881.             forums.style.visibility = "visible";
  882.         }
  883.         if (ag.listenersAdded == false) {
  884.             audentio.grid.listenersAdded = true;
  885.         }
  886.         uix.tStamp("Grid Init", 2, pfTime);
  887.     },
  888.     checkWidths: function () {
  889.         var ag = audentio.grid, node0Set = false, nodeKeys = Object.keys(ag.layout);
  890.         for (var i = 0, lenNode = nodeKeys.length; i < lenNode; i++) {
  891.             var node = nodeKeys[i], nodeEle = ag.layout[node], subKeys = Object.keys(nodeEle);
  892.             for (var j = 0, lenSub = subKeys.length; j < lenSub; j++) {
  893.                 var subLayout = subKeys[j], subEle = nodeEle[subLayout], colKeys = Object.keys(subEle);
  894.                 if (node == "node_0") {
  895.                     node0Set = true;
  896.                     if (ag.layout.node_0[subLayout].numCol != 1) audentio.grid.equalCategories = false;
  897.                 }
  898.                 for (var k = 0, lenCol = colKeys.length; k < lenCol; k++) {
  899.                     var col = colKeys[k], colEle = subEle[col], widthKeys = uix.fn.getKeys(colEle), totalWidth = 0;
  900.                     if (col.indexOf("col_") > -1 && widthKeys !== null) {
  901.                         for (var l = 0, len = widthKeys.length; l < len; l++) {
  902.                             totalWidth += parseInt(colEle[widthKeys[l]])
  903.                         }
  904.                         if (totalWidth != 100) {
  905.                             for (var l = 0, len = widthKeys.length; l < len; l++) {
  906.                                 var width = widthKeys[l];
  907.                                 ag.layout[node][subLayout][col][width] = (parseInt(colEle[width] / totalWidth) * 100)
  908.                             }
  909.                         }
  910.                     }
  911.                 }
  912.             }
  913.         }
  914.         if (node0Set == false) {
  915.             if (ag.layout.global.root.numCol != 1) audentio.grid.equalCategories = false;
  916.         }
  917.     },
  918.     getNodeId: function (ele) {
  919.         var ret = -1;
  920.         if (ele !== null && typeof(ele) !== "undefined") {
  921.             var classList = ele.className.split(" ");
  922.             for (var i = 0, len = classList.length; i < len; i++) {
  923.                 if (classList[i].indexOf("node_") > -1 && classList[i].indexOf("audentio") == -1) {
  924.                     ret = parseInt(classList[i].replace("node_", ""));
  925.                 }
  926.             }
  927.         }
  928.         return ret;
  929.     },
  930.     recurse: function (ele, layoutName) {
  931.         var ag = audentio.grid;
  932.         if (ag.layout[layoutName] === undefined) layoutName = "global";
  933.         var
  934.             newEle = {
  935.                 ele: ele,
  936.                 layoutName: layoutName,
  937.                 children: [],
  938.                 ratio: 1,
  939.                 eleID: ag.getNodeId(ele.parentNode),
  940.                 subLayouts: [{name: 'root', count: 0, currentCols: 0}]
  941.             }, children = ele.children, subLayoutName = "root", hasSubLayouts = false, numChildren = 0;
  942.         for (var i = 0, len = children.length; i < len; i++) {
  943.             var currentChild = children[i];
  944.             if (currentChild.tagName == "LI") {
  945.                 var child = {
  946.                     ele: currentChild,
  947.                     nodeId: ag.getNodeId(currentChild),
  948.                     eleIndex: -1,
  949.                     setup: false,
  950.                     classes: {},
  951.                 }, subEles = ag.layout[layoutName], subKeys = Object.keys(subEles);
  952.                 for (var subNum = 0, subLen = subKeys.length; subNum < subLen; subNum++) {
  953.                     var subLayout = subKeys[subNum];
  954.                     if ("node_" + child.nodeId == subLayout) {
  955.                         subLayoutName = subLayout;
  956.                         newEle.subLayouts.push({name: subLayout, count: 0, currentCols: 0});
  957.                         hasSubLayouts = true
  958.                     }
  959.                 }
  960.                 newEle.subLayouts[newEle.subLayouts.length - 1].count++;
  961.                 child.subLayout = subLayoutName;
  962.                 newEle.children.push(child);
  963.                 numChildren++;
  964.             }
  965.         }
  966.         if (ag.layout.global.root.numCol > 1 || ag.layout[layoutName].root.numCol > 1 || hasSubLayouts) ag.eles.push(newEle);
  967.         for (var i = 0; i < numChildren; i++) {
  968.             var nodeId = newEle.children[i].nodeId;
  969.             var nextLayoutName = "global";
  970.             if (ag.layout['node_' + nodeId] !== undefined) nextLayoutName = "node_" + nodeId;
  971.             var child = newEle.children[i].ele.getElementsByClassName("nodeList");
  972.             if (child.length > 0) ag.recurse(child[0], nextLayoutName);
  973.         }
  974.     },
  975.     set: function (index) {
  976.         var ag = audentio.grid, eleRoot = ag.eles[index], ele = eleRoot.ele, layoutName = eleRoot.layoutName,
  977.             changeMade = false, nodeChildren = eleRoot.children, childStart = 0, absoluteRowNum = 0,
  978.             absoluteNodeNum = 0, subLayoutNum = 0, numSubLayouts = eleRoot.subLayouts.length,
  979.             subKeys = Object.keys(eleRoot.subLayouts);
  980.         for (var subNum = 0, lenSub = subKeys.length; subNum < lenSub; subNum++) {
  981.             var subLayout = subKeys[subNum];
  982.             subLayoutNum++;
  983.             var fillLast = ag.layout.global.root.fillLast, subName = eleRoot.subLayouts[subLayout].name,
  984.                 subLayoutVar = {}, children = [], widthSum = 100, rowNum = 0;
  985.             if (typeof(ag.layout[layoutName]) !== "undefined" && typeof(ag.layout[layoutName][subName]) !== "undefined") subLayoutVar = ag.layout[layoutName][subName];
  986.             if (typeof(subLayoutVar.fillLast) === "number") fillLast = subLayoutVar.fillLast;
  987.             for (var i = 0, len = nodeChildren.length; i < len; i++) {
  988.                 if (subName == nodeChildren[i].subLayout) children.push(nodeChildren[i]);
  989.             }
  990.             var childLen = children.length, numCols = ag.findCols(index, childLen, subName);
  991.             if (subLayoutVar.currentCols != numCols || ag.alwaysCheck) {
  992.                 changeMade = true;
  993.                 var lastFullRow = childLen - (childLen % numCols)
  994.                 for (var i = 0; i < childLen; i++) {
  995.                     var itemWidth = 100 / numCols, lastRowCols = 0;
  996.                     if (typeof(ag.layout["global"]["root"]["col_" + numCols]) !== "undefined") itemWidth = ag.layout["global"]["root"]["col_" + numCols]["col" + (i % numCols + 1)];
  997.                     if (typeof(subLayoutVar["col_" + numCols]) !== "undefined") itemWidth = subLayoutVar["col_" + numCols]["col" + (i % numCols + 1)];
  998.                     if (fillLast == 0) {
  999.                         lastRowCols = (childLen % numCols)
  1000.                         if (i >= lastFullRow) itemWidth = 100 / lastRowCols;
  1001.                     } else if (fillLast == 2) {
  1002.                         if (i >= lastFullRow) {
  1003.                             lastRowCols = ag.findCols(index, (childLen % numCols), subName);
  1004.                             var itemWidth = 100 / lastRowCols;
  1005.                             if (typeof(ag.layout["global"]["root"]["col_" + lastRowCols]) !== "undefined") itemWidth = ag.layout["global"]["root"]["col_" + lastRowCols]["col" + ((i - lastFullRow) % lastRowCols + 1)];
  1006.                             if (typeof(subLayoutVar["col_" + lastRowCols]) !== "undefined") itemWidth = subLayoutVar["col_" + lastRowCols]["col" + ((i - lastFullRow) % lastRowCols + 1)];
  1007.                         }
  1008.                     } else if (fillLast == 3) {
  1009.                         lastRowCols = 1;
  1010.                         if (i >= lastFullRow) itemWidth = 100
  1011.                     }
  1012.                     var leftCol = (widthSum >= 99 || itemWidth == 100) ? true : false,
  1013.                         rightCol = (i % numCols == numCols - 1 || itemWidth == 100 || (i >= lastFullRow && (i - lastFullRow) % lastRowCols == lastRowCols - 1)) ? true : false,
  1014.                         maxCols = (lastRowCols > 0) ? lastRowCols : numCols;
  1015.                     if (widthSum >= 99) {
  1016.                         widthSum = 0;
  1017.                         rowNum++;
  1018.                         absoluteRowNum++;
  1019.                     }
  1020.                     ag.setClass(children[i], i % numCols + 1, maxCols, (eleRoot.parentWidth * itemWidth) / 100, rowNum, absoluteRowNum, i + 1, absoluteNodeNum + 1, subLayoutNum, leftCol, rightCol, numSubLayouts, ag.layout[layoutName].listeners);
  1021.                     var eleChildren = eleRoot.children;
  1022.                     if (eleRoot.layoutName == "node_0") {
  1023.                         for (var j = 1, len2 = eleChildren.length; j <= len2; j++) {
  1024.                             if (children[i].nodeId == eleChildren[j - 1].nodeId) {
  1025.                                 if (typeof(ag.eles[j]) !== "undefined") ag.eles[j].ratio = itemWidth / 100;
  1026.                             }
  1027.                         }
  1028.                     }
  1029.                     children[i].ele.style.width = itemWidth + "%";
  1030.                     if (children[i].setup == false) {
  1031.                         children[i].setup = true;
  1032.                     }
  1033.                     widthSum += itemWidth;
  1034.                     absoluteNodeNum++;
  1035.                 }
  1036.                 audentio.grid.eles[index].subLayouts[subLayout].currentCols = numCols;
  1037.             }
  1038.             childStart++;
  1039.         }
  1040.         return changeMade;
  1041.     },
  1042.     setClass: function (child, colNum, maxCol, width, rowNum, rowNumAbs, nodeNum, nodeAbsNum, subLayoutNum, leftCol, rightCol, numSubLayouts, listeners) {
  1043.         var ag = audentio.grid, prefix = "audentio_grid";
  1044.         if (typeof(listeners) === "undefined" || listeners.length == 0) listeners = ag.layout.global.listeners;
  1045.         var newClasses = {
  1046.             a: prefix,
  1047.             b: (width != 100) ? prefix + '_active' : "",
  1048.             c: (leftCol) ? prefix + '_left' : "",
  1049.             d: (rightCol) ? prefix + '_right' : "",
  1050.             e: prefix + '_column_' + colNum,
  1051.             f: prefix + '_columnMax_' + maxCol,
  1052.             g: prefix + '_rowSublayout_' + rowNum,
  1053.             h: prefix + '_row_' + rowNumAbs,
  1054.             i: prefix + '_subLayout_' + subLayoutNum,
  1055.             j: prefix + '_numSubLayouts_' + numSubLayouts,
  1056.             k: prefix + '_nodeSublayout_' + nodeNum,
  1057.             l: prefix + '_node_' + nodeAbsNum,
  1058.         }, listenerLen = listeners.length;
  1059.         if (listenerLen > 0) {
  1060.             for (var i = 0; i < listenerLen; i++) {
  1061.                 if (width < listeners[i][1] && width >= listeners[i][2]) {
  1062.                     newClasses[listeners[i][0]] = listeners[i][0];
  1063.                 } else {
  1064.                     newClasses[listeners[i][0]] = "";
  1065.                 }
  1066.             }
  1067.         }
  1068.         var eleClasses = child.ele.className, changeMade = false;
  1069.         for (var i = 0, len = Object.keys(newClasses).length; i < len; i++) {
  1070.             var key = Object.keys(newClasses)[i]
  1071.             if (newClasses[key] != child.classes[key]) {
  1072.                 changeMade = true;
  1073.                 if (typeof(child.classes[key]) === "undefined" || child.classes[key] == "") {
  1074.                     eleClasses += " " + newClasses[key];
  1075.                     eleClasses = eleClasses.replace("   ", " ");
  1076.                 } else {
  1077.                     eleClasses = eleClasses.replace(child.classes[key], newClasses[key]);
  1078.                     eleClasses = eleClasses.replace("   ", " ");
  1079.                 }
  1080.             }
  1081.         }
  1082.         if (changeMade) {
  1083.             child.ele.className = eleClasses;
  1084.             child.classes = newClasses;
  1085.         }
  1086.     },
  1087.     findCols: function (index, numChildren, subName) {
  1088.         var ag = audentio.grid, subLayout = {}, ele = ag.eles[index].ele, layoutName = ag.eles[index].layoutName,
  1089.             minWidth = ag.layout.global.root.minWidth, numColumns = 1, parentWidth = ag.eles[index].parentWidth;
  1090.         if (typeof(ag.layout[layoutName]) !== "undefined" && typeof(ag.layout[layoutName][subName]) !== "undefined") subLayout = ag.layout[layoutName][subName];
  1091.         if (typeof(subLayout.minWidth) === "number") minWidth = subLayout.minWidth;
  1092.         var minPercent = (minWidth / parentWidth) * 100
  1093.         if (typeof(subLayout.numCol) === "number") numColumns = subLayout.numCol;
  1094.         if (numColumns > numChildren && subLayout.fillLast != 1) numColumns = numChildren;
  1095.         var numCols = numColumns;
  1096.         for (var i = numColumns; i > 1; i--) {
  1097.             var minCol = 100
  1098.             for (j = 1; j <= subLayout.numCol; j++) {
  1099.                 var width = 100 / i
  1100.                 if (typeof(ag.layout["global"]["root"]["col_" + i]) !== "undefined") width = ag.layout["global"]["root"]["col_" + i]["col" + j];
  1101.                 if (typeof(subLayout["col_" + i]) !== "undefined") width = subLayout["col_" + i]["col" + j];
  1102.                 if (width !== undefined && width < minCol) minCol = width
  1103.             }
  1104.             if (minCol >= minPercent) {
  1105.                 break;
  1106.             } else {
  1107.                 numCols = i - 1;
  1108.             }
  1109.         }
  1110.         return numCols;
  1111.     },
  1112.     update: function () {
  1113.         var ag = audentio.grid, pfTime = uix.time();
  1114.         if (window.innerWidth >= ag.minEnableWidth) {
  1115.             if (ag.running) {
  1116.                 var changeMade = false, gridEles = ag.eles, gridElesLen = gridEles.length;
  1117.                 if (gridElesLen > 0) {
  1118.                     var globalWidth = gridEles[0].ele.offsetWidth / gridEles[0].ratio;
  1119.                     for (i = 0; i < gridElesLen; i++) {
  1120.                         gridEles[i].parentWidth = globalWidth * gridEles[i].ratio;
  1121.                         if (ag.set(i)) changeMade = true;
  1122.                     }
  1123.                 }
  1124.             } else {
  1125.                 ag.init();
  1126.             }
  1127.         } else {
  1128.             audentio.grid.running = false;
  1129.             var forums = ag.getForums();
  1130.             if (ag.classAdded && forums !== null) {
  1131.                 forums.className = forums.className.remove('audentio_grid_running');
  1132.                 audentio.grid.classAdded = false;
  1133.             }
  1134.         }
  1135.         uix.tStamp("Grid Update", 2, pfTime);
  1136.     },
  1137.     getForums: function () {
  1138.         var ag = audentio.grid;
  1139.         var d = document, forums = d.getElementById("forums");
  1140.         if (forums == null) {
  1141.             forumsTemp = d.getElementsByClassName("nodeList section sectionMain");
  1142.             if (forumsTemp.length == 1) forums = forumsTemp[0];
  1143.         }
  1144.         if (forums == null) {
  1145.             forumsTemp = d.getElementsByClassName("watch_forums");
  1146.             if (forumsTemp.length == 1) forumsTemp = forumsTemp[0].getElementsByClassName("nodeList");
  1147.             if (forumsTemp.length == 1) forums = forumsTemp[0];
  1148.         }
  1149.         return forums;
  1150.     },
  1151. }
  1152. uix.log = function (x, style) {
  1153.     if (typeof(style) === "undefined") {
  1154.         if (uix.betaMode) console.log(x);
  1155.     } else {
  1156.         if (uix.betaMode) console.log("%c" + x, style);
  1157.     }
  1158. };
  1159. uix.info = function (x) {
  1160.     if (uix.betaMode) console.info(x);
  1161. };
  1162. uix.debug = function () {
  1163.     console.log(uix.initTime);
  1164.     console.log(uix.xfTime);
  1165.     var result = "===========================================================================\n"
  1166.     var versionLength = 30, numLength = 10, nameLength = 46, totalLength = 14, durationLength = 14, timePoints = 3;
  1167.     result += "User Settings: \n"
  1168.     if (typeof(uix.user) !== "undefined") {
  1169.         var userKeys = Object.keys(uix.user);
  1170.         for (var i = 0, len = userKeys.length; i < len; i++) {
  1171.             result += " " + uix.spaceToLength(userKeys[i], 25) + ": " + uix.user[userKeys[i]] + "\n";
  1172.         }
  1173.     } else {
  1174.         result += "User settings not found. There's likely an issue with the page_container_js_head template. \n"
  1175.     }
  1176.     result += "\n";
  1177.     result += "Browser: " + navigator.userAgent + "\n"
  1178.     result += uix.spaceToLength("UI.X Version", versionLength) + ": " + uix.version + "\n"
  1179.     result += uix.spaceToLength("UI.X Javascript Version", versionLength) + ": " + uix.jsVersion + "\n"
  1180.     result += uix.spaceToLength("UI.X js_head Version", versionLength) + ": " + uix.jsHeadVersion + "\n"
  1181.     result += uix.spaceToLength("UI.X Addon Version", versionLength) + ": " + uix.addonVersion + "\n"
  1182.     result += uix.spaceToLength("Beta Mode", versionLength) + ": " + uix.betaMode + "\n"
  1183.     result += uix.spaceToLength("Screen size (width, height)", versionLength) + ": " + "(" + window.screen.availWidth + ", " + window.screen.availHeight + ")" + "\n"
  1184.     result += uix.spaceToLength("Window size (width, height)", versionLength) + ": " + "(" + window.innerWidth + ", " + window.innerHeight + ")" + "\n"
  1185.     result += uix.spaceToLength("Current Page", versionLength) + ": " + window.location.href + "\n"
  1186.     result += uix.spaceToLength("XenForo Address", versionLength) + ": " + XenForo.baseUrl() + "\n"
  1187.     result += uix.spaceToLength("User ID", versionLength) + ": " + XenForo.visitor.user_id + "\n"
  1188.     result += uix.spaceToLength("RTL", versionLength) + ": " + XenForo.RTL + "\n"
  1189.     result += '\n' + uix.spaceToLength("", numLength) + uix.spaceToLength("Description", nameLength) + uix.spaceToLength("Total (ms)", totalLength) + uix.spaceToLength("Duration (ms)", durationLength)
  1190.     if (typeof(uix.initLog) !== "undefined") {
  1191.         for (var i = 0, len = uix.initLog.length; i < len; i++) {
  1192.             var index = i + 1;
  1193.             if (index >= len) index = 0;
  1194.             result = result + '\n' + uix.spaceToLength((i + 1).toString() + ":", numLength) + (uix.spaceToLength(uix.initLog[i][0], nameLength) + uix.spaceToLength(uix.round(uix.initLog[i][1], timePoints).toString(), totalLength) + uix.spaceToLength(uix.round(Math.abs(uix.initLog[index][1] - uix.initLog[i][1]), timePoints).toString(), durationLength))
  1195.         }
  1196.     } else {
  1197.         result += "No uix.initLog created. \n";
  1198.     }
  1199.     console.log(result);
  1200.     uix.pfLog = true;
  1201.     uix.betaMode = true;
  1202. }
  1203. uix.logI = function (label) {
  1204.     uix.tStamp(label, 0, uix.pfTime);
  1205.     uix.initLog.push([label, (uix.time(true) - uix.pfTime)])
  1206. }
  1207. uix.spaceToLength = function (input, length) {
  1208.     var result = input;
  1209.     for (var i = input.length; i <= length; i++) {
  1210.         result += " "
  1211.     }
  1212.     return result;
  1213. }
  1214. uix.round = function (num, points) {
  1215.     return Math.round(num * Math.pow(10, points)) / Math.pow(10, points);
  1216. }
  1217. uix.tStamp = function (label, level, startTime) {
  1218.     if (uix.pfLog && startTime !== null) uix.log(label + ": " + uix.round(uix.time() - startTime, 5) + " ms");
  1219. }
  1220. uix.time = function (force) {
  1221.     if (force || uix.pfLog) {
  1222.         if (typeof(window.performance) === "undefined") return Date.now();
  1223.         return window.performance.now ? (performance.now() + performance.timing.navigationStart) : Date.now();
  1224.     }
  1225.     return null;
  1226. }
  1227. XenForo.AttributionLink = function ($link) {
  1228.     $link.click(function (e) {
  1229.         if ($(this.hash).length) {
  1230.             try {
  1231.                 var hash = this.hash, top = $(this.hash).offset().top - uix.sticky.getOffset($(this.hash).offset().top),
  1232.                     scroller = XenForo.getPageScrollTagName();
  1233.                 if ("pushState" in window.history) {
  1234.                     window.history.pushState({}, '', window.location.toString().replace(/#.*$/, '') + hash);
  1235.                 }
  1236.                 $(scroller).animate({scrollTop: top}, XenForo.speed.normal, 'swing', function () {
  1237.                     if (!window.history.pushState) {
  1238.                         window.location.hash = hash;
  1239.                     }
  1240.                 });
  1241.             } catch (e) {
  1242.                 window.location.hash = this.hash;
  1243.             }
  1244.             e.preventDefault();
  1245.         }
  1246.     });
  1247. };
  1248. XenForo.QuickReply = function ($form) {
  1249.     if ($('#messageList').length == 0) {
  1250.         return console.error('Quick Reply not possible for %o, no #messageList found.', $form);
  1251.     }
  1252.     var $lastDateInput = $('input[name="last_date"]', $form);
  1253.     if ($lastDateInput.data('load-value')) {
  1254.         $lastDateInput.val(Math.max($lastDateInput.val(), $lastDateInput.data('load-value')));
  1255.     }
  1256.     var submitEnableCallback = XenForo.MultiSubmitFix($form);
  1257.     this.scrollAndFocus = function () {
  1258.         $(document).scrollTop($form.offset().top - uix.sticky.getOffset($form.offset().top));
  1259.         var ed = XenForo.getEditorInForm($form);
  1260.         if (!ed) {
  1261.             return false;
  1262.         }
  1263.         if (ed.$editor) {
  1264.             ed.focus(true);
  1265.         } else {
  1266.             ed.focus();
  1267.         }
  1268.         return this;
  1269.     };
  1270.     $form.data('QuickReply', this).bind({
  1271.         AutoValidationBeforeSubmit: function (e) {
  1272.             if ($(e.clickedSubmitButton).is('input[name="more_options"]')) {
  1273.                 e.preventDefault();
  1274.                 e.returnValue = true;
  1275.             }
  1276.         }, AutoValidationComplete: function (e) {
  1277.             if (e.ajaxData._redirectTarget) {
  1278.                 window.location = e.ajaxData._redirectTarget;
  1279.             }
  1280.             $('input[name="last_date"]', $form).val(e.ajaxData.lastDate);
  1281.             if (submitEnableCallback) {
  1282.                 submitEnableCallback();
  1283.             }
  1284.             $form.find('input:submit').blur();
  1285.             new XenForo.ExtLoader(e.ajaxData, function () {
  1286.                 $('#messageList').find('.messagesSinceReplyingNotice').remove();
  1287.                 $(e.ajaxData.templateHtml).each(function () {
  1288.                     if (this.tagName) {
  1289.                         $(this).xfInsert('appendTo', $('#messageList'));
  1290.                     }
  1291.                 });
  1292.             });
  1293.             var $textarea = $('#QuickReply').find('textarea');
  1294.             $textarea.val('');
  1295.             var ed = $textarea.data('XenForo.BbCodeWysiwygEditor');
  1296.             if (ed) {
  1297.                 ed.resetEditor(null, true);
  1298.             }
  1299.             $form.trigger('QuickReplyComplete');
  1300.             return false;
  1301.         }, BbCodeWysiwygEditorAutoSaveComplete: function (e) {
  1302.             var $messageList = $('#messageList'), $notice = $messageList.find('.messagesSinceReplyingNotice');
  1303.             if (e.ajaxData.newPostCount && e.ajaxData.templateHtml) {
  1304.                 if ($notice.length) {
  1305.                     $notice.remove();
  1306.                     $(e.ajaxData.templateHtml).appendTo($messageList).show().xfActivate();
  1307.                 } else {
  1308.                     $(e.ajaxData.templateHtml).xfInsert('appendTo', $messageList);
  1309.                 }
  1310.             } else {
  1311.                 $notice.remove();
  1312.             }
  1313.         }
  1314.     });
  1315. };
  1316. uix.init.sticky = function () {
  1317.     uix.sticky.set({
  1318.         betaMode: uix.betaMode,
  1319.         pfLog: uix.pfLog,
  1320.         minWidthDefault: uix.stickyNavigation_minWidth,
  1321.         maxWidthDefault: uix.stickyNavigation_maxWidth,
  1322.         minHeightDefault: uix.stickyNavigation_minHeight,
  1323.         maxHeightDefault: uix.stickyNavigation_maxHeight,
  1324.         stickyMinPos: uix.stickyGlobalMinimumPosition,
  1325.         postAddFunc: function () {
  1326.             window.requestAnimationFrame(uix.init.fixScrollLocation);
  1327.         },
  1328.         postStickFunc: function (eles) {
  1329.             window.requestAnimationFrame(function () {
  1330.                 if (typeof(eles) !== "undefined" && eles.indexOf("navigation") > -1) {
  1331.                     uix.navTabs();
  1332.                 }
  1333.                 uix.hideDropdowns.hide();
  1334.             })
  1335.         },
  1336.         postUnstickFunc: function (eles) {
  1337.             window.requestAnimationFrame(function () {
  1338.                 if (typeof(eles) !== "undefined" && eles.indexOf("navigation") > -1) uix.navTabs();
  1339.                 if (uix.enableBorderCheck) {
  1340.                     uix.checkRadius.check();
  1341.                 }
  1342.                 uix.hideDropdowns.hide();
  1343.             })
  1344.         },
  1345.         postDelayUnstickFunc: function () {
  1346.             if (uix.sidebarSticky.running) uix.sidebarSticky.check();
  1347.             if (uix.enableBorderCheck) {
  1348.                 window.setTimeout(function () {
  1349.                     window.requestAnimationFrame(function () {
  1350.                         uix.checkRadius.check();
  1351.                     })
  1352.                 }, 100);
  1353.             }
  1354.             uix.slidingSidebar = true;
  1355.             uix.hideDropdowns.hide();
  1356.         },
  1357.         preDelayUnstickFunc: function () {
  1358.             if (uix.elm.sidebar.length && uix.stickySidebar && uix.sidebarSticky.innerWrapper) {
  1359.                 if (uix.sidebarSticky.bottomFixed == 0) {
  1360.                     uix.sidebarSticky.innerWrapper.css({transition: 'top 0.2s'});
  1361.                 } else {
  1362.                     uix.sidebarSticky.innerWrapper.css({transition: 'top 0s'});
  1363.                     uix.slidingSidebar = false;
  1364.                 }
  1365.             }
  1366.             uix.sidebarSticky.check();
  1367.         }
  1368.     });
  1369.     var stickySel = $('.stickyTop')
  1370.     for (var i = 0, len = stickySel.length; i < len; i++) {
  1371.         var item = "#" + stickySel[i].id
  1372.         if (uix.stickyItems[item] !== undefined && uix.sticky.hasItem(item) == false) uix.sticky.add(item, uix.stickyItems[item].normalHeight, uix.stickyItems[item].stickyHeight, uix.stickyItems[item].options);
  1373.     }
  1374.     uix.sticky.initItemsAdded();
  1375. }
  1376. uix.sticky = {
  1377.     items: [],
  1378.     allInitItemsAdded: false,
  1379.     stickyHeight: 0,
  1380.     fullStickyHeight: 0,
  1381.     downStickyHeight: 0,
  1382.     stickyElmsHeight: 0,
  1383.     pfLog: false,
  1384.     betaMode: false,
  1385.     running: false,
  1386.     stickyLastBottom: 0,
  1387.     lastScrollTop: 0,
  1388.     scrollStart: 0,
  1389.     scrollDistance: 0,
  1390.     scrollDirection: "start",
  1391.     scrollClass: "",
  1392.     scrollLastClass: "",
  1393.     preventStickyTop: false,
  1394.     stickyMinPos: 350,
  1395.     stickyOffsetDist: 0,
  1396.     stickyMinDist: 10,
  1397.     scrollDetectorRunning: false,
  1398.     scrollTop: window.scrollY || document.documentElement.scrollTop,
  1399.     html: $('html'),
  1400.     needsInit: true,
  1401.     windowWidth: 0,
  1402.     windowHeight: 0,
  1403.     minWidthDefault: 0,
  1404.     maxWidthDefault: 999999,
  1405.     minHeightDefault: 0,
  1406.     maxHeightDefault: 999999,
  1407.     noSubEle: 0,
  1408.     postAddFunc: function () {
  1409.     },
  1410.     postStickFunc: function () {
  1411.     },
  1412.     postUnstickFunc: function () {
  1413.     },
  1414.     postDelayUnstickFunc: function () {
  1415.     },
  1416.     preDelayUnstickFunc: function () {
  1417.     },
  1418.     set: function (o) {
  1419.         if (o !== undefined) {
  1420.             if (o.betaMode !== undefined) uix.sticky.betaMode = o.betaMode;
  1421.             if (o.pfLog !== undefined) uix.sticky.pfLog = o.pfLog;
  1422.             if (o.stickyMinPos !== undefined) uix.sticky.stickyMinPos = o.stickyMinPos;
  1423.             if (o.stickyMinDist !== undefined) uix.sticky.stickyMinDist = o.stickyMinDist;
  1424.             if (o.minWidthDefault !== undefined) uix.sticky.minWidthDefault = o.minWidthDefault;
  1425.             if (o.maxWidthDefault !== undefined) uix.sticky.maxWidthDefault = o.maxWidthDefault;
  1426.             if (o.minHeightDefault !== undefined) uix.sticky.minHeightDefault = o.minHeightDefault;
  1427.             if (o.maxHeightDefault !== undefined) uix.sticky.maxHeightDefault = o.maxHeightDefault;
  1428.             if (o.postAddFunc !== undefined) uix.sticky.postAddFunc = o.postAddFunc;
  1429.             if (o.postStickFunc !== undefined) uix.sticky.postStickFunc = o.postStickFunc;
  1430.             if (o.postUnstickFunc !== undefined) uix.sticky.postUnstickFunc = o.postUnstickFunc;
  1431.             if (o.postDelayUnstickFunc !== undefined) uix.sticky.postDelayUnstickFunc = o.postDelayUnstickFunc;
  1432.             if (o.preDelayUnstickFunc !== undefined) uix.sticky.preDelayUnstickFunc = o.preDelayUnstickFunc;
  1433.         }
  1434.     },
  1435.     init: function () {
  1436.         uix.sticky.viewport();
  1437.         uix.sticky.needsInit = false;
  1438.     },
  1439.     initItemsAdded: function () {
  1440.         var us = uix.sticky, pfTime = uix.time();
  1441.         uix.sticky.allInitItemsAdded = true;
  1442.         for (var i = 0, len = us.items.length; i < len; i++) {
  1443.             us.checkSize(i);
  1444.         }
  1445.         uix.sticky.running = true;
  1446.         us.check();
  1447.         us.postAddFunc();
  1448.         uix.tStamp("UIX.sticky.initItemsAdded", 2, pfTime)
  1449.     },
  1450.     add: function (itemName, normalHeight, stickyHeight, o) {
  1451.         var us = uix.sticky, pfTime = uix.time();
  1452.         if (us.needsInit) us.init();
  1453.         var item = {
  1454.             name: itemName,
  1455.             elm: $(itemName),
  1456.             docElm: document.getElementById(itemName.replace('#', '')),
  1457.             state: 0,
  1458.             transitionState: 0,
  1459.             subElement: null,
  1460.             subCheckSize: 0,
  1461.             subNormalHeight: 0,
  1462.             subStickyHeight: 0,
  1463.             subStickyHide: false,
  1464.             subStickyHideClassAdded: false,
  1465.             itemFromWindowTop: null,
  1466.             wrapperFromWindowTop: null,
  1467.         };
  1468.         item.offset = item.elm.offset();
  1469.         if (o === undefined) {
  1470.             item.maxWidth = us.maxWidthDefault;
  1471.             item.minWidth = us.minWidthDefault;
  1472.             item.maxHeight = us.maxHeightDefault;
  1473.             item.minHeight = us.minHeightDefault;
  1474.             item.scrollSticky = 1;
  1475.         } else {
  1476.             item.maxWidth = (o.maxWidth === undefined ? us.maxWidthDefault : o.maxWidth);
  1477.             item.minWidth = (o.minWidth === undefined ? us.minWidthDefault : o.minWidth);
  1478.             item.maxHeight = (o.maxHeight === undefined ? us.maxHeightDefault : o.maxHeight);
  1479.             item.minHeight = (o.minHeight === undefined ? us.minHeightDefault : o.minHeight);
  1480.             item.scrollSticky = (o.scrollSticky === undefined ? 1 : o.scrollSticky);
  1481.             item.subElement = (o.subElement === undefined ? null : $(o.subElement));
  1482.             item.subNormalHeight = (o.subNormalHeight === undefined ? 0 : o.subNormalHeight);
  1483.             item.subStickyHeight = (o.subStickyHeight === undefined ? 0 : o.subStickyHeight);
  1484.             item.subStickyHide = (o.subStickyHide === undefined ? false : o.subStickyHide);
  1485.         }
  1486.         if (item.scrollSticky) us.scrollDetectorRunning = true;
  1487.         if (o.subStickyHide) item.subStickyHeight = 0;
  1488.         item.normalHeight = normalHeight + item.subNormalHeight;
  1489.         item.stickyHeight = stickyHeight + item.subStickyHeight;
  1490.         uix.sticky.fullStickyHeight += item.stickyHeight;
  1491.         if (item.scrollSticky == 0) uix.sticky.downStickyHeight += item.stickyHeight;
  1492.         if (item.normalHeight > item.stickyHeight) {
  1493.             uix.sticky.stickyOffsetDist += item.normalHeight;
  1494.         } else {
  1495.             uix.sticky.stickyOffsetDist += item.stickyHeight;
  1496.         }
  1497.         uix.sticky.stickyLastBottom = item.offset.top + item.elm.outerHeight();
  1498.         item.wrapper = item.elm.find('.sticky_wrapper');
  1499.         uix.sticky.items.push(item);
  1500.         if (us.allInitItemsAdded) us.initItemsAdded();
  1501.         uix.tStamp("UIX.sticky.add " + itemName, 2, pfTime)
  1502.     },
  1503.     hasItem: function (itemName) {
  1504.         var usi = uix.sticky.items;
  1505.         for (var x = 0, len = usi.length; x < len; x++) {
  1506.             if (usi[x].name == itemName) return true;
  1507.         }
  1508.         return false;
  1509.     },
  1510.     remove: function (itemName) {
  1511.         var us = uix.sticky;
  1512.         for (var x = 0, len = us.items.length; x < len; x++) {
  1513.             if (us.items[x].name == itemName) {
  1514.                 uix.fullStickyHeight -= us.items[x].stickyHeight;
  1515.                 uix.sticky.items.splice(x, 1);
  1516.             }
  1517.         }
  1518.         us.check();
  1519.     },
  1520.     stick: function (index, currentHeight) {
  1521.         var us = uix.sticky, currentItem = us.items[index], target = currentItem.elm,
  1522.             innerWrapper = currentItem.wrapper, normalHeight = currentItem.normalHeight, pfTime = uix.time();
  1523.         $('.lastSticky').removeClass('lastSticky');
  1524.         target.addClass('lastSticky').removeClass('inactiveSticky').addClass('activeSticky').css('height', normalHeight);
  1525.         if (currentItem.scrollSticky) {
  1526.             innerWrapper.css('top', (currentHeight - us.stickyOffsetDist));
  1527.         } else {
  1528.             innerWrapper.css({'top': currentHeight,});
  1529.         }
  1530.         uix.sticky.items[index].state = 1;
  1531.         uix.tStamp("UIX.sticky.stick " + currentItem.name, 2, pfTime)
  1532.     },
  1533.     unstick: function (index) {
  1534.         var us = uix.sticky, currentItem = us.items[index], target = currentItem.elm,
  1535.             innerWrapper = currentItem.wrapper, stickyHeight = currentItem.stickyHeight, pfTime = uix.time();
  1536.         if (false) {
  1537.             innerWrapper.css('position', 'static')
  1538.         } else {
  1539.             target.addClass('inactiveSticky').removeClass('lastSticky').removeClass('activeSticky').css({'height': '',});
  1540.             innerWrapper.css({'top': '',});
  1541.             uix.sticky.items[index].state = 0;
  1542.             if (currentItem.state != 2) {
  1543.                 $('.activeSticky').last().addClass('lastSticky');
  1544.             }
  1545.         }
  1546.         uix.tStamp("UIX.sticky.unstick " + currentItem.name, 2, pfTime)
  1547.     },
  1548.     delayUnstick: function () {
  1549.         var us = uix.sticky, unstickDone = false;
  1550.         for (var x = 0, len = us.items.length; x < len; x++) {
  1551.             if (us.items[x].state == 2) {
  1552.                 us.items[x].wrapper.css({
  1553.                     'transform': '',
  1554.                     '-webkit-transform': '',
  1555.                     '-ms-transform': '',
  1556.                     '-ms-transform': '',
  1557.                     '-moz-transform': '',
  1558.                 })
  1559.                 uix.sticky.items[x].transitionState = 0;
  1560.                 us.unstick(x);
  1561.                 unstickDone = true;
  1562.             }
  1563.         }
  1564.         if (unstickDone) {
  1565.             $('.activeSticky').last().addClass('lastSticky');
  1566.             us.postDelayUnstickFunc();
  1567.         }
  1568.     },
  1569.     delayStick: function () {
  1570.         var us = uix.sticky;
  1571.         for (var x = 0, len = us.items.length; x < len; x++) {
  1572.             if (us.items[x].state == 3) {
  1573.                 us.items[x].wrapper.css({
  1574.                     'transform': 'translate3d(0, ' + us.stickyOffsetDist + 'px, 0)',
  1575.                     '-webkit-transform': 'translate3d(0, ' + uix.sticky.stickyOffsetDist + 'px, 0)',
  1576.                     '-ms-transform': 'translate3d(0, ' + us.stickyOffsetDist + 'px, 0)',
  1577.                     '-ms-transform': 'translate3d(0, ' + us.stickyOffsetDist + 'px, 0)',
  1578.                     '-moz-transform': 'translate3d(0, ' + us.stickyOffsetDist + 'px, 0)',
  1579.                 });
  1580.                 uix.sticky.items[x].transitionState = 2;
  1581.                 uix.sticky.items[x].state = 1;
  1582.             }
  1583.         }
  1584.     },
  1585.     checkGet: function () {
  1586.         var us = uix.sticky;
  1587.         if (us.scrollDetectorRunning) us.scrollDetectorGet();
  1588.         for (var x = 0, len = us.items.length; x < len; x++) {
  1589.             var currentItem = us.items[x];
  1590.             if (currentItem.enabled) {
  1591.                 if (typeof(currentItem.wrapper[0]) !== "undefined") {
  1592.                     uix.sticky.items[x].itemFromWindowTop = currentItem.docElm.getBoundingClientRect().top;
  1593.                     uix.sticky.items[x].wrapperFromWindowTop = currentItem.wrapper[0].getBoundingClientRect().top;
  1594.                 }
  1595.             }
  1596.         }
  1597.     },
  1598.     checkSet: function () {
  1599.         var us = uix.sticky, currentStickyHeight = 0, needsDelayStick = false, needsDelayUnstick = false,
  1600.             needsPostStick = false, needsPostUnstick = false, newStickEles = "", newUnstickEles = "";
  1601.         if (us.scrollDetectorRunning) us.scrollDetectorSet();
  1602.         for (var x = 0, len = us.items.length; x < len; x++) {
  1603.             var currentItem = us.items[x];
  1604.             if (currentItem.enabled) {
  1605.                 var itemFromWindowTop = currentItem.itemFromWindowTop, innerWrapper = currentItem.wrapper,
  1606.                     wrapperFromWindowTop = currentItem.wrapperFromWindowTop,
  1607.                     wrapperFromWindowTopInit = wrapperFromWindowTop;
  1608.                 if (wrapperFromWindowTop < currentStickyHeight) wrapperFromWindowTop = currentStickyHeight;
  1609.                 if (us.scrollDetectorRunning && currentItem.scrollSticky == 1) {
  1610.                     if (us.scrollTop <= us.stickyMinPos) {
  1611.                         us.delayUnstick();
  1612.                         if (currentItem.transitionState != 0) {
  1613.                             innerWrapper.css({
  1614.                                 'transform': '',
  1615.                                 '-webkit-transform': '',
  1616.                                 '-ms-transform': '',
  1617.                                 '-ms-transform': '',
  1618.                                 '-moz-transform': '',
  1619.                             });
  1620.                             uix.sticky.items[x].transitionState = 0;
  1621.                         }
  1622.                     } else if (us.scrollTop > us.stickyMinPos && us.scrollDirection == "down" && (itemFromWindowTop < wrapperFromWindowTop && us.scrollDistance > us.stickyMinDist) && currentItem.transitionState != 1) {
  1623.                         innerWrapper.css({
  1624.                             'transform': 'translate3d(0, 0, 0)',
  1625.                             '-webkit-transform': 'translate3d(0, 0, 0)',
  1626.                             '-ms-transform': 'translate3d(0, 0, 0)',
  1627.                             '-ms-transform': 'translate3d(0, 0, 0)',
  1628.                             '-moz-transform': 'translate3d(0, 0, 0)',
  1629.                         });
  1630.                         uix.sticky.items[x].transitionState = 1;
  1631.                     }
  1632.                     if (currentItem.state == 1) {
  1633.                         if ((itemFromWindowTop > wrapperFromWindowTop) || (us.scrollDirection == "down" && us.scrollDistance > us.stickyMinDist) || us.scrollTop <= us.stickyMinPos) {
  1634.                             innerWrapper.css({
  1635.                                 'transform': 'translate3d(0, 0, 0)',
  1636.                                 '-webkit-transform': 'translate3d(0, 0, 0)',
  1637.                                 '-ms-transform': 'translate3d(0, 0, 0)',
  1638.                                 '-ms-transform': 'translate3d(0, 0, 0)',
  1639.                                 '-moz-transform': 'translate3d(0, 0, 0)',
  1640.                             });
  1641.                             uix.sticky.items[x].transitionState = 1;
  1642.                             uix.sticky.items[x].state = 2;
  1643.                             needsDelayUnstick = true;
  1644.                             us.subElementCheck(x, currentStickyHeight, itemFromWindowTop);
  1645.                         } else {
  1646.                             us.subElementCheck(x, currentStickyHeight, itemFromWindowTop);
  1647.                             currentStickyHeight += currentItem.stickyHeight;
  1648.                         }
  1649.                     } else if (currentItem.state == 0 && us.preventStickyTop == false) {
  1650.                         if (wrapperFromWindowTopInit - currentStickyHeight <= 0 && us.scrollDirection == "up" && us.scrollDistance > us.stickyMinDist && us.scrollTop > us.stickyMinPos) {
  1651.                             us.stick(x, currentStickyHeight);
  1652.                             uix.sticky.items[x].state = 3;
  1653.                             needsDelayStick = true;
  1654.                             currentStickyHeight += currentItem.stickyHeight;
  1655.                         }
  1656.                     }
  1657.                 } else {
  1658.                     if (currentItem.state == 1) {
  1659.                         if (itemFromWindowTop > wrapperFromWindowTop) {
  1660.                             us.unstick(x);
  1661.                             needsPostUnstick = true;
  1662.                             newUnstickEles += "," + currentItem.name;
  1663.                             us.subElementCheck(x, currentStickyHeight, itemFromWindowTop);
  1664.                         } else {
  1665.                             us.subElementCheck(x, currentStickyHeight, itemFromWindowTop);
  1666.                             currentStickyHeight += currentItem.stickyHeight;
  1667.                         }
  1668.                     } else {
  1669.                         if (wrapperFromWindowTopInit - currentStickyHeight <= 0) {
  1670.                             us.stick(x, currentStickyHeight);
  1671.                             needsPostStick = true;
  1672.                             newStickEles += "," + currentItem.name;
  1673.                             us.subElementCheck(x, currentStickyHeight, itemFromWindowTop);
  1674.                             currentStickyHeight += currentItem.stickyHeight;
  1675.                         }
  1676.                     }
  1677.                 }
  1678.             } else {
  1679.                 if (currentItem.state == 1) {
  1680.                     us.unstick(x);
  1681.                 }
  1682.             }
  1683.         }
  1684.         ;uix.sticky.stickyHeight = currentStickyHeight;
  1685.         if (needsPostStick) {
  1686.             us.postStickFunc(newStickEles);
  1687.         }
  1688.         if (needsPostUnstick) {
  1689.             us.postUnstickFunc(newUnstickEles);
  1690.         }
  1691.         if (needsDelayUnstick) {
  1692.             us.preDelayUnstickFunc();
  1693.             window.setTimeout(function () {
  1694.                 window.requestAnimationFrame(function () {
  1695.                     us.delayUnstick();
  1696.                 })
  1697.             }, 210);
  1698.         } else if (needsDelayStick) {
  1699.             us.delayStick();
  1700.         }
  1701.         if (uix.smallLogo.running) uix.smallLogo.set();
  1702.     },
  1703.     check: function () {
  1704.         var us = uix.sticky, pfTime = uix.time();
  1705.         us.checkGet();
  1706.         us.checkSet();
  1707.         uix.tStamp("UIX.sticky.check", 2, pfTime)
  1708.     },
  1709.     subElementCheck: function (x, currentStickyHeight, itemFromWindowTop) {
  1710.         var us = uix.sticky, currentItem = us.items[x];
  1711.         if (currentItem.subElement !== null && currentItem.subNormalHeight > 0 && currentItem.subStickyHide) {
  1712.             if (us.scrollDetectorRunning && currentItem.scrollSticky == 1) {
  1713.                 if (currentItem.state == 1 && currentItem.subStickyHideClassAdded == false) {
  1714.                     uix.sticky.items[x].subStickyHideClassAdded = true;
  1715.                     currentItem.elm.addClass('uix_hideSubElement');
  1716.                 } else if (currentItem.state != 1 && currentItem.subStickyHideClassAdded) {
  1717.                     uix.sticky.items[x].subStickyHideClassAdded = false;
  1718.                     currentItem.elm.removeClass('uix_hideSubElement');
  1719.                     us.updateNavLinks(x);
  1720.                 }
  1721.             } else {
  1722.                 if (currentItem.state == 1) {
  1723.                     if ((-1 * itemFromWindowTop) + currentStickyHeight > currentItem.subNormalHeight) {
  1724.                         if (currentItem.subStickyHideClassAdded == false) {
  1725.                             uix.sticky.items[x].subStickyHideClassAdded = true;
  1726.                             currentItem.elm.addClass('uix_hideSubElement');
  1727.                         }
  1728.                     } else {
  1729.                         if (currentItem.subStickyHideClassAdded) {
  1730.                             uix.sticky.items[x].subStickyHideClassAdded = false;
  1731.                             currentItem.elm.removeClass('uix_hideSubElement');
  1732.                             us.updateNavLinks(x);
  1733.                         }
  1734.                     }
  1735.                 } else {
  1736.                     uix.sticky.items[x].subStickyHideClassAdded = false;
  1737.                     currentItem.elm.removeClass('uix_hideSubElement');
  1738.                     us.updateNavLinks(x);
  1739.                 }
  1740.             }
  1741.         }
  1742.     },
  1743.     updateNavLinks: function (x) {
  1744.         var us = uix.sticky;
  1745.         if (us.windowWidth != us.items[x].subCheckSize) {
  1746.             uix.sticky.items[x].subCheckSize = us.windowWidth;
  1747.             window.setTimeout(function () {
  1748.                 window.requestAnimationFrame(function () {
  1749.                     XenForo.updateVisibleNavigationLinks();
  1750.                 })
  1751.             }, 100)
  1752.         }
  1753.     },
  1754.     resize: function () {
  1755.         var us = uix.sticky;
  1756.         us.viewport();
  1757.         for (var x = 0, len = us.items.length; x < len; x++) {
  1758.             us.checkSize(x)
  1759.         }
  1760.         us.update();
  1761.     },
  1762.     viewport: function () {
  1763.         uix.sticky.windowWidth = uix.windowWidth;
  1764.         uix.sticky.windowHeight = uix.windowHeight;
  1765.     },
  1766.     checkSize: function (x) {
  1767.         var us = uix.sticky, item = us.items[x], windowHeight = us.windowHeight, windowWidth = us.windowWidth;
  1768.         if (windowHeight > item.minHeight && windowHeight <= item.maxHeight && windowWidth > item.minWidth && windowWidth <= item.maxWidth) {
  1769.             uix.sticky.items[x].enabled = true;
  1770.         } else {
  1771.             uix.sticky.items[x].enabled = false;
  1772.         }
  1773.     },
  1774.     update: function () {
  1775.         var us = uix.sticky, items = us.items;
  1776.         currentTop = 0;
  1777.         us.check();
  1778.         for (var x = 0, len = items.length; x < len; x++) {
  1779.             var item = items[x];
  1780.             if (item.state == 1 && item.enabled) {
  1781.                 innerWrapper = item.wrapper;
  1782.                 if (item.scrollSticky) {
  1783.                     innerWrapper.css('top', (currentTop - us.stickyOffsetDist));
  1784.                 } else {
  1785.                     innerWrapper.css({'top': currentTop,});
  1786.                 }
  1787.                 currentTop += item.stickyHeight;
  1788.             }
  1789.         }
  1790.         us.check();
  1791.     },
  1792.     getState: function (itemName) {
  1793.         var usi = uix.sticky.items;
  1794.         for (var x = 0, len = usi.length; x < len; x++) {
  1795.             if (usi[x].name == itemName) return usi[x].state;
  1796.         }
  1797.         return -1;
  1798.     },
  1799.     getItemIndex: function (itemName) {
  1800.         var usi = uix.sticky.items;
  1801.         for (var x = 0, len = usi.length; x < len; x++) {
  1802.             if (usi[x].name == itemName) return x;
  1803.         }
  1804.         return -1;
  1805.     },
  1806.     updateScrollTop: function () {
  1807.         uix.sticky.scrollTop = window.scrollY || document.documentElement.scrollTop;
  1808.         return uix.sticky.scrollTop;
  1809.     },
  1810.     getOffset: function (desiredPos) {
  1811.         var us = uix.sticky;
  1812.         if (us.scrollDetectorRunning == false) return us.fullStickyHeight + uix.globalPadding;
  1813.         us.updateScrollTop();
  1814.         if (desiredPos < us.scrollTop) return us.fullStickyHeight + uix.globalPadding;
  1815.         return uix.globalPadding;
  1816.     },
  1817.     scrollDetectorGet: function () {
  1818.         var us = uix.sticky;
  1819.         us.updateScrollTop();
  1820.         direction = "";
  1821.         if (us.scrollDirection == 'start') uix.sticky.scrollStart = us.scrollTop;
  1822.         if (us.scrollTop > us.lastScrollTop) {
  1823.             if (us.scrollDirection == 'up') uix.sticky.scrollStart = us.lastScrollTop;
  1824.             direction = 'down';
  1825.             uix.sticky.scrollClass = "scrollDirection-down";
  1826.         } else if (us.scrollTop < us.lastScrollTop) {
  1827.             if (us.scrollDirection == 'down') uix.sticky.scrollStart = us.lastScrollTop;
  1828.             direction = 'up';
  1829.             uix.sticky.scrollClass = "scrollDirection-up";
  1830.         }
  1831.         uix.sticky.scrollDistance = Math.abs(us.scrollTop - us.scrollStart);
  1832.         uix.sticky.scrollDirection = direction;
  1833.         uix.sticky.lastScrollTop = us.scrollTop;
  1834.     },
  1835.     scrollDetectorSet: function () {
  1836.         var us = uix.sticky;
  1837.         if (us.scrollClass !== us.scrollLastClass) {
  1838.             us.html.removeClass(us.scrollLastClass).addClass(us.scrollClass);
  1839.             uix.sticky.scrollLastClass = us.scrollClass;
  1840.         }
  1841.     },
  1842.     scrollDetector: function () {
  1843.         var us = uix.sticky, pfTime = uix.time();
  1844.         us.scrollDetectorGet();
  1845.         us.scrollDetectorSet();
  1846.         uix.tStamp("UIX.sticky.scrollDetector", 2, pfTime)
  1847.     },
  1848. };
  1849. uix.sidebarSticky = {
  1850.     running: false, hasTransition: true, state: 0, bottomFixed: 0, hasSidebar: false, init: function () {
  1851.         var us = uix.sidebarSticky, d = document, B = d.body, H = d.documentElement, docHeight = d.height,
  1852.             elm = uix.elm.sidebar;
  1853.         uix.sidebarSticky.innerWrapper = elm.find('.inner_wrapper');
  1854.         uix.sidebarSticky.running = true;
  1855.         us.resize();
  1856.         window.setInterval(function () {
  1857.             window.requestAnimationFrame(function () {
  1858.                 if (us.running && uix.initDone && uix.sidebarVisible == 1) {
  1859.                     var documentHeight, sidebarHeight, sidebarEleHeight = elm.outerHeight(),
  1860.                         wrapperHeight = us.innerWrapper.outerHeight();
  1861.                     if (typeof docHeight !== 'undefined') {
  1862.                         documentHeight = document.height
  1863.                     } else {
  1864.                         documentHeight = Math.max(B.scrollHeight, B.offsetHeight, H.clientHeight, H.scrollHeight, H.offsetHeight);
  1865.                     }
  1866.                     if (sidebarEleHeight > wrapperHeight) {
  1867.                         sidebarHeight = sidebarEleHeight;
  1868.                     } else {
  1869.                         sidebarHeight = wrapperHeight;
  1870.                     }
  1871.                     if (documentHeight != uix.documentHeight || sidebarHeight != us.sidebarHeight) {
  1872.                         uix.documentHeight = documentHeight;
  1873.                         us.update();
  1874.                     }
  1875.                 }
  1876.             });
  1877.         }, 1000);
  1878.     }, resize: function () {
  1879.         var us = uix.sidebarSticky;
  1880.         if (uix.elm.sidebar.length && uix.stickySidebar && uix.sidebarVisible == 1) {
  1881.             if (uix.windowWidth > uix.sidebarMaxResponsiveWidth && us.running) {
  1882.                 uix.sidebarSticky.state = -1;
  1883.                 uix.sidebarSticky.bottomFixed = 0;
  1884.                 us.update();
  1885.                 if (us.state == 1) {
  1886.                     us.innerWrapper.css({left: us.sidebarFromLeft});
  1887.                 } else {
  1888.                     us.innerWrapper.css('left', '')
  1889.                 }
  1890.             } else if (uix.windowWidth > uix.sidebarMaxResponsiveWidth && !us.running && !uix.stickyForceDisable) {
  1891.                 us.init();
  1892.             } else {
  1893.                 us.reset();
  1894.             }
  1895.         }
  1896.     }, update: function () {
  1897.         var us = uix.sidebarSticky, elm = uix.elm.sidebar;
  1898.         uix.sidebarSticky.hasSidebar = elm.length;
  1899.         if (us.hasSidebar && uix.stickySidebar && us.running) {
  1900.             var pfTime = uix.time(), offset = elm.offset(), sidebarHeight = elm.outerHeight(),
  1901.                 wrapperHeight = us.innerWrapper.outerHeight();
  1902.             uix.sidebarSticky.sidebarOffset = offset;
  1903.             uix.sidebarSticky.sidebarFromLeft = offset.left;
  1904.             uix.sidebarSticky.mainContainerHeight = uix.elm.mainContainer.outerHeight();
  1905.             if (sidebarHeight > wrapperHeight) {
  1906.                 uix.sidebarSticky.sidebarHeight = sidebarHeight;
  1907.             } else {
  1908.                 uix.sidebarSticky.sidebarHeight = wrapperHeight;
  1909.             }
  1910.             uix.sidebarSticky.bottomLimit = uix.elm.mainContainer.offset().top + us.mainContainerHeight - uix.sidebarStickyBottomOffset;
  1911.             uix.sidebarSticky.maxTop = us.bottomLimit - (offset.top + us.sidebarHeight);
  1912.             us.check();
  1913.             uix.sidebarSticky.innerWrapper.css('width', elm.outerWidth());
  1914.             uix.tStamp("UIX.sidebarSticky.update", 2, pfTime);
  1915.         }
  1916.     }, check: function () {
  1917.         var us = uix.sidebarSticky;
  1918.         if (us.hasSidebar && uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  1919.             var pfTime = uix.time();
  1920.             if (us.mainContainerHeight > us.sidebarHeight) {
  1921.                 var sidebarFromWindowTop = us.sidebarOffset.top - (uix.sticky.stickyHeight + uix.scrollTop),
  1922.                     bottomLimitFromWindowTop = us.bottomLimit - uix.scrollTop;
  1923.                 if (us.bottomFixed != 1 && bottomLimitFromWindowTop - uix.sticky.stickyHeight <= us.sidebarHeight + uix.globalPadding) {
  1924.                     us.fixBottom()
  1925.                 } else if (us.state != 0 && sidebarFromWindowTop - uix.globalPadding > 0) {
  1926.                     us.unstick();
  1927.                 } else if (us.state != 1 && bottomLimitFromWindowTop - uix.sticky.stickyHeight > us.sidebarHeight + uix.globalPadding && sidebarFromWindowTop - uix.globalPadding <= 0) {
  1928.                     us.stick();
  1929.                 }
  1930.             } else if (us.running) {
  1931.                 if (us.state != 0) us.unstick();
  1932.             }
  1933.             uix.tStamp("UIX.sidebarSticky.check", 2, pfTime);
  1934.         }
  1935.     }, stick: function () {
  1936.         var us = uix.sidebarSticky;
  1937.         if (us.hasSidebar && uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  1938.             var pfTime = uix.time();
  1939.             uix.elm.sidebar.addClass('sticky');
  1940.             uix.sidebarSticky.state = 1;
  1941.             uix.sidebarSticky.bottomFixed = 0;
  1942.             if (!uix.slidingSidebar && us.hasTransition) {
  1943.                 uix.sidebarSticky.hasTransition = false;
  1944.                 uix.sidebarSticky.innerWrapper.css({transition: 'top 0.0s'});
  1945.             }
  1946.             uix.sidebarSticky.innerWrapper.css({
  1947.                 top: uix.sticky.stickyHeight + uix.globalPadding,
  1948.                 left: us.sidebarOffset.left,
  1949.             });
  1950.             uix.tStamp("UIX.sidebarSticky.stick", 2, pfTime);
  1951.         }
  1952.     }, unstick: function () {
  1953.         var us = uix.sidebarSticky;
  1954.         if (us.hasSidebar && uix.stickySidebar && us.running) {
  1955.             var pfTime = uix.time();
  1956.             uix.elm.sidebar.removeClass('sticky');
  1957.             uix.sidebarSticky.state = 0;
  1958.             uix.sidebarSticky.bottomFixed = 0;
  1959.             if (uix.slidingSidebar && !us.hasTransition) {
  1960.                 uix.sidebarSticky.hasTransition = true;
  1961.                 uix.sidebarSticky.innerWrapper.css({transition: 'top 0.2s'});
  1962.             } else if (!uix.slidingSidebar && us.hasTransition) {
  1963.                 uix.sidebarSticky.hasTransition = false;
  1964.                 uix.sidebarSticky.innerWrapper.css({transition: 'top 0.0s'});
  1965.             }
  1966.             uix.sidebarSticky.innerWrapper.css({top: '', left: ''});
  1967.             uix.tStamp("UIX.sidebarSticky.unStick", 2, pfTime);
  1968.         }
  1969.     }, fixBottom: function () {
  1970.         var us = uix.sidebarSticky;
  1971.         if (us.hasSidebar && uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  1972.             var pfTime = uix.time();
  1973.             uix.stickySidebar.hasTransition = false;
  1974.             if (uix.sidebarSticky.state == 1) {
  1975.                 uix.elm.sidebar.removeClass('sticky');
  1976.             }
  1977.             uix.sidebarSticky.innerWrapper.css({transition: 'top 0.0s', top: us.maxTop, left: ''});
  1978.             uix.sidebarSticky.state = 2;
  1979.             uix.sidebarSticky.bottomFixed = 1;
  1980.             uix.tStamp("UIX.sidebarSticky.fixBottom", 2, pfTime);
  1981.         }
  1982.     }, reset: function () {
  1983.         var us = uix.sidebarSticky;
  1984.         if (us.hasSidebar && uix.stickySidebar && us.running) {
  1985.             var pfTime = uix.time();
  1986.             us.unstick();
  1987.             uix.sidebarSticky.innerWrapper.css('width', '');
  1988.             uix.sidebarSticky.running = false;
  1989.             uix.tStamp("UIX.sidebarSticky.reset", 2, pfTime);
  1990.         }
  1991.     }
  1992. };
  1993. uix.stickyFooter = {
  1994.     running: false,
  1995.     eleTop: null,
  1996.     contentWrapper: null,
  1997.     eleTopSel: "#uix_stickyFooterSpacer",
  1998.     contentWrapperSel: "#uix_wrapper",
  1999.     state: 0,
  2000.     paddingBottom: 0,
  2001.     minDiff: uix.globalPadding,
  2002.     targetHeight: 0,
  2003.     changeMade: false,
  2004.     init: function () {
  2005.         var us = uix.stickyFooter;
  2006.         uix.stickyFooter.running = true;
  2007.         uix.stickyFooter.eleTop = $(us.eleTopSel);
  2008.         uix.stickyFooter.contentWrapper = $(us.contentWrapperSel)
  2009.         uix.stickyFooter.get();
  2010.     },
  2011.     get: function () {
  2012.         var us = uix.stickyFooter, changeMade = false;
  2013.         if (us.running) {
  2014.             if (us.eleTop.length > 0 && us.contentWrapper.length > 0) {
  2015.                 uix.stickyFooter.paddingBottom = us.contentWrapper.offset().top;
  2016.                 var windowHeight = uix.windowHeight, contentHeight = us.contentWrapper.height(),
  2017.                     heightDiff = windowHeight - contentHeight - us.paddingBottom - us.minDiff,
  2018.                     topHeight = us.eleTop.height(), targetHeight = (topHeight + heightDiff);
  2019.                 if (targetHeight - topHeight > 0) {
  2020.                     uix.stickyFooter.state = 1;
  2021.                 } else if (us.state == 1) {
  2022.                     uix.stickyFooter.state = 0;
  2023.                 }
  2024.                 if (uix.stickyFooter.targetHeight != targetHeight) {
  2025.                     changeMade = true;
  2026.                     uix.stickyFooter.targetHeight = targetHeight;
  2027.                 }
  2028.             }
  2029.             uix.stickyFooter.changeMade = changeMade;
  2030.         }
  2031.     },
  2032.     set: function () {
  2033.         var us = uix.stickyFooter;
  2034.         if (us.changeMade) {
  2035.             uix.stickyFooter.eleTop.css('min-height', (us.targetHeight + us.minDiff) + "px");
  2036.             if (uix.enableBorderCheck) uix.checkRadius.check();
  2037.         }
  2038.     },
  2039.     check: function () {
  2040.         var us = uix.stickyFooter;
  2041.         us.get();
  2042.         us.set();
  2043.     }
  2044. }
  2045. uix.checkRadius = {
  2046.     elms: ["#logoBlock .pageContent", "#content .pageContent", "#userBar .pageContent", "#navigation .pageContent", ".footer .pageContent", "#uix_footer_columns .pageContent", ".footerLegal .pageContent"],
  2047.     elmInfo: [],
  2048.     needsInit: true,
  2049.     wrapperTop: null,
  2050.     needsCheck: false,
  2051.     uixWrapper: null,
  2052.     running: false,
  2053.     init: function () {
  2054.         var uc = uix.checkRadius;
  2055.         for (var i = 0, len = uc.elms.length; i < len; i++) {
  2056.             var element_selector = uc.elms[i], element = $(element_selector), eleLength = element.length;
  2057.             if (eleLength) {
  2058.                 var newEle = {element: element, length: eleLength, lastClass: "", fullWidth: false,}
  2059.                 uix.checkRadius.elmInfo.push(newEle);
  2060.             }
  2061.         }
  2062.         uix.checkRadius.uixWrapper = $("#uix_wrapper");
  2063.         uc.resize();
  2064.         uix.checkRadius.needsInit = false;
  2065.         uix.checkRadius.running = true;
  2066.         uc.check(true);
  2067.     },
  2068.     resize: function () {
  2069.         uix.checkRadius.wrapperTop = uix.checkRadius.uixWrapper.offset().top;
  2070.     },
  2071.     get: function (checkWidth) {
  2072.         if (checkWidth !== true) checkWidth = false;
  2073.         var uc = uix.checkRadius, wrapperTop = uc.wrapperTop, windowWidth = (checkWidth) ? uix.windowWidth : 0;
  2074.         var elmInfoLen = uc.elmInfo.length;
  2075.         for (var i = 0; i < elmInfoLen; i++) {
  2076.             var elm = uc.elmInfo[i].element;
  2077.             if (checkWidth) uix.checkRadius.elmInfo[i].width = elm.outerWidth();
  2078.             uix.checkRadius.elmInfo[i].height = elm.outerHeight();
  2079.             uix.checkRadius.elmInfo[i].topOffset = elm.offset().top;
  2080.             uix.checkRadius.elmInfo[i].topRadius = true;
  2081.             uix.checkRadius.elmInfo[i].bottomRadius = true;
  2082.         }
  2083.     },
  2084.     set: function (checkWidth) {
  2085.         if (checkWidth !== true) checkWidth = false;
  2086.         var uc = uix.checkRadius, wrapperTop = uc.wrapperTop, windowWidth = (checkWidth) ? uix.windowWidth : 0;
  2087.         var elmInfoLen = uc.elmInfo.length;
  2088.         for (var i = 0; i < elmInfoLen; i++) {
  2089.             var elmI = uc.elmInfo[i];
  2090.             if (elmI.length) {
  2091.                 if (checkWidth && elmI.width == windowWidth) {
  2092.                     uix.checkRadius.elmInfo[i].topRadius = false;
  2093.                     uix.checkRadius.elmInfo[i].bottomRadius = false;
  2094.                     uix.checkRadius.elmInfo[i].fullWidth = true;
  2095.                 } else if (elmI.fullWidth) {
  2096.                     uix.checkRadius.elmInfo[i].topRadius = false;
  2097.                     uix.checkRadius.elmInfo[i].bottomRadius = false;
  2098.                 } else {
  2099.                     for (var x = 0; x < elmInfoLen; x++) {
  2100.                         var elmX = uc.elmInfo[x];
  2101.                         if (x != i) {
  2102.                             if (elmX.length) {
  2103.                                 if (Math.abs(elmI.topOffset - (elmX.topOffset + elmX.height)) < 1) uix.checkRadius.elmInfo[i].topRadius = false;
  2104.                                 if (Math.abs((elmI.topOffset + elmI.height) - elmX.topOffset) < 1) uix.checkRadius.elmInfo[i].bottomRadius = false;
  2105.                             }
  2106.                         }
  2107.                     }
  2108.                 }
  2109.                 var newClass = "defaultBorderRadius";
  2110.                 if (elmI.topRadius == false && elmI.bottomRadius == false) {
  2111.                     newClass = "noBorderRadius";
  2112.                 } else if (elmI.topRadius == false) {
  2113.                     newClass = "noBorderRadiusTop";
  2114.                 } else if (elmI.bottomRadius == false) {
  2115.                     newClass = "noBorderRadiusBottom";
  2116.                 }
  2117.                 if (newClass != elmI.lastClass) {
  2118.                     elmI.element.addClass(newClass).removeClass(elmI.lastClass);
  2119.                     uix.checkRadius.elmInfo[i].lastClass = newClass;
  2120.                 }
  2121.             }
  2122.         }
  2123.         if (uc.needsCheck) uix.checkRadius.needsCheck = false;
  2124.     },
  2125.     scheduleCheck: function () {
  2126.         uix.checkRadius.needsCheck = true;
  2127.     },
  2128.     check: function (checkWidth) {
  2129.         var uc = uix.checkRadius, pfTime = uix.time();
  2130.         if (uc.running) {
  2131.             if (checkWidth !== true) checkWidth = false;
  2132.             uc.get(checkWidth);
  2133.             uc.set(checkWidth);
  2134.         }
  2135.         uix.tStamp("UIX.checkRadius.check", 2, pfTime);
  2136.     },
  2137. }
  2138. uix.smallLogo = {
  2139.     needsInit: true,
  2140.     logoTopOffset: 0,
  2141.     logoOuterHeight: 0,
  2142.     stickyWrapper: null,
  2143.     stickyWrapperOffsetTop: 0,
  2144.     stickyWrapperOuter: 0,
  2145.     visible: 0,
  2146.     running: false,
  2147.     init: function () {
  2148.         uix.smallLogo.needsInit = false;
  2149.         if (uix.elm.logoSmall.length && uix.elm.logo.length) {
  2150.             uix.smallLogo.stickyWrapper = uix.elm.navigation.find('.sticky_wrapper'), uix.smallLogo.resize();
  2151.             uix.smallLogo.check();
  2152.             uix.smallLogo.running = true;
  2153.         }
  2154.     },
  2155.     get: function () {
  2156.     },
  2157.     set: function () {
  2158.         var us = uix.smallLogo;
  2159.         if (uix.sticky.getState('#navigation') == 1) {
  2160.             var logoTopOffset = us.logoTopOffset + us.logoOuterHeight, navigationBottomOffset = uix.scrollTop;
  2161.             if (logoTopOffset < navigationBottomOffset) {
  2162.                 if (us.visible == 0) uix.smallLogo.addLogo();
  2163.             } else {
  2164.                 if (us.visible == 1) uix.smallLogo.removeLogo();
  2165.             }
  2166.         } else {
  2167.             if (us.visible == 1) uix.smallLogo.removeLogo();
  2168.         }
  2169.     },
  2170.     addLogo: function () {
  2171.         uix.smallLogo.visible = 1;
  2172.         var pfTime2 = uix.time();
  2173.         uix.elm.html.addClass('activeSmallLogo');
  2174.         if (!uix.initDone) {
  2175.             uix.updateNavTabs = true;
  2176.         } else {
  2177.             uix.navTabs();
  2178.             if (uix.enableBorderCheck) uix.ulManager.check();
  2179.         }
  2180.         uix.tStamp("uix.navTabs", 3, pfTime2);
  2181.     },
  2182.     removeLogo: function () {
  2183.         uix.smallLogo.visible = 0;
  2184.         var pfTime2 = uix.time();
  2185.         uix.elm.html.removeClass('activeSmallLogo');
  2186.         if (!uix.initDone) {
  2187.             uix.updateNavTabs = true;
  2188.         } else {
  2189.             uix.navTabs();
  2190.             if (uix.enableBorderCheck) uix.ulManager.check();
  2191.         }
  2192.         uix.tStamp("uix.navTabs", 3, pfTime2);
  2193.     },
  2194.     check: function () {
  2195.         var us = uix.smallLogo, pfTime = uix.time();
  2196.         if (us.needsInit) us.init();
  2197.         us.get();
  2198.         us.set();
  2199.         uix.tStamp("UIX.smallLogo.check", 2, pfTime);
  2200.     },
  2201.     resize: function () {
  2202.         uix.smallLogo.logoOuterHeight = uix.elm.logo.outerHeight(true) / 2;
  2203.         uix.smallLogo.logoTopOffset = uix.elm.logo.offset().top;
  2204.         uix.smallLogo.stickyWrapperOuter = uix.smallLogo.stickyWrapper.outerHeight(true);
  2205.     }
  2206. }
  2207. uix.viewport = {
  2208.     running: false, scrollClass: "", get: function () {
  2209.         uix.scrollTop = window.scrollY || document.documentElement.scrollTop;
  2210.     }, set: function () {
  2211.         if (uix.scrollTop == 0) {
  2212.             uix.elm.html.removeClass('scrollNotTouchingTop');
  2213.             uix.viewport.scrollClass = "";
  2214.         } else if (uix.viewport.scrollClass != 'scrollNotTouchingTop') {
  2215.             uix.elm.html.addClass('scrollNotTouchingTop');
  2216.             uix.viewport.scrollClass = 'scrollNotTouchingTop';
  2217.         }
  2218.     }, check: function () {
  2219.         var pfTime = uix.time();
  2220.         uix.viewport.get();
  2221.         uix.viewport.set();
  2222.         uix.tStamp("UIX.viewport.check", 2, pfTime);
  2223.     }, init: function () {
  2224.         var pfTime = uix.time();
  2225.         var e = window, a = 'inner';
  2226.         if (!window.innerWidth) {
  2227.             a = 'client';
  2228.             e = document.documentElement || document.body;
  2229.         }
  2230.         var viewport = {width: e[a + 'Width'], height: e[a + 'Height']};
  2231.         uix.windowWidth = viewport.width;
  2232.         uix.windowHeight = viewport.height;
  2233.         if (uix.viewport.running == false) uix.viewport.running = true;
  2234.         uix.viewport.get();
  2235.         uix.tStamp("UIX.viewport.init", 1, pfTime);
  2236.     }
  2237. }
  2238. uix.toggleWidth = {
  2239.     eles: null, needsInit: true, state: 0, widthSet: false, running: false, sheet: function () {
  2240.         var style = document.createElement("style");
  2241.         style.appendChild(document.createTextNode(""));
  2242.         document.head.appendChild(style);
  2243.         return style.sheet;
  2244.     }, setup: function () {
  2245.         uix.toggleWidth.state = uix.user.widthToggleState;
  2246.         uix.toggleWidth.running = true;
  2247.         if (uix.toggleWidth.state == 1) {
  2248.             $('.chooser_widthToggle').addClass('uix_widthToggle_upper').removeClass('uix_widthToggle_lower');
  2249.         }
  2250.     }, init: function () {
  2251.         if (uix.pageStyle == 2) {
  2252.             uix.toggleWidth.eles = $('#uix_wrapper, .pageWidth, .navTabs .navTab.selected .blockLinksList');
  2253.         } else if (uix.pageStyle == 1) {
  2254.             uix.toggleWidth.eles = $('.pageWidth, .navTabs .navTab.selected .blockLinksList');
  2255.         } else {
  2256.             uix.toggleWidth.eles = $('.pageWidth');
  2257.         }
  2258.         uix.toggleWidth.needsInit = false;
  2259.     }, resize: function () {
  2260.         if (uix.toggleWidth.running) {
  2261.             if (uix.windowWidth <= parseInt(uix.widthToggleLower) + (2 * uix.globalPadding)) {
  2262.                 if (uix.toggleWidth.widthSet) {
  2263.                     uix.toggleWidth.setMaxWidthQuick("");
  2264.                     uix.toggleWidth.widthSet = false;
  2265.                 }
  2266.             } else if (uix.toggleWidth.widthSet == false) {
  2267.                 if (uix.toggleWidth.state == 1) {
  2268.                     uix.toggleWidth.setMaxWidthQuick(uix.widthToggleUpper);
  2269.                 } else {
  2270.                     uix.toggleWidth.setMaxWidthQuick(uix.widthToggleLower);
  2271.                 }
  2272.             }
  2273.         }
  2274.     }, toggle: function () {
  2275.         if (uix.toggleWidth.needsInit) uix.toggleWidth.init();
  2276.         if (uix.toggleWidth.state != 1) {
  2277.             uix.toggleWidth.setMaxWidth(uix.widthToggleUpper)
  2278.             uix.toggleWidth.state = 1;
  2279.             $('.chooser_widthToggle').addClass('uix_widthToggle_upper').removeClass('uix_widthToggle_lower');
  2280.         } else {
  2281.             uix.toggleWidth.setMaxWidth(uix.widthToggleLower)
  2282.             uix.toggleWidth.state = 0;
  2283.             $('.chooser_widthToggle').addClass('uix_widthToggle_lower').removeClass('uix_widthToggle_upper');
  2284.         }
  2285.         var xmlhttp = new XMLHttpRequest();
  2286.         xmlhttp.onreadystatechange = function () {
  2287.             if (xmlhttp.readyState == 4) {
  2288.                 if (xmlhttp.status == 200) {
  2289.                     content = xmlhttp.responseText;
  2290.                 }
  2291.             }
  2292.         }
  2293.         xmlhttp.open('GET', "index.php/account/uix-toggle-width", true);
  2294.         xmlhttp.send();
  2295.     }, setMaxWidth: function (val) {
  2296.         uix.toggleWidth.widthSet = true;
  2297.         window.requestAnimationFrame(function () {
  2298.             uix.toggleWidth.eles.css({
  2299.                 'transition': 'max-width 0.3s ease',
  2300.                 '-webkit-transition': 'max-width 0.3s ease'
  2301.             });
  2302.             window.requestAnimationFrame(function () {
  2303.                 uix.toggleWidth.setWidth(val);
  2304.                 window.setTimeout(function () {
  2305.                     window.requestAnimationFrame(function () {
  2306.                         uix.toggleWidth.eles.css({'transition': '', '-webkit-transition': ''});
  2307.                         window.dispatchEvent(new Event('resize'));
  2308.                     });
  2309.                 }, 300)
  2310.             })
  2311.         });
  2312.     }, setMaxWidthQuick: function (val) {
  2313.         if (uix.toggleWidth.needsInit) uix.toggleWidth.init();
  2314.         uix.toggleWidth.setWidth(val);
  2315.         window.dispatchEvent(new Event('resize'));
  2316.     }, setWidth: function (val) {
  2317.         uix.toggleWidth.widthSet = true;
  2318.         if (uix.pageStyle == 2) {
  2319.             for (var i = 0, len = uix.toggleWidth.eles.length; i < len; i++) {
  2320.                 var ele = uix.toggleWidth.eles[i]
  2321.                 if (ele.className != "" && ele.className.indexOf("pageWidth") > -1) {
  2322.                     uix.toggleWidth.sheet().insertRule("#uix_wrapper .activeSticky .pageWidth {max-width: " + val + ";}", 0);
  2323.                 } else {
  2324.                     ele.style.maxWidth = val;
  2325.                 }
  2326.             }
  2327.         } else {
  2328.             uix.toggleWidth.eles.css('max-width', val)
  2329.         }
  2330.     }
  2331. }
  2332. uix.collapsible = {
  2333.     items: [], needsInit: true, init: function () {
  2334.         var changeMade = false;
  2335.         if (uix.collapsibleNodes) {
  2336.             var eles = document.getElementsByClassName("node category level_1"),
  2337.                 colDefaultArray = uix.collapsedNodesDefault.split(","),
  2338.                 colNodesCookie = $.getCookie('uix_collapsedNodes'),
  2339.                 colNodesArray = (colNodesCookie == null) ? [] : colNodesCookie.split(','),
  2340.                 expNodesCookie = $.getCookie('uix_expandedNodes'),
  2341.                 expNodesArray = (expNodesCookie == null) ? [] : expNodesCookie.split(",");
  2342.             for (var i = 0, len = eles.length; i < len; i++) {
  2343.                 (function (i) {
  2344.                     var trigger = eles[i].getElementsByClassName("uix_collapseNodes"), ele = eles[i],
  2345.                         eleClass = ele.className, eleClassSplit = eleClass.split(" "), label = "", defaultVal = true,
  2346.                         itemState = 1, defaultCollapsed = false;
  2347.                     for (var j = 0, len2 = eleClassSplit.length; j < len2; j++) {
  2348.                         if (eleClassSplit[j].indexOf("node_") > -1) {
  2349.                             label = eleClassSplit[j];
  2350.                             break;
  2351.                         }
  2352.                     }
  2353.                     if (label != "") {
  2354.                         for (var j = 0, len2 = colDefaultArray.length; j < len2; j++) {
  2355.                             if (label == colDefaultArray[j]) {
  2356.                                 itemState = 0;
  2357.                                 defaultCollapsed = true;
  2358.                                 break;
  2359.                             }
  2360.                         }
  2361.                         for (var j = 0, len2 = colNodesArray.length; j < len2; j++) {
  2362.                             if (label == colNodesArray[j]) {
  2363.                                 itemState = 0;
  2364.                                 defaultVal = false;
  2365.                                 break;
  2366.                             }
  2367.                         }
  2368.                         if (itemState == 0) {
  2369.                             for (var j = 0, len2 = expNodesArray.length; j < len2; j++) {
  2370.                                 if (label == expNodesArray[j]) {
  2371.                                     itemState = 1;
  2372.                                     defaultVal = false;
  2373.                                     break;
  2374.                                 }
  2375.                             }
  2376.                         }
  2377.                         var item = {
  2378.                             ele: ele,
  2379.                             child: ele.getElementsByClassName("nodeList")[0],
  2380.                             state: itemState,
  2381.                             enabled: 1,
  2382.                             index: i,
  2383.                             defaultVal: defaultVal,
  2384.                             defaultCollapsed: defaultCollapsed,
  2385.                             label: label,
  2386.                             trigger: (trigger.length === 1) ? trigger[0] : null,
  2387.                         };
  2388.                         if (item.trigger !== null) {
  2389.                             item.trigger.addEventListener('click', function (e) {
  2390.                                 e.preventDefault();
  2391.                                 uix.collapsible.toggle(i)
  2392.                                 return false;
  2393.                             }, false)
  2394.                         }
  2395.                         uix.collapsible.items.push(item);
  2396.                         if (itemState == 0) {
  2397.                             uix.collapsible.collapse(i, false);
  2398.                             changeMade = true;
  2399.                         } else if (itemState == 1) {
  2400.                             uix.collapsible.expand(i, false);
  2401.                         }
  2402.                     }
  2403.                 })(i);
  2404.             }
  2405.         }
  2406.         if (changeMade) uix.sidebarSticky.resize();
  2407.         uix.collapsible.needsInit = false;
  2408.     }, toggle: function (i) {
  2409.         var item = uix.collapsible.items[i];
  2410.         if (item.state == 1) {
  2411.             uix.collapsible.collapse(i, true);
  2412.         } else {
  2413.             uix.collapsible.expand(i, true);
  2414.         }
  2415.     }, collapse: function (i, setCookie) {
  2416.         uix.collapsible.items[i].state = 0;
  2417.         if (setCookie) {
  2418.             if (uix.sidebarSticky.running) var stickyUpdate = window.setInterval(function () {
  2419.                 uix.sidebarSticky.resize();
  2420.             }, 16);
  2421.             if (typeof(uix.collapsible.items[i].child) !== "undefined") {
  2422.                 $(uix.collapsible.items[i].child).slideUp(400, function () {
  2423.                     if (uix.sidebarSticky.running) {
  2424.                         window.clearInterval(stickyUpdate);
  2425.                         if (!uix.collapsible.needsInit) uix.sidebarSticky.resize();
  2426.                     }
  2427.                 });
  2428.             }
  2429.             uix.collapsible.items[i].defaultVal = false;
  2430.             uix.collapsible.updateCookie();
  2431.         } else {
  2432.             if (typeof(uix.collapsible.items[i].child) !== "undefined") uix.collapsible.items[i].child.style.display = "none";
  2433.         }
  2434.         uix.collapsible.items[i].ele.className += (" collapsed");
  2435.     }, expand: function (i, setCookie) {
  2436.         uix.collapsible.items[i].state = 1;
  2437.         if (setCookie) {
  2438.             if (uix.sidebarSticky.running) var stickyUpdate = window.setInterval(function () {
  2439.                 uix.sidebarSticky.resize();
  2440.             }, 16);
  2441.             if (typeof(uix.collapsible.items[i].child) !== "undefined") {
  2442.                 $(uix.collapsible.items[i].child).slideDown(400, function () {
  2443.                     if (uix.sidebarSticky.running) {
  2444.                         window.clearInterval(stickyUpdate);
  2445.                         if (!uix.collapsible.needsInit) uix.sidebarSticky.resize();
  2446.                     }
  2447.                 });
  2448.             }
  2449.             uix.collapsible.items[i].defaultVal = false;
  2450.             uix.collapsible.updateCookie();
  2451.         } else {
  2452.             if (typeof(uix.collapsible.items[i].child) !== "undefined") uix.collapsible.items[i].child.style.display = "";
  2453.         }
  2454.         uix.collapsible.items[i].ele.className = uix.collapsible.items[i].ele.className.replace(" collapsed", "");
  2455.     }, updateCookie: function () {
  2456.         var retCol = "";
  2457.         var retExp = "";
  2458.         for (var i = 0, len = uix.collapsible.items.length; i < len; i++) {
  2459.             var item = uix.collapsible.items[i];
  2460.             if (item.defaultVal == false) {
  2461.                 if (item.state == 0 && !item.defaultCollapsed) {
  2462.                     retCol += item.label + ","
  2463.                 } else if (item.state == 1) {
  2464.                     retExp += item.label + ","
  2465.                 }
  2466.             }
  2467.         }
  2468.         $.setCookie("uix_collapsedNodes", retCol);
  2469.         $.setCookie("uix_expandedNodes", retExp);
  2470.     }, resetCookies: function () {
  2471.         $.setCookie("uix_collapsedNodes", "");
  2472.         $.setCookie("uix_expandedNodes", "");
  2473.     },
  2474. }
  2475. uix.userBar = {
  2476.     state: 0, enableHiding: true, needsInit: true, ele: null, init: function () {
  2477.         uix.userBar.ele = $('#userBar');
  2478.         if (uix.userBar.ele.length) {
  2479.             if ($('.moderatorTabs', uix.userBar.ele).length) {
  2480.                 uix.userBar.enableHiding = false
  2481.             } else if ($('#QuickSearch', uix.userBar.ele).length) {
  2482.                 uix.userBar.enableHiding = false
  2483.             } else {
  2484.                 var visitorTabs = $('.navRight li', uix.userBar.ele)
  2485.                 for (var i = 0, len = visitorTabs.length; i < len; i++) {
  2486.                     if ((visitorTabs[i].className.indexOf("account") == -1 && visitorTabs[i].className.indexOf("inbox") == -1 && visitorTabs[i].className.indexOf("alert") == -1) || visitorTabs[i].className.indexOf("uix_offCanvas_trigger") > -1) uix.userBar.enableHiding = false
  2487.                 }
  2488.             }
  2489.         } else {
  2490.             uix.userBar.enableHiding = false;
  2491.         }
  2492.         if (uix.userBar.enableHiding) {
  2493.             if (typeof(uix.stickyItems['#userBar']) !== "undefined" && uix.stickyItems['#userBar'].options.minWidth < uix.offCanvasTriggerWidth) uix.stickyItems['#userBar'].options.minWidth = uix.offCanvasTriggerWidth;
  2494.         }
  2495.         uix.userBar.needsInit = false;
  2496.     }, check: function () {
  2497.         if (uix.userBar.needsInit) uix.userBar.init()
  2498.         if (uix.userBar.enableHiding) {
  2499.             if (uix.windowWidth <= uix.offCanvasTriggerWidth) {
  2500.                 if (uix.userBar.state == 1) {
  2501.                     uix.userBar.ele.css({'display': ''});
  2502.                     uix.userBar.state = 0;
  2503.                 }
  2504.             } else {
  2505.                 if (uix.userBar.state == 0) {
  2506.                     uix.userBar.ele.css({'display': 'block'});
  2507.                     uix.userBar.state = 1;
  2508.                 }
  2509.             }
  2510.         } else {
  2511.             if (uix.userBar.state == 0) {
  2512.                 uix.userBar.ele.css({'display': 'block'});
  2513.                 uix.userBar.state = 1;
  2514.             }
  2515.         }
  2516.     }
  2517. }
  2518. uix.ulManager = {
  2519.     needsInit: true, items: [], leftClass: "uix_leftMost", rightClass: "uix_rightMost", init: function () {
  2520.         var parents = [document.getElementById("navigation"), document.getElementById("userBar")];
  2521.         for (var i = 0, len1 = parents.length; i < len1; i++) {
  2522.             if (typeof(parents[i]) !== "undefined" && parents[i] !== null) {
  2523.                 var uls = parents[i].getElementsByTagName("ul");
  2524.                 for (var j = 0, len2 = uls.length; j < len2; j++) {
  2525.                     if (typeof(uls[j]) !== "undefined") {
  2526.                         var className = uls[j].className
  2527.                         if (className.indexOf("navLeft") > -1 || className.indexOf("navRight") > -1) {
  2528.                             var children = [];
  2529.                             var childSel = uls[j].children;
  2530.                             for (var k = 0, len3 = childSel.length; k < len3; k++) {
  2531.                                 if (childSel[k].tagName == "LI") children.push(childSel[k]);
  2532.                             }
  2533.                             uix.ulManager.items.push({
  2534.                                 ele: uls[j],
  2535.                                 children: children,
  2536.                                 first: -1,
  2537.                                 firstOld: -1,
  2538.                                 last: -1,
  2539.                                 lastOld: -1,
  2540.                             })
  2541.                         }
  2542.                     }
  2543.                 }
  2544.             }
  2545.         }
  2546.         uix.ulManager.needsInit = false;
  2547.     }, checkGet: function () {
  2548.         if (uix.ulManager.needsInit) uix.ulManager.init();
  2549.         for (var i = 0, len1 = uix.ulManager.items.length; i < len1; i++) {
  2550.             var item = uix.ulManager.items[i];
  2551.             for (var j = 0, len2 = item.children.length; j < len2; j++) {
  2552.                 if (window.getComputedStyle(item.children[j]).display.indexOf("none") === -1) {
  2553.                     uix.ulManager.items[i].firstOld = uix.ulManager.items[i].first;
  2554.                     uix.ulManager.items[i].first = j;
  2555.                     break;
  2556.                 }
  2557.             }
  2558.             for (var j = item.children.length - 1; j >= 0; j--) {
  2559.                 if (window.getComputedStyle(item.children[j]).display.indexOf("none") === -1) {
  2560.                     uix.ulManager.items[i].lastOld = uix.ulManager.items[i].last;
  2561.                     uix.ulManager.items[i].last = j;
  2562.                     break;
  2563.                 }
  2564.             }
  2565.         }
  2566.     }, checkSet: function () {
  2567.         for (var i = 0, len1 = uix.ulManager.items.length; i < len1; i++) {
  2568.             if (uix.ulManager.items[i].first != uix.ulManager.items[i].firstOld) {
  2569.                 if (typeof(uix.ulManager.items[i].children[uix.ulManager.items[i].firstOld]) !== "undefined") uix.ulManager.items[i].children[uix.ulManager.items[i].firstOld].className = uix.ulManager.items[i].children[uix.ulManager.items[i].firstOld].className.replace(" " + uix.ulManager.leftClass, "");
  2570.                 if (typeof(uix.ulManager.items[i].children[uix.ulManager.items[i].first]) !== "undefined") uix.ulManager.items[i].children[uix.ulManager.items[i].first].className += " " + uix.ulManager.leftClass;
  2571.             }
  2572.             if (uix.ulManager.items[i].last != uix.ulManager.items[i].lastOld) {
  2573.                 if (typeof(uix.ulManager.items[i].children[uix.ulManager.items[i].lastOld]) !== "undefined") uix.ulManager.items[i].children[uix.ulManager.items[i].lastOld].className = uix.ulManager.items[i].children[uix.ulManager.items[i].lastOld].className.replace(" " + uix.ulManager.rightClass, "");
  2574.                 if (typeof(uix.ulManager.items[i].children[uix.ulManager.items[i].last]) !== "undefined") uix.ulManager.items[i].children[uix.ulManager.items[i].last].className += " " + uix.ulManager.rightClass;
  2575.             }
  2576.         }
  2577.     }, check: function () {
  2578.         uix.ulManager.checkGet();
  2579.         uix.ulManager.checkSet();
  2580.     }
  2581. }
  2582. uix.fn.getKeys = function (obj) {
  2583.     if (typeof(obj) === "object") return Object.keys(obj);
  2584.     return null;
  2585. }
  2586. uix.fn.jumpToFixed = function () {
  2587.     var pfTime = uix.time();
  2588.     if (uix.jumpToFixed_delayHide && uix.jumpToScrollTimer) {
  2589.         clearTimeout(uix.jumpToScrollTimer);
  2590.         clearTimeout(uix.jumpToScrollHideTimer);
  2591.     }
  2592.     if (uix.scrollTop > 140) {
  2593.         if (uix.jumpToFixedOpacity == 0) {
  2594.             window.requestAnimationFrame(function () {
  2595.                 uix.elm.jumpToFixed.css({'display': 'block'});
  2596.                 uix.jumpToFixedOpacity = 1;
  2597.                 window.requestAnimationFrame(function () {
  2598.                     uix.elm.jumpToFixed.css({'opacity': '1'});
  2599.                 });
  2600.             });
  2601.         }
  2602.         if (uix.jumpToFixed_delayHide == 1) {
  2603.             uix.jumpToScrollTimer = setTimeout(function () {
  2604.                 window.requestAnimationFrame(function () {
  2605.                     uix.jumpToScrollTimer = null;
  2606.                     uix.jumpToFixedOpacity = 0;
  2607.                     uix.elm.jumpToFixed.css({'opacity': '0'});
  2608.                     uix.jumpToScrollHideTimer = window.setTimeout(function () {
  2609.                         window.requestAnimationFrame(function () {
  2610.                             if (uix.jumpToFixedOpacity == 0) uix.elm.jumpToFixed.css({'display': 'none'});
  2611.                         })
  2612.                     }, 450);
  2613.                 })
  2614.             }, 1500);
  2615.         }
  2616.     } else {
  2617.         if (uix.jumpToFixedOpacity != 0) {
  2618.             uix.jumpToFixedOpacity = 0;
  2619.             uix.elm.jumpToFixed.css({'opacity': '0'});
  2620.         }
  2621.         uix.jumpToScrollHideTimer = window.setTimeout(function () {
  2622.             window.requestAnimationFrame(function () {
  2623.                 if (uix.jumpToFixedOpacity == 0) uix.elm.jumpToFixed.css({'display': 'none'});
  2624.             })
  2625.         }, 450);
  2626.     }
  2627.     uix.tStamp("UIX.fn.jumpToFixed", 2, pfTime);
  2628. }
  2629. uix.fn.updateSidebar = function () {
  2630.     if (uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  2631.         uix.elm.sidebar.css({'width': uix.sidebarWidth, 'float': uix.sidebar_innerFloat});
  2632.     } else {
  2633.         uix.elm.sidebar.css({'width': '', 'float': ''});
  2634.         if (uix.sidebarSticky.length && uix.sidebarSticky.innerWrapper.length) {
  2635.             uix.sidebarSticky.innerWrapper.css({'width': '', 'top': ''});
  2636.         }
  2637.     }
  2638. }
  2639. uix.fn.scrollToAnchor = function (href) {
  2640.     href = typeof(href) == "string" ? href : $(this).attr("href");
  2641.     if (!href) return;
  2642.     var $target = $("a[href='" + href + "']");
  2643.     if ($target.length) {
  2644.         uix.sticky.preventStickyTop = true;
  2645.         var topOffset = $target.offset().top
  2646.         $('html, body').animate({scrollTop: topOffset - uix.sticky.getOffset(topOffset)}, XenForo.speed.normal, 'swing', function () {
  2647.             uix.sticky.preventStickyTop = false;
  2648.             uix.sticky.check();
  2649.         });
  2650.         if (history && "pushState" in history) {
  2651.             history.pushState({}, document.title, window.location.pathname + window.location.search + href.replace("index.php", ""));
  2652.             return false;
  2653.         }
  2654.     }
  2655. }
  2656. uix.fn.postSearhMinimalShow = function () {
  2657.     document.getElementById('uix_searchMinimalInput').children[0].focus();
  2658.     uix.searchMinimalState = 1;
  2659.     $('#uix_searchMinimal').addClass('show')
  2660. }
  2661. uix.fn.postSearchMinimalHide = function () {
  2662.     uix.searchMinimalState = 0;
  2663.     $('#uix_searchMinimal').removeClass('show');
  2664.     var withSearch = $(".withSearch");
  2665.     if (withSearch.length) withSearch.removeClass('uix_searchMinimalActive');
  2666. }
  2667. uix.fn.searchClick = function () {
  2668.     var withSearch = $(".withSearch");
  2669.     if (withSearch.length) {
  2670.         if (uix.searchMinimalState <= 0) {
  2671.             withSearch.addClass('uix_searchMinimalActive');
  2672.         }
  2673.     }
  2674.     if (uix.searchPosition == 1) {
  2675.         if (uix.searchMinimalState <= 0) {
  2676.             window.requestAnimationFrame(function () {
  2677.                 $('#QuickSearchPlaceholder').css({'transition': 'opacity 0.3s'});
  2678.                 window.requestAnimationFrame(function () {
  2679.                     $('#QuickSearchPlaceholder').css({'opacity': 0});
  2680.                     window.setTimeout(function () {
  2681.                         window.requestAnimationFrame(function () {
  2682.                             $('#QuickSearchPlaceholder').css({'display': 'none'});
  2683.                             $('#uix_searchMinimal').css({'display': 'block', 'width': 'auto',});
  2684.                             window.setTimeout(function () {
  2685.                                 window.requestAnimationFrame(function () {
  2686.                                     $('#uix_searchMinimal').css({'opacity': 1});
  2687.                                     uix.fn.postSearhMinimalShow();
  2688.                                 })
  2689.                             }, 300)
  2690.                         });
  2691.                     }, 300)
  2692.                 });
  2693.             });
  2694.         } else {
  2695.             window.requestAnimationFrame(function () {
  2696.                 $('#uix_searchMinimal').css({'opacity': 0});
  2697.                 window.setTimeout(function () {
  2698.                     window.requestAnimationFrame(function () {
  2699.                         $('#uix_searchMinimal').css({'display': '', 'opacity': '', 'width': '',});
  2700.                         $('#QuickSearchPlaceholder').css({'display': '',});
  2701.                         window.setTimeout(function () {
  2702.                             window.requestAnimationFrame(function () {
  2703.                                 $('#QuickSearchPlaceholder').css({'opacity': '', 'transition': ''});
  2704.                                 uix.fn.postSearchMinimalHide();
  2705.                             })
  2706.                         }, 300)
  2707.                     })
  2708.                 }, 300)
  2709.             })
  2710.         }
  2711.     } else if (uix.searchPosition == 4) {
  2712.         if (uix.searchMinimalState <= 0) {
  2713.             window.requestAnimationFrame(function () {
  2714.                 $('.uix_breadCrumb_toggleList, .breadBoxTop .breadcrumb, .breadBoxTop .topCtrl').css({'transition': 'opacity 0.3s'});
  2715.                 window.requestAnimationFrame(function () {
  2716.                     $('.breadBoxTop .breadcrumb, .uix_breadCrumb_toggleList, .breadBoxTop .topCtrl').css({'opacity': 0});
  2717.                     window.setTimeout(function () {
  2718.                         window.requestAnimationFrame(function () {
  2719.                             $('#QuickSearchPlaceholder, .breadBoxTop .breadcrumb, .breadBoxTop .topCtrl, .uix_sidebar_collapse.toggleList_item').css({'display': 'none'});
  2720.                             $('.uix_breadCrumb_toggleList').css({'float': 'none'})
  2721.                             $('.uix_breadCrumb_toggleList li.toggleList_item').css({'float': 'none', 'margin': 0})
  2722.                             $('#uix_searchMinimal').css({'width': '100%', 'display': 'block', 'opacity': 1});
  2723.                             $('.uix_breadCrumb_toggleList').css({'opacity': 1});
  2724.                             window.setTimeout(function () {
  2725.                                 window.requestAnimationFrame(function () {
  2726.                                     uix.fn.postSearhMinimalShow();
  2727.                                 })
  2728.                             }, 300)
  2729.                         })
  2730.                     }, 300)
  2731.                 });
  2732.             });
  2733.         } else {
  2734.             window.requestAnimationFrame(function () {
  2735.                 $('.breadBoxTop .breadcrumb, .uix_breadCrumb_toggleList, .breadBoxTop .topCtrl').css({'opacity': 0});
  2736.                 window.setTimeout(function () {
  2737.                     window.requestAnimationFrame(function () {
  2738.                         $('#QuickSearchPlaceholder, .breadBoxTop .breadcrumb, .breadBoxTop .topCtrl, .uix_sidebar_collapse.toggleList_item').css({'display': ''});
  2739.                         $('.uix_breadCrumb_toggleList').css({'float': ''})
  2740.                         $('.uix_breadCrumb_toggleList li.toggleList_item').css({'float': '', 'margin': ''})
  2741.                         $('#uix_searchMinimal').css({'width': '', 'display': '', 'opacity': ''});
  2742.                         $('.breadBoxTop .breadcrumb, .uix_breadCrumb_toggleList, .breadBoxTop .topCtrl').css({'opacity': 1});
  2743.                         window.setTimeout(function () {
  2744.                             window.requestAnimationFrame(function () {
  2745.                                 $('.uix_breadCrumb_toggleList, .breadBoxTop .breadcrumb, .breadBoxTop .topCtrl').css({
  2746.                                     'opacity': '',
  2747.                                     'transition': ''
  2748.                                 });
  2749.                                 uix.fn.postSearchMinimalHide();
  2750.                             })
  2751.                         }, 300)
  2752.                     })
  2753.                 }, 350)
  2754.             });
  2755.         }
  2756.     } else if (!uix.elm.html.hasClass('csstransforms')) {
  2757.         if (uix.searchMinimalState == -1) {
  2758.             uix.searchMinimalState = 0;
  2759.         }
  2760.         if (uix.searchMinimalState == 0) {
  2761.             $('#uix_searchMinimal').css({'display': 'inline-block', 'width': '100%', 'opacity': 1});
  2762.             for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2763.                 uix.searchEles[i][0].css({'display': 'none'});
  2764.             }
  2765.             uix.fn.postSearhMinimalShow();
  2766.         } else {
  2767.             for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2768.                 uix.searchEles[i][0].css({'display': ''});
  2769.             }
  2770.             $('#uix_searchMinimal').css({'display': '', 'width': '', 'opacity': ''});
  2771.             uix.fn.postSearchMinimalHide();
  2772.         }
  2773.     } else {
  2774.         var searchParent = $('#searchBar').parent();
  2775.         window.requestAnimationFrame(function () {
  2776.             if (uix.searchMinimalState == -1) {
  2777.                 for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2778.                     uix.searchEles[i][0].css({'transition': 'width 0.3s, opacity 0.3s'});
  2779.                 }
  2780.                 uix.searchMinimalState = 0;
  2781.             }
  2782.             if (uix.searchMinimalState == 0) {
  2783.                 for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2784.                     uix.searchEles[i][1] = uix.searchEles[i][0].outerWidth();
  2785.                 }
  2786.                 for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2787.                     uix.searchEles[i][0].css({'opacity': '1', 'width': uix.searchEles[i][1] + 'px'});
  2788.                 }
  2789.                 searchParent.css('overflow', 'hidden')
  2790.             }
  2791.             window.requestAnimationFrame(function () {
  2792.                 if (uix.searchMinimalState == 0) {
  2793.                     for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2794.                         uix.searchEles[i][0].css({'overflow': 'hidden', 'opacity': '0', 'width': '0'});
  2795.                     }
  2796.                     window.setTimeout(function () {
  2797.                         window.requestAnimationFrame(function () {
  2798.                             $('#uix_searchMinimal').css('display', 'inline-block');
  2799.                             window.requestAnimationFrame(function () {
  2800.                                 $('#uix_searchMinimal').css({'width': '100%', 'opacity': '1', 'position': 'relative'});
  2801.                             })
  2802.                         })
  2803.                     }, 250);
  2804.                     window.setTimeout(function () {
  2805.                         window.requestAnimationFrame(function () {
  2806.                             for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2807.                                 uix.searchEles[i][0].css({'display': 'none'});
  2808.                             }
  2809.                             uix.fn.postSearhMinimalShow();
  2810.                         });
  2811.                         $('#navigation .publicTabs, #navigation .visitorTabs').css({'width': 0, 'border': 'none'})
  2812.                     }, 600);
  2813.                 } else {
  2814.                     window.requestAnimationFrame(function () {
  2815.                         $('#uix_searchMinimal').css({'width': '0', 'opacity': '0'});
  2816.                         window.setTimeout(function () {
  2817.                             window.requestAnimationFrame(function () {
  2818.                                 $('#navigation .publicTabs, #navigation .visitorTabs').css({'width': '', 'border': ''})
  2819.                                 for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2820.                                     uix.searchEles[i][0].css({'display': ''});
  2821.                                 }
  2822.                                 window.requestAnimationFrame(function () {
  2823.                                     for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2824.                                         uix.searchEles[i][0].css({
  2825.                                             'opacity': '1',
  2826.                                             'width': uix.searchEles[i][1] + 'px'
  2827.                                         });
  2828.                                     }
  2829.                                     window.setTimeout(function () {
  2830.                                         window.requestAnimationFrame(function () {
  2831.                                             $('#uix_searchMinimal').css('display', '');
  2832.                                             window.setTimeout(function () {
  2833.                                                 window.requestAnimationFrame(function () {
  2834.                                                     for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2835.                                                         uix.searchEles[i][0].css({'transition': 'width 0s, opacity 0s'});
  2836.                                                     }
  2837.                                                 })
  2838.                                             }, 0)
  2839.                                             window.setTimeout(function () {
  2840.                                                 window.requestAnimationFrame(function () {
  2841.                                                     for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2842.                                                         uix.searchEles[i][0].css({
  2843.                                                             'overflow': '',
  2844.                                                             'opacity': '',
  2845.                                                             'width': ''
  2846.                                                         });
  2847.                                                     }
  2848.                                                 })
  2849.                                             }, 50)
  2850.                                             window.setTimeout(function () {
  2851.                                                 window.requestAnimationFrame(function () {
  2852.                                                     for (var i = 0, len = uix.searchEles.length; i < len; i++) {
  2853.                                                         uix.searchEles[i][0].css({'transition': 'width 0.3s, opacity 0.3s'});
  2854.                                                     }
  2855.                                                 })
  2856.                                             }, 100)
  2857.                                             searchParent.css('overflow', '')
  2858.                                             uix.fn.postSearchMinimalHide();
  2859.                                             if (uix.searchPosition == 2) {
  2860.                                                 if (!uix.initDone) {
  2861.                                                     uix.updateNavTabs = true;
  2862.                                                 } else {
  2863.                                                     uix.navTabs();
  2864.                                                 }
  2865.                                             }
  2866.                                         })
  2867.                                     }, 350);
  2868.                                 })
  2869.                             });
  2870.                         }, 250)
  2871.                     });
  2872.                 }
  2873.             });
  2874.         });
  2875.     }
  2876. }
  2877. uix.fn.syncBaloon = function ($source, $dest) {
  2878.     if ($source.length && $dest.length) {
  2879.         var $sourceCounter = $source.find('span.Total'), total = $sourceCounter.text(),
  2880.             $destCounter = $dest.find('span.Total'), oldTotal = $destCounter.text();
  2881.         if (total != oldTotal) {
  2882.             $destCounter.text(total);
  2883.             if (total == '0') {
  2884.                 $dest.fadeOut('fast', function () {
  2885.                     $dest.addClass('Zero').css('display', '');
  2886.                 });
  2887.             } else {
  2888.                 $dest.fadeIn('fast', function () {
  2889.                     $dest.removeClass('Zero').css('display', '');
  2890.                 });
  2891.             }
  2892.         }
  2893.     }
  2894. }
  2895. uix.hideDropdowns = {
  2896.     eles: null, init: function () {
  2897.         uix.hideDropdowns.eles = $('body > .Menu');
  2898.     }, hide: function () {
  2899.         uix.hideDropdowns.init();
  2900.         if (uix.hideDropdowns.eles !== null) uix.hideDropdowns.eles.css('display', 'none');
  2901.     },
  2902. }
  2903. uix.fn.mainSidebarResize = function () {
  2904.     var pfTime = uix.time();
  2905.     var origSidebarMargin = 0;
  2906.     if (XenForo.RTL) {
  2907.         var marginDirection = (uix.elm.sidebar.hasClass('uix_mainSidebar_left')) ? 'marginRight' : 'marginLeft'
  2908.     } else {
  2909.         var marginDirection = (uix.elm.sidebar.hasClass('uix_mainSidebar_left')) ? 'marginLeft' : 'marginRight'
  2910.     }
  2911.     uix.elm.mainContent.css('transition', 'margin 0s');
  2912.     if (uix.mainContainerMargin.length) origSidebarMargin = uix.mainContainerMargin;
  2913.     if (uix.windowWidth <= uix.sidebarMaxResponsiveWidth) {
  2914.         uix.elm.mainContent.css({'marginRight': 0, 'marginLeft': 0});
  2915.     } else if (uix.sidebarVisible == 1) {
  2916.         uix.elm.mainContent.css(marginDirection, origSidebarMargin);
  2917.     }
  2918.     window.setTimeout(function () {
  2919.         window.requestAnimationFrame(function () {
  2920.             uix.elm.mainContent.css('transition', 'margin 0.4s ease-out');
  2921.         });
  2922.     }, 400)
  2923.     uix.tStamp("UIX.fn.mainSidebarResize", 2, pfTime);
  2924. }
  2925. uix.init.welcomeBlock = function () {
  2926.     var pfTime = uix.time();
  2927.     if (uix.elm.welcomeBlock.length && uix.elm.welcomeBlock.hasClass('uix_welcomeBlock_fixed')) {
  2928.         if ($.getCookie('uix_hiddenWelcomeBlock') == 1) {
  2929.             if (uix.reinsertWelcomeBlock) {
  2930.                 uix.elm.welcomeBlock.removeClass('uix_welcomeBlock_fixed');
  2931.             }
  2932.         } else {
  2933.             uix.elm.welcomeBlock.css({'display': 'block'});
  2934.         }
  2935.         uix.elm.welcomeBlock.find('.close').on('click', function (e) {
  2936.             e.preventDefault();
  2937.             $.setCookie('uix_hiddenWelcomeBlock', 1);
  2938.             window.requestAnimationFrame(function () {
  2939.                 uix.elm.welcomeBlock.css({'opacity': '0'});
  2940.                 window.setTimeout(function () {
  2941.                     window.requestAnimationFrame(function () {
  2942.                         if (uix.reinsertWelcomeBlock) {
  2943.                             uix.elm.welcomeBlock.removeClass('uix_welcomeBlock_fixed');
  2944.                             uix.elm.welcomeBlock.css('opacity', 1);
  2945.                             if (uix.sidebarSticky.running) uix.sidebarSticky.update();
  2946.                         } else {
  2947.                             uix.elm.welcomeBlock.css({'display': 'none'});
  2948.                         }
  2949.                     });
  2950.                 }, 500);
  2951.             });
  2952.         });
  2953.     }
  2954.     uix.tStamp("UIX.init.welcomeBlock", 1, pfTime);
  2955. };
  2956. uix.init.setupAdminLinks = function () {
  2957.     var modTabs = $('.moderatorTabs');
  2958.     if (modTabs.length) {
  2959.         var pfTime = uix.time();
  2960.         modTabs.children().each(function () {
  2961.             var $this = $(this);
  2962.             if ($this.is('a')) $this.addClass('navLink');
  2963.             if (!$this.is('li')) $this.wrap('<li class="navTab" />');
  2964.         });
  2965.         $('.uix_adminMenu .blockLinksList').children().each(function () {
  2966.             var $this = $(this);
  2967.             if ($this.is('a')) $this.addClass('navLink');
  2968.             if (!$this.is('li')) $this.wrap('<li class="navTab" />');
  2969.         });
  2970.         if ($('.admin', modTabs).length) {
  2971.             var
  2972.                 $itemCounts = $('.uix_adminMenu').find('.itemCount'), adminListTotal = 0, adminListTotalUnread = 0;
  2973.             $itemCounts.each(function () {
  2974.                 var $this = $(this)
  2975.                 adminListTotal += parseInt($this.text(), 10);
  2976.                 if ($this.hasClass('alert')) adminListTotalUnread = 1;
  2977.             });
  2978.             if (adminListTotal > 0) {
  2979.                 $('.admin .itemCount', modTabs).removeClass('Zero').find('.Total').text(adminListTotal);
  2980.                 if (adminListTotalUnread) $('.admin .itemCount', modTabs).addClass('alert');
  2981.             }
  2982.         }
  2983.         uix.tStamp("UIX.init.setupAdminLinks", 1, pfTime);
  2984.     }
  2985. }
  2986. uix.init.jumpToFixed = function () {
  2987.     var pfTime = uix.time();
  2988.     var scrollToThe = function (pos) {
  2989.         var pfTime2 = uix.time();
  2990.         if (pos == 'bottom') {
  2991.             $('html, body').stop().animate({scrollTop: $(document).height()}, 400);
  2992.         } else {
  2993.             uix.sticky.preventStickyTop = true;
  2994.             $('html, body').stop().animate({scrollTop: 0}, 400);
  2995.             window.setTimeout(function () {
  2996.                 uix.sticky.preventStickyTop = false;
  2997.             }, 400);
  2998.         }
  2999.         uix.tStamp("UIX.init.jumpToFixed", 2, pfTime2);
  3000.         return false;
  3001.     };
  3002.     var jumpToFixed = uix.elm.jumpToFixed;
  3003.     $('.topLink').on('click', function () {
  3004.         scrollToThe('top')
  3005.     });
  3006.     if (jumpToFixed.length) {
  3007.         jumpToFixed.find('a').on('click', function (e) {
  3008.             e.preventDefault();
  3009.             scrollToThe($(this).data('position'))
  3010.         });
  3011.         if (uix.jumpToFixed_delayHide) {
  3012.             jumpToFixed.hover(function () {
  3013.                 clearTimeout(uix.jumpToScrollTimer);
  3014.                 clearTimeout(uix.jumpToScrollHideTimer);
  3015.                 window.requestAnimationFrame(function () {
  3016.                     jumpToFixed.css({'display': 'block'});
  3017.                     uix.jumpToFixedOpacity = 1;
  3018.                     window.requestAnimationFrame(function () {
  3019.                         jumpToFixed.css({'opacity': '1'});
  3020.                     });
  3021.                 });
  3022.             }, function () {
  3023.                 window.requestAnimationFrame(function () {
  3024.                     uix.jumpToFixedOpacity = 0;
  3025.                     jumpToFixed.css({'opacity': '0'});
  3026.                     uix.jumpToScrollHideTimer = window.setTimeout(function () {
  3027.                         window.requestAnimationFrame(function () {
  3028.                             if (uix.jumpToFixedOpacity == 0) jumpToFixed.css({'display': 'none'});
  3029.                         });
  3030.                     }, 450);
  3031.                 });
  3032.             });
  3033.         }
  3034.         uix.jumpToFixedRunning = true;
  3035.     }
  3036.     uix.tStamp("UIX.init.jumpToFixed", 1, pfTime);
  3037. }
  3038. uix.init.fixScrollLocation = function () {
  3039.     var hash = document.location.hash
  3040.     if (hash.length > 2 && uix.sticky.scrollDetectorRunning == false) {
  3041.         var pfTime = uix.time();
  3042.         var $target = $(hash);
  3043.         if ($target.length) {
  3044.             var topOffset = $target.offset().top
  3045.             var newScroll = topOffset - uix.sticky.getOffset(topOffset);
  3046.             window.scrollTo(0, newScroll);
  3047.         }
  3048.         uix.tStamp("UIX.init.fixScrollLocation", 1, pfTime);
  3049.     }
  3050. }
  3051. uix.init.mainSidebar = function () {
  3052.     var pfTime = uix.time();
  3053.     var
  3054.         mainSidebar = uix.elm.sidebar, sidebarCollapse = $('.uix_sidebar_collapse'),
  3055.         sidebarCollapsePhrase = $('.uix_sidebar_collapse_phrase');
  3056.     if (mainSidebar.length) {
  3057.         if (uix.collapsibleSidebar && uix.canCollapseSidebar == "1") {
  3058.             if (XenForo.RTL) {
  3059.                 var marginDirection = (mainSidebar.hasClass('uix_mainSidebar_left')) ? 'marginRight' : 'marginLeft'
  3060.             } else {
  3061.                 var marginDirection = (mainSidebar.hasClass('uix_mainSidebar_left')) ? 'marginLeft' : 'marginRight'
  3062.             }
  3063.             var origSidebarMargin = 0;
  3064.             if (uix.mainContainerMargin.length) origSidebarMargin = uix.mainContainerMargin;
  3065.             sidebarCollapse.find('a').on('click', function (e) {
  3066.                 e.preventDefault();
  3067.                 if (uix.sidebarVisible == 1) {
  3068.                     if (typeof(uix.sidebarCookieExpire) === "undefined" || parseInt(uix.sidebarCookieExpire) <= 0 || uix.sidebarCookieExpire == "") {
  3069.                         $.setCookie("uix_collapsedSidebar", 1);
  3070.                     } else {
  3071.                         $.setCookie("uix_collapsedSidebar", 1, (Date.now() + (86400 * parseInt(uix.sidebarCookieExpire))));
  3072.                     }
  3073.                     window.requestAnimationFrame(function () {
  3074.                         sidebarCollapse.addClass('uix_sidebar_collapsed');
  3075.                         sidebarCollapsePhrase.text(uix.collapsibleSidebar_phrase_open);
  3076.                         mainSidebar.css({'opacity': '0'});
  3077.                         window.requestAnimationFrame(function () {
  3078.                             if (uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  3079.                                 window.setTimeout(function () {
  3080.                                     window.requestAnimationFrame(function () {
  3081.                                         uix.sidebarVisible = 0;
  3082.                                         mainSidebar.css({'display': 'none',});
  3083.                                         uix.elm.mainContent.css(marginDirection, 0);
  3084.                                         window.setTimeout(function () {
  3085.                                             window.requestAnimationFrame(function () {
  3086.                                                 if (uix.sidebarSticky.running) uix.sidebarSticky.unstick();
  3087.                                                 window.dispatchEvent(new Event('resize'));
  3088.                                             });
  3089.                                         }, 400);
  3090.                                     });
  3091.                                 }, 400);
  3092.                             } else {
  3093.                             }
  3094.                         })
  3095.                     });
  3096.                 } else {
  3097.                     $.setCookie("uix_collapsedSidebar", 0);
  3098.                     sidebarCollapse.removeClass('uix_sidebar_collapsed');
  3099.                     sidebarCollapsePhrase.text(uix.collapsibleSidebar_phrase_close);
  3100.                     var stickyCondition = (uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth && !uix.sidebarSticky.running && !uix.stickyForceDisable && uix.user.stickyEnableSidebar);
  3101.                     if (uix.sidebarSticky.running) uix.sidebarSticky.unstick();
  3102.                     window.requestAnimationFrame(function () {
  3103.                         mainSidebar.css({'opacity': '0'});
  3104.                         window.requestAnimationFrame(function () {
  3105.                             if (uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  3106.                                 uix.elm.mainContent.css(marginDirection, origSidebarMargin)
  3107.                                 window.setTimeout(function () {
  3108.                                     window.requestAnimationFrame(function () {
  3109.                                         mainSidebar.css({'display': 'block',});
  3110.                                         window.requestAnimationFrame(function () {
  3111.                                             mainSidebar.css({'opacity': '1'});
  3112.                                             window.setTimeout(function () {
  3113.                                                 window.dispatchEvent(new Event('resize'));
  3114.                                                 uix.sidebarVisible = 1;
  3115.                                                 if (stickyCondition) uix.sidebarSticky.init();
  3116.                                             }, 400);
  3117.                                         })
  3118.                                     })
  3119.                                 }, 400);
  3120.                             } else {
  3121.                                 mainSidebar.css({'display': 'block', 'opacity': '1'});
  3122.                                 uix.elm.mainContent.css(marginDirection, 0);
  3123.                                 window.dispatchEvent(new Event('resize'));
  3124.                             }
  3125.                         });
  3126.                     });
  3127.                 }
  3128.             });
  3129.             if ($.getCookie('uix_collapsedSidebar') == 1) {
  3130.                 uix.sidebarVisible = 0
  3131.                 window.requestAnimationFrame(function () {
  3132.                     sidebarCollapse.addClass('uix_sidebar_collapsed');
  3133.                     sidebarCollapsePhrase.text(uix.collapsibleSidebar_phrase_open);
  3134.                     mainSidebar.hide();
  3135.                     uix.elm.mainContent.css(marginDirection, 0);
  3136.                     window.dispatchEvent(new Event('resize'));
  3137.                     window.setTimeout(function () {
  3138.                         window.requestAnimationFrame(function () {
  3139.                             uix.elm.mainContent.css('transition', 'margin 0.4s ease-out');
  3140.                         });
  3141.                     }, 400)
  3142.                 });
  3143.             } else {
  3144.                 window.requestAnimationFrame(function () {
  3145.                     uix.elm.mainContent.css('transition', 'margin 0.4s ease-out');
  3146.                 });
  3147.             }
  3148.         } else {
  3149.         }
  3150.         uix.fn.updateSidebar()
  3151.     }
  3152.     uix.tStamp("UIX.init.mainSidebar", 1, pfTime);
  3153. };
  3154. uix.init.offcanvas = function () {
  3155.     var pfTime = uix.time();
  3156.     $('.uix_sidePane .navTab.selected').addClass('active');
  3157.     var liHeight = $('.uix_sidePane .navTab .blockLinksList li').height();
  3158.     $('.uix_sidePane .navTab.selected .subMenu').css('maxHeight', ($('.blockLinksList li', $('.uix_sidePane .navTab.selected')).length * liHeight) + 'px')
  3159.     $('.uix_sidePane .SplitCtrl').on('click', function (e) {
  3160.         if ($(e.target).closest('.navTab').hasClass('active')) {
  3161.             $('.uix_sidePane .navTab').removeClass('active');
  3162.             $('.uix_sidePane .navTab .subMenu').css('maxHeight', '')
  3163.         } else {
  3164.             $('.uix_sidePane .navTab').removeClass('active');
  3165.             $('.uix_sidePane .navTab .subMenu').css('maxHeight', '')
  3166.             $(e.target).closest('.navTab').addClass('active');
  3167.             $('.subMenu', $(e.target).closest('.navTab')).css('maxHeight', ($('.blockLinksList li', $(e.target).closest('.navTab')).length * liHeight) + 'px')
  3168.         }
  3169.         return false;
  3170.     });
  3171.     uix.offcanvas = {};
  3172.     uix.offcanvas.wrapper = $('.off-canvas-wrapper');
  3173.     uix.offcanvas.exit = $('.exit-off-canvas');
  3174.     uix.offcanvas.move = function (direction) {
  3175.         window.requestAnimationFrame(function () {
  3176.             uix.offcanvas.exit.css({display: 'block',});
  3177.             window.requestAnimationFrame(function () {
  3178.                 uix.offcanvas.wrapper.addClass('move-' + direction);
  3179.                 uix.hideDropdowns.hide();
  3180.             })
  3181.         })
  3182.     }, uix.offcanvas.reset = function () {
  3183.         window.requestAnimationFrame(function () {
  3184.             uix.offcanvas.wrapper.removeClass('move-right').removeClass('move-left');
  3185.             window.setTimeout(function () {
  3186.                 window.requestAnimationFrame(function () {
  3187.                     uix.offcanvas.exit.css({display: '',});
  3188.                 })
  3189.             }, 500)
  3190.         })
  3191.     };
  3192.     $('#uix_paneTriggerLeft').on('click', function () {
  3193.         if (XenForo.isRTL()) {
  3194.             uix.offcanvas.move('left');
  3195.         } else {
  3196.             uix.offcanvas.move('right');
  3197.         }
  3198.         return false;
  3199.     });
  3200.     $('#uix_paneTriggerRight').on('click', function () {
  3201.         if (XenForo.isRTL()) {
  3202.             uix.offcanvas.move('right');
  3203.         } else {
  3204.             uix.offcanvas.move('left');
  3205.         }
  3206.         return false;
  3207.     });
  3208.     uix.offcanvas.exit.on('click', function () {
  3209.         uix.offcanvas.reset();
  3210.         return false;
  3211.     });
  3212.     uix.tStamp("UIX.init.offCanvas", 1, pfTime);
  3213. }
  3214. uix.init.offCanvasVisitor = function () {
  3215.     window.setInterval(function () {
  3216.         uix.fn.syncBaloon($('#VisitorExtraMenu_Counter'), $('#uix_VisitorExtraMenu_Counter'));
  3217.         uix.fn.syncBaloon($('#ConversationsMenu_Counter'), $('#uix_ConversationsMenu_Counter'));
  3218.         uix.fn.syncBaloon($('#AlertsMenu_Counter'), $('#uix_AlertsMenu_Counter'));
  3219.     }, 3000);
  3220. }
  3221. uix.init.scrollFunctions = function () {
  3222.     var scrollTimer = null, endScroll = null, lastScroll = -1;
  3223.     newScroll = false, $(window).on('scroll', function (e) {
  3224.         if (uix.initDone) scrollEvent();
  3225.     });
  3226.  
  3227.     function scrollEvent() {
  3228.         newScroll = true;
  3229.         if (scrollTimer == null) {
  3230.             scrollTimer = window.requestAnimationFrame(function () {
  3231.                 scrollUpdate();
  3232.                 scrollTimer = null;
  3233.                 window.clearTimeout(endScroll);
  3234.                 endScroll = setTimeout(function () {
  3235.                     newScroll = false;
  3236.                     momentumScroll(0);
  3237.                 }, 50);
  3238.             });
  3239.         }
  3240.     }
  3241.  
  3242.     function momentumScroll(depth) {
  3243.         if (depth < 6 && newScroll == false) {
  3244.             window.setTimeout(function () {
  3245.                 window.requestAnimationFrame(function () {
  3246.                     scrollUpdate();
  3247.                     momentumScroll(depth + 1)
  3248.                 })
  3249.             }, 100)
  3250.         }
  3251.     }
  3252.  
  3253.     function scrollUpdate() {
  3254.         var pfTime = uix.time();
  3255.         if (uix.viewport.running) uix.viewport.get();
  3256.         if (uix.sticky.running) uix.sticky.checkGet();
  3257.         if (uix.smallLogo.running) uix.smallLogo.get();
  3258.         if (uix.viewport.running) uix.viewport.set();
  3259.         if (uix.sticky.running) uix.sticky.checkSet();
  3260.         if (uix.sidebarSticky.running) uix.sidebarSticky.check();
  3261.         if (uix.jumpToFixedRunning) uix.fn.jumpToFixed();
  3262.         lastScroll = uix.scrollTop;
  3263.         uix.tStamp("UIX.scrollUpdate", 1, pfTime);
  3264.     }
  3265. }
  3266. uix.init.resizeFunctions = function () {
  3267.     var resizeTimer = null, endSResize = null;
  3268.     $(window).on('resize orientationchange', function (e) {
  3269.         if (uix.initDone) resizeEvent();
  3270.     });
  3271.  
  3272.     function resizeEvent() {
  3273.         if (resizeTimer == null) {
  3274.             resizeTimer = window.requestAnimationFrame(function () {
  3275.                 resizeUpdate();
  3276.                 resizeTimer = null;
  3277.                 window.clearTimeout(endSResize);
  3278.             });
  3279.         } else {
  3280.             endSResize = setTimeout(function () {
  3281.                 window.requestAnimationFrame(function () {
  3282.                     resizeUpdate();
  3283.                 });
  3284.             }, 250);
  3285.         }
  3286.     }
  3287.  
  3288.     function resizeUpdate() {
  3289.         var pfTime = uix.time();
  3290.         uix.viewport.init();
  3291.         uix.toggleWidth.resize();
  3292.         if (uix.enableBorderCheck) uix.checkRadius.resize();
  3293.         if (uix.offCanvasSidebar) uix.userBar.check();
  3294.         if (uix.sticky.running) uix.sticky.resize();
  3295.         if (uix.enableBorderCheck) uix.checkRadius.check(true);
  3296.         if (audentio.grid.running) audentio.grid.update();
  3297.         if (uix.elm.sidebar.length) {
  3298.             uix.fn.mainSidebarResize();
  3299.             uix.fn.updateSidebar();
  3300.         }
  3301.         uix.sidebarSticky.resize();
  3302.         if (uix.smallLogo.running) uix.smallLogo.resize();
  3303.         if (uix.enableBorderCheck) uix.ulManager.check();
  3304.         if (audentio.pagination.enabled) audentio.pagination.update();
  3305.         if (uix.stickyFooter.running) uix.stickyFooter.check();
  3306.         uix.tStamp("UIX.resizeUpdate", 1, pfTime);
  3307.     }
  3308. }
  3309. uix.init.search = function () {
  3310.     if ($('#searchBar.hasSearchButton').length) {
  3311.         $("#QuickSearch .primaryControls span").click(function (e) {
  3312.             e.preventDefault();
  3313.             $("#QuickSearch > .formPopup").submit();
  3314.         });
  3315.     }
  3316.     if (uix.searchMinimalSize > 0 && $('#QuickSearchPlaceholder').length && uix.searchPosition != 0) {
  3317.         uix.init.searchClick();
  3318.         $(window).on('resize', function () {
  3319.             uix.init.searchClick();
  3320.         });
  3321.         $('#uix_searchMinimalClose').on('click', function (e) {
  3322.             e.preventDefault();
  3323.             uix.fn.searchClick();
  3324.         });
  3325.         $('#uix_searchMinimalOptions').on('click', function (e) {
  3326.             e.preventDefault();
  3327.             var delay = 0;
  3328.             if (uix.searchMinimalState == 1) {
  3329.                 delay = 400;
  3330.                 uix.fn.searchClick();
  3331.             }
  3332.             setTimeout(function () {
  3333.                 window.requestAnimationFrame(function () {
  3334.                     $('#QuickSearch').css({'opacity': 0, 'transtion': 'opacity 0.3s'})
  3335.                     window.requestAnimationFrame(function () {
  3336.                         $('#QuickSearch').addClass('show');
  3337.                         $('#QuickSearchPlaceholder').addClass('hide');
  3338.                         window.requestAnimationFrame(function () {
  3339.                             $('#QuickSearch').css({'opacity': 1})
  3340.                             $('#QuickSearchQuery').focus();
  3341.                             window.setTimeout(function () {
  3342.                                 window.requestAnimationFrame(function () {
  3343.                                     $('#QuickSearch').css({'opacity': '', 'transtion': ''})
  3344.                                 });
  3345.                             }, 300);
  3346.                         });
  3347.                     });
  3348.                 });
  3349.             }, delay);
  3350.         });
  3351.         if (uix.searchPosition != 1) {
  3352.             var search = $('#searchBar');
  3353.             var searchContainer = search.parent();
  3354.             var searchContainerSiblings = searchContainer.siblings();
  3355.             var searchParentSiblings = searchContainer.parent().siblings();
  3356.             for (var i = 0, len = search.length; i < len; i++) {
  3357.                 uix.searchEles.push([$(search[i]), 0]);
  3358.             }
  3359.             for (var i = 0, len = searchContainerSiblings.length; i < len; i++) {
  3360.                 if (searchContainerSiblings[i].id !== "uix_searchMinimal") uix.searchEles.push([$(searchContainerSiblings[i]), 0]);
  3361.             }
  3362.             for (var i = 0, len = searchParentSiblings.length; i < len; i++) {
  3363.                 if (searchParentSiblings[i].id !== "uix_searchMinimal") {
  3364.                     if (uix.searchPosition == 2) {
  3365.                         if ($(searchParentSiblings[i]).hasClass('publicTabs')) {
  3366.                             var publicTabsChildren = $('.publicTabs>li');
  3367.                             for (var j = 0, len2 = publicTabsChildren.length; j < len2; j++) {
  3368.                                 if ($(publicTabsChildren[j]).hasClass('selected')) {
  3369.                                     var selectedChildren = $(publicTabsChildren[j]).children();
  3370.                                     for (var k = 0, len3 = selectedChildren.length; k < len3; k++) {
  3371.                                         if ($(selectedChildren[k]).hasClass('tabLinks') == false) {
  3372.                                             uix.searchEles.push([$(selectedChildren[k]), 0]);
  3373.                                         }
  3374.                                     }
  3375.                                 } else {
  3376.                                     uix.searchEles.push([$(publicTabsChildren[j]), 0]);
  3377.                                 }
  3378.                             }
  3379.                         } else {
  3380.                             uix.searchEles.push([$(searchParentSiblings[i]), 0]);
  3381.                         }
  3382.                     } else {
  3383.                         uix.searchEles.push([$(searchParentSiblings[i]), 0]);
  3384.                     }
  3385.                 }
  3386.             }
  3387.         }
  3388.     }
  3389. }
  3390. uix.init.searchClick = function () {
  3391.     if (uix.windowWidth > uix.searchMinimalSize && uix.slidingSearchEnabled != 0) {
  3392.         $("#QuickSearchPlaceholder").unbind("click")
  3393.         $('#QuickSearchPlaceholder').click(function (e) {
  3394.             e.preventDefault();
  3395.             window.requestAnimationFrame(function () {
  3396.                 $('#QuickSearch').addClass('show');
  3397.                 $('#QuickSearchPlaceholder').addClass('hide');
  3398.                 $('#QuickSearchQuery').focus();
  3399.             });
  3400.         });
  3401.         uix.slidingSearchEnabled = 0;
  3402.     } else if (uix.windowWidth <= uix.searchMinimalSize && uix.slidingSearchEnabled != 1) {
  3403.         $("#QuickSearchPlaceholder").unbind("click")
  3404.         $('#QuickSearchPlaceholder').on('click', function (e) {
  3405.             e.preventDefault();
  3406.             uix.fn.searchClick();
  3407.         });
  3408.         uix.slidingSearchEnabled = 1;
  3409.     }
  3410. }
  3411. uix.init.offsetAnchors = function () {
  3412.     var anchors = document.getElementsByTagName("a")
  3413.     for (var i = 0, len = anchors.length; i < len; i++) {
  3414.         var a = anchors[i], href = a.href;
  3415.         if (href.indexOf("#") !== -1) {
  3416.             var split = href.split("#");
  3417.             if (split.length == 2 && split[1].length > 0) {
  3418.                 var addListener = true;
  3419.                 var parEle = a.parentElement;
  3420.                 if (typeof(a.className) !== "undefined" && a.className.indexOf("AttributionLink") !== -1) addListener = false;
  3421.                 if (parEle.className.indexOf("navControls") !== -1) addListener = false;
  3422.                 if (parEle.className.indexOf("topLink") !== -1) addListener = false;
  3423.                 if (parEle.id == "uix_jumpToFixed") addListener = false;
  3424.                 if (typeof(parEle.parentElement.className) !== "undefined") {
  3425.                     if (parEle.parentElement.className.indexOf("Tabs") !== -1) addListener = false;
  3426.                 }
  3427.                 if (addListener) {
  3428.                     a.addEventListener("click", uix.fn.scrollToAnchor);
  3429.                 }
  3430.             }
  3431.         }
  3432.     }
  3433. }
  3434. uix.navTabs = function () {
  3435.     if (uix.windowWidth > uix.offCanvasTriggerWidth) {
  3436.         XenForo.updateVisibleNavigationTabs();
  3437.     }
  3438. }
  3439. uix.initGlobalVars = function () {
  3440.     uix.jsVersion = "1.4.6.0";
  3441.     uix.windowWidth = 0;
  3442.     uix.windowHeight = 0;
  3443.     uix.documentHeight = 0;
  3444.     uix.scrollTop = 0;
  3445.     uix.elm = {
  3446.         html: $('html'),
  3447.         navigation: $('#navigation'),
  3448.         logo: $('#logo'),
  3449.         logoSmall: $('#logo_small'),
  3450.         jumpToFixed: $('#uix_jumpToFixed'),
  3451.         mainContainer: $('.mainContainer'),
  3452.         mainContent: $('.mainContent', uix.elm.mainContainer),
  3453.         welcomeBlock: $('#uix_welcomeBlock'),
  3454.         sidebar: $('.uix_mainSidebar'),
  3455.         sidebar_inner: $('.sidebar', uix.elm.sidebar),
  3456.     };
  3457.     uix.sidebarVisible = 1;
  3458.     uix.hasSticky = Object.keys(uix.stickyItems).length > 0 ? true : false;
  3459.     uix.contentHeight = uix.elm.mainContent.outerHeight();
  3460.     uix.emBreak = uix.elm.mainContainer.scrollTop();
  3461.     uix.slidingSidebar = true;
  3462.     uix.jumpToScrollTimer = null;
  3463.     uix.jumpToScrollHideTimer = null;
  3464.     uix.jumpToFixedRunning = false;
  3465.     uix.jumpToFixedOpacity = 0;
  3466.     uix.stickyForceDisable = false, uix.slidingSearchEnabled = 0;
  3467.     uix.searchMinimalState = -1;
  3468.     uix.searchEles = [];
  3469.     uix.logoVisible = 0;
  3470.     uix.pfLog = false;
  3471.     uix.pfTime = uix.time(true);
  3472.     uix.initTime = null;
  3473.     uix.xfTime = null;
  3474.     uix.initDone = false;
  3475.     uix.updateNavTabs = false;
  3476.     uix.initLog = [];
  3477.     if (typeof(uix.sidebarMaxResponsiveWidthStr) === 'string' && uix.sidebarMaxResponsiveWidthStr.replace(" ", "") == "100%") uix.sidebarMaxResponsiveWidth = 999999;
  3478. }
  3479. uix.initFunc = function () {
  3480.     uix.initGlobalVars();
  3481.     $(window).on('load', uix.init.fixScrollLocation);
  3482.     uix.initGet = function () {
  3483.     }, uix.initSet = function () {
  3484.     }, uix.initFuncInner = function () {
  3485.         if (uix.betaMode) console.warn("%cUI.X IS IN BETA MODE", "color:#E74C3C;font-weight:bold");
  3486.         if (!uix.elm.html.hasClass("flexbox")) uix.elm.html.removeClass("hasFlexbox")
  3487.         uix.logI("Pre UIX Viewport Init");
  3488.         uix.slidingSidebar = false;
  3489.         uix.viewport.init();
  3490.         uix.logI("Pre UIX Welcome Block Init");
  3491.         uix.init.welcomeBlock();
  3492.         if (uix.elm.sidebar.length && uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth) {
  3493.             uix.logI("Pre UIX Sidebar Init");
  3494.             uix.sidebarSticky.innerWrapper = uix.elm.sidebar_inner;
  3495.         }
  3496.         uix.logI("Pre UIX Main Sidebar Init");
  3497.         uix.init.mainSidebar();
  3498.         uix.logI("Pre UIX Collapsible Nodes Init");
  3499.         uix.collapsible.init();
  3500.         if (uix.offCanvasSidebar) {
  3501.             uix.logI("Pre UIX Off Canvas Init");
  3502.             uix.init.offcanvas();
  3503.             uix.userBar.check();
  3504.         }
  3505.         uix.logI("Pre UIX AdminLinks Init");
  3506.         uix.init.setupAdminLinks();
  3507.         if (uix.hasSticky) {
  3508.             if (uix.stickyDisableIOSThirdParty) {
  3509.                 var userAgent = navigator.userAgent;
  3510.                 if (userAgent.match(/(iPod|iPhone|iPad)/)) {
  3511.                     for (var i = 1; i < 8; i++) {
  3512.                         if (userAgent.indexOf("OS " + i + "_") > -1) uix.stickyForceDisable = true;
  3513.                     }
  3514.                     if (userAgent.indexOf("OS 8_") > -1) {
  3515.                         if (userAgent.indexOf("Version/") == -1) uix.stickyForceDisable = true;
  3516.                     }
  3517.                 } else if (userAgent.match(/Android/)) {
  3518.                     if (userAgent.indexOf("Android 1") > -1) uix.stickyForceDisable = true;
  3519.                     if (userAgent.indexOf("Android 2") > -1) uix.stickyForceDisable = true;
  3520.                     if (userAgent.indexOf("Android 3") > -1) uix.stickyForceDisable = true;
  3521.                 }
  3522.             }
  3523.             if (!uix.stickyForceDisable) {
  3524.                 uix.logI("Pre UIX Sticky Init");
  3525.                 uix.init.sticky();
  3526.             }
  3527.         }
  3528.         if (uix.nodeStyle == 3) {
  3529.             uix.logI("Pre UIX Grid Layout Init");
  3530.             audentio.grid.init();
  3531.         }
  3532.         if (uix.elm.sidebar.length && uix.stickySidebar && uix.windowWidth > uix.sidebarMaxResponsiveWidth && uix.sidebarVisible == 1 && !uix.stickyForceDisable && uix.user.stickyEnableSidebar) {
  3533.             uix.logI("Pre UIX Sticky Sidebar Init");
  3534.             uix.sidebarSticky.init();
  3535.         }
  3536.         if (audentio.pagination.enabled) {
  3537.             uix.logI("Pre UIX Pagination Init");
  3538.             audentio.pagination.init();
  3539.         }
  3540.         uix.logI("Pre UIX Fix Scroll Location Init");
  3541.         uix.init.fixScrollLocation();
  3542.         uix.logI("Pre UIX Scroll Functions Init");
  3543.         uix.init.scrollFunctions();
  3544.         if (uix.enableStickyFooter) {
  3545.             uix.logI("Pre UIX Sticky Footer Init");
  3546.             uix.stickyFooter.init();
  3547.         }
  3548.         uix.logI("Pre UIX Search Init");
  3549.         uix.init.search();
  3550.         uix.logI("Pre UIX Resize Init");
  3551.         uix.init.resizeFunctions();
  3552.         uix.logI("Pre UIX SmallLogo Init");
  3553.         uix.smallLogo.init()
  3554.         if (uix.enableBorderCheck) {
  3555.             uix.logI("Pre UIX UL Manager Check Get");
  3556.             uix.ulManager.checkGet();
  3557.         }
  3558.         uix.slidingSidebar = true;
  3559.         uix.logI("Pre UIX content Init");
  3560.         if ($("#content.register_form").length) $("#loginBarHandle").hide();
  3561.         if (uix.updateNavTabs) {
  3562.             uix.logI("Pre XenForo tab Init");
  3563.             uix.navTabs();
  3564.         }
  3565.         if (uix.offCanvasSidebarVisitorTabs) {
  3566.             uix.logI("Pre UIX Offcanvas Visitor Tabs Init");
  3567.             uix.init.offCanvasVisitor();
  3568.         }
  3569.         uix.logI("Pre UIX Jump to Fixed Init");
  3570.         uix.init.jumpToFixed();
  3571.         if (uix.enableStickyFooter) {
  3572.             uix.logI("Pre UIX Sticky Footer Set");
  3573.             uix.stickyFooter.set();
  3574.             if (uix.stickyFooter.state == 1) uix.stickyFooter.check();
  3575.         }
  3576.         if (uix.toggleWidthEnabled) {
  3577.             uix.logI("Pre UIX Toggle Width Setup");
  3578.             uix.toggleWidth.setup();
  3579.         }
  3580.         if (uix.enableBorderCheck) {
  3581.             uix.logI("Pre UIX Check Radius Init");
  3582.             uix.checkRadius.init();
  3583.             uix.logI("Pre UIX UL Manager Check Set");
  3584.             uix.ulManager.checkSet();
  3585.         }
  3586.         uix.logI("Pre UIX Offset Anchors");
  3587.         uix.init.offsetAnchors();
  3588.     }
  3589.     uix.logI("Pre UIX Init");
  3590.     uix.initFuncInner();
  3591.     uix.initDone = true;
  3592.     uix.initTime = "UI.X initialized in " + uix.round(uix.time(true) - uix.pfTime, 4) + " ms.";
  3593.     uix.log(uix.initTime, "color:#008F00");
  3594.     uix.xfTime = "Xenforo loaded in " + (Date.now() - XenForo._pageLoadTime * 1000) + " ms.  UI.X was " + uix.round(((uix.time(true) - uix.pfTime) / (Date.now() - XenForo._pageLoadTime * 1000)) * 100, 2) + "% of that time.";
  3595.     uix.log(uix.xfTime, "color:#00A3CC");
  3596.     uix.initLog.push(["Post UIX Init", (uix.time(true) - uix.pfTime)])
  3597. }
RAW Paste Data