PageSourceSearch

https://www.tiogaisd.net/javascripts/min/L15/L15-head.min.js?v=220714

js tiogaisd.net collected 2026-10-04 01:37:18 UTC 50,648 bytes, 513 lines download raw bytes

1/*!
2 FastClick: polyfill to remove click delays on browsers with touch UIs.
3
4 @version 1.0.6
5 @codingstandard ftlabs-jsv2
6 @copyright The Financial Times Limited [All Rights Reserved]
7 @license MIT License (see LICENSE.txt)
8 https://github.com/ftlabs/fastclick
9*/
10!function(){"use strict";function t(e,o){function i(t,e){return function(){return t.apply(e,arguments)}}var r;if(o=o||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=o.touchBoundary||10,this.layer=e,this.tapDelay=o.tapDelay||200,this.tapTimeout=o.tapTimeout||700,!t.notNeeded(e)){for(var a=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],c=this,s=0,u=a.length;u>s;s++)c[a[s]]=i(c[a[s]],c);n&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,o){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,o):i.call(e,t,n,o)},e.addEventListener=function(t,n,o){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),o):i.call(e,t,n,o)}),"function"==typeof e.onclick&&(r=e.onclick,e.addEventListener("click",function(t){r(t)},!1),e.onclick=null)}}var e=navigator.userAgent.indexOf("Windows Phone")>=0,n=navigator.userAgent.indexOf("Android")>0&&!e,o=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,i=o&&/OS 4_\d(_\d)?/.test(navigator.userAgent),r=o&&/OS [6-7]_\d/.test(navigator.userAgent),a=navigator.userAgent.indexOf("BB10")>0;t.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(o&&"file"===t.type||t.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(t.className)},t.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!n;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},t.prototype.sendClick=function(t,e){var n,o;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),o=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,o.screenX,o.screenY,o.clientX,o.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},t.prototype.determineEventType=function(t){return n&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},t.prototype.focus=function(t){var e;o&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type&&"month"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},t.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},t.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},t.prototype.onTouchStart=function(t){var e,n,r;if(t.targetTouches.length>1)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],o){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,t.timeStamp-this.lastClickTime<this.tapDelay&&t.preventDefault(),!0},t.prototype.touchHasMoved=function(t){var e=t.changedTouches[0],n=this.touchBoundary;return Math.abs(e.pageX-this.touchStartX)>n||Math.abs(e.pageY-this.touchStartY)>n?!0:!1},t.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},t.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input
10:not([type=hidden]), keygen, meter, output, progress, select, textarea")},t.prototype.onTouchEnd=function(t){var e,a,c,s,u,l=this.targetElement;if(!this.trackingClick)return!0;if(t.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0,!0;if(t.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,a=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,r&&(u=t.changedTouches[0],l=document.elementFromPoint(u.pageX-window.pageXOffset,u.pageY-window.pageYOffset)||l,l.fastClickScrollParent=this.targetElement.fastClickScrollParent),c=l.tagName.toLowerCase(),"label"===c){if(e=this.findControl(l)){if(this.focus(l),n)return!1;l=e}}else if(this.needsFocus(l))return t.timeStamp-a>100||o&&window.top!==window&&"input"===c?(this.targetElement=null,!1):(this.focus(l),this.sendClick(l,t),o&&"select"===c||(this.targetElement=null,t.preventDefault()),!1);return o&&!i&&(s=l.fastClickScrollParent,s&&s.fastClickLastScrollTop!==s.scrollTop)?!0:(this.needsClick(l)||(t.preventDefault(),this.sendClick(l,t)),!1)},t.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},t.prototype.onMouse=function(t){return this.targetElement?t.forwardedTouchEvent?!0:t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0:!0},t.prototype.onClick=function(t){var e;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(e=this.onMouse(t),e||(this.targetElement=null),e)},t.prototype.destroy=function(){var t=this.layer;n&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},t.notNeeded=function(t){var e,o,i,r;if("undefined"==typeof window.ontouchstart)return!0;if(o=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!n)return!0;if(e=document.querySelector("meta[name=viewport]")){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(o>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(a&&(i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),i[1]>=10&&i[2]>=3&&(e=document.querySelector("meta[name=viewport]")))){if(-1!==e.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===t.style.msTouchAction||"manipulation"===t.style.touchAction?!0:(r=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1],r>=27&&(e=document.querySelector("meta[name=viewport]"),e&&(-1!==e.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))?!0:"none"===t.style.touchAction||"manipulation"===t.style.touchAction?!0:!1)},t.attach=function(e,n){return new t(e,n)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return t}):"undefined"!=typeof module&&module.exports?(module.exports=t.attach,module.exports.FastClick=t):window.FastClick=t}();
11;
12/*!
13 * jQuery Smart Banner
14 * Copyright (c) 2012 Arnold Daniels <[email protected]>
15 * Based on 'jQuery Smart Web App Banner' by Kurt Zenisek @ kzeni.com
16 */
17!function($) {
18    var SmartBanner = function(options) {
19        this.origHtmlMargin = parseFloat($('html').css('margin-top')) // Get the original margin-top of the HTML element so we can take that into account
20        this.options = $.extend({}, $.smartbanner.defaults, options)
21        
22        var standalone = navigator.standalone // Check if it's already a standalone web app or running within a webui view of an app (not mobile safari)
23
24if (navigator.userAgent.match(/iPad|iPhone|iPod/i) != null) $('html').addClass('iOS');
25
26        // Detect banner type (iOS or Android)
27        if (this.options.force) {
28            this.type = this.options.force
29        } else if (navigator.userAgent.match(/iPad|iPhone|iPod/i) != null) {
30            if (navigator.userAgent.match(/Safari/i) != null &&
31               (navigator.userAgent.match(/CriOS/i) != null ||
32               window.Number(navigator.userAgent.substr(navigator.userAgent.indexOf('OS ') + 3, 3).replace('_', '.')) < 6)) this.type = 'ios' // Check webview and native smart banner support (iOS 6+)
33        } else if (navigator.userAgent.match(/Android/i) != null) {
34            this.type = 'android'
35        }
36        
37        // Don't show banner if device isn't iOS or Android, website is loaded in app or user dismissed banner
38        if (!this.type || standalone || this.getCookie('sb-closed') || this.getCookie('sb-installed')) {
39            return
40        }
41        
42        // Calculate scale
43        this.scale = this.options.scale == 'auto' ? $(window).width() / window.screen.width : this.options.scale
44        if (this.scale < 1) this.scale = 1
45
46        // Get info from meta data
47        var meta = $(this.type=='android' ? 'meta[name="google-play-app"]' : 'meta[name="apple-itunes-app"]')
48        if (meta.length == 0) return
49        
50        this.appId = /app-id=([^\s,]+)/.exec(meta.attr('content'))[1]
51        this.title = this.options.title ? this.options.title : meta.data('title') || $('title').text().replace(/\s*[|\-·].*$/, '')
52        this.author = this.options.author ? this.options.author : meta.data('author') || ($('meta[name="author"]').length ? $('meta[name="author"]').attr('content') : window.location.hostname)
53        this.iconUrl = meta.data('icon-url');
54        this.price = meta.data('price');
55
56        // Create banner
57        this.create()
58        this.show()
59        this.listen()
60    }
61        
62    SmartBanner.prototype = {
63
64        constructor: SmartBanner
65    
66      , create: function() {
67            var iconURL
68              , link=(this.options.url ? this.options.url : (this.type=='android' ? 'market://details?id=' : ('https://itunes.apple.com/' + this.options.appStoreLanguage + '/app/id')) + this.appId)
69              , price = this.price || this.options.price
70              , inStore = price ? price + ' - ' + (this.type=='android' ? this.options.inGooglePlay : this.options.inAppStore) : ''
71              , gloss=this.options.iconGloss === null ? (this.type=='ios') : this.options.iconGloss
72
73            $('body').append('<div id="smartbanner" class="'+this.type+'"><div class="sb-container"><a href="#" class="sb-close">&times;</a><span class="sb-icon"></span><div class="sb-info"><strong>'+this.title+'</strong><span>'+this.author+'</span><span>'+inStore+'</span></div><a href="'+link+'" class="sb-button"><span>'+this.options.button+'</span></a></div></div>')
74
75            if (this.options.icon) {
76                iconURL = this.options.icon
77            } else if(this.iconUrl) {
78                iconURL = this.iconUrl;
79            } else if ($('link[rel="apple-touch-icon-precomposed"]').length > 0) {
80                iconURL = $('link[rel="apple-touch-icon-precomposed"]').attr('href')
81                if (this.options.iconGloss === null) gloss = false
82            } else if ($('link[rel="apple-touch-icon"]').length > 0) {
83                iconURL = $('link[rel="apple-touch-icon"]').attr('href')
84            }
85            if (iconURL) {
86                $('#smartbanner .sb-icon').css('background-image','url('+iconURL+')')
87                if (gloss) $('#smartbanner .sb-icon').addClass('gloss')
88            } else{
89                $('#smartbanner').addClass('no-icon')
90            }
91
92            this.bannerHeight = $('#smartbanner').outerHeight() + 2
93
94            if (this.scale > 1) {
95                $('#smartbanner')
96                    .css('top', parseFloat($('#smartbanner').css('top')) * this.scale)
97                    .css('height', parseFloat($('#smartbanner').css('height')) * this.scale)
98                $('#smartbanner .sb-container')
99                    .css('-webkit-transform', 'scale('+this.scale+')')
100                    .css('-msie-transform', 'scale('+this.scale+')')
101                    .css('-moz-transform', 'scale('+this.scale+')')
102                    .css('width', $(window).width() / this.scale)
103            }
104        }
105        
106      , listen: function () {
107            $('#smartbanner .sb-close').on('click',$.proxy(this.close, this))
108            $('#smartbanner .sb-button').on('click',$.proxy(this.install, this))
109        }
110        
111      , show: function(callback) {
112            $('#smartbanner').stop().animate({top:0},this.options.speedIn).addClass('shown')
113//            $('html').animate({marginTop:this.origHtmlMargin+(this.bannerHeight*this.scale)},this.options.speedIn,'swing',callback)
114            $('html').animate({marginTop:this.origHtmlMargin+(this.bannerHeight*this.scale)-38},this.options.speedIn,'swing',callback).addClass('smartbanner');
115        }
116        
117      , hide: function(callback) {
118            $('#smartbanner').stop().animate({top:-1*this.bannerHeight*this.scale},this.options.speedOut).removeClass('shown')
119//            $('html').animate({marginTop:this.origHtmlMargin},this.options.speedOut,'swing',callback)
120            $('html').animate({marginTop:this.origHtmlMargin},this.options.speedOut,'swing',callback).removeClass('smartbanner iOS');
121        }
122      
123      , close: function(e) {
124            e.preventDefault()
125            this.hide()
126            this.setCookie('sb-closed','true',this.options.daysHidden)
127        }
128       
129      , install: function(e) {
130            this.hide()
131            this.setCookie('sb-installed','true',this.options.daysReminder)
132        }
133       
134      , setCookie: function(name, value, exdays) {
135            var exdate = new Date()
136            exdate.setDate(exdate.getDate()+exdays)
137            value=escape(value)+((exdays==null)?'':'; expires='+exdate.toUTCString())
138            document.cookie=name+'='+value+'; path=/;'
139        }
140        
141      , getCookie: function(name) {
142            var i,x,y,ARRcookies = document.cookie.split(";")
143            for(i=0;i<ARRcookies.length;i++) {
144                x = ARRcookies[i].substr(0,ARRcookies[i].indexOf("="))
145                y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1)
146                x = x.replace(/^\s+|\s+$/g,"")
147                if (x==name) {
148                    return unescape(y)
149                }
150            }
151            return null
152        }
153      
154      // Demo only
155      , switchType: function() {
156          var that = this
157          
158          this.hide(function() {
159            that.type = that.type=='android' ? 'ios' : 'android'
160            var meta = $(that.type=='android' ? 'meta[name="google-play-app"]' : 'meta[name="apple-itunes-app"]').attr('content')
161            that.appId = /app-id=([^\s,]+)/.exec(meta)[1]
162            
163            $('#smartbanner').detach()
164            that.create()
165            that.show()
166          })
167        }
168    }
169
170    $.smartbanner = function(option) {
171        var $window = $(window)
172        , data = $window.data('typeahead')
173        , options = typeof option == 'object' && option
174      if (!data) $window.data('typeahead', (data = new SmartBanner(options)))
175      if (typeof option == 'string') data[option]()
176    }
177    
178    // override these globally if you like (they are all optional)
179    $.smartbanner.defaults = {
180        title: null, // What the title of the app should be in the banner (defaults to <title>)
181        author: null, // What the author of the app should be in the banner (defaults to <meta name="author"> or hostname)
182        price: 'FREE', // Price of the app
183        appStoreLanguage: 'us', // Language code for App Store
184        inAppStore: 'On the App Store', // Text of price for iOS
185        inGooglePlay: 'In Google Play', // Text of price for Android
186        icon: null, // The URL of the icon (defaults to <meta name="apple-touch-icon">)
187        iconGloss: null, // Force gloss effect for iOS even for precomposed
188        button: 'VIEW', // Text for the install button
189        url: null, // The URL for the button. Keep null if you want the button to link to the app store.
190        scale: 'auto', // Scale based on viewport size (set to 1 to disable)
191        speedIn: 300, // Show animation speed of the banner
192        speedOut: 400, // Close animation speed of the banner
193        daysHidden: 15, // Duration to hide the banner after being closed (0 = always show banner)
194        daysReminder: 90, // Duration to hide the banner after "VIEW" is clicked *separate from when the close button is clicked* (0 = always show banner)
195        force: null // Choose 'ios' or 'android'. Don't do a browser check, just always show this banner
196    }
197    
198    $.smartbanner.Constructor = SmartBanner
199
200}(window.jQuery);
201;
202/*! jquery.cookie v1.4.1 | MIT */
203!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});;
204/* Add to Homescreen v3.1.1 ~ (c) 2014 Matteo Spinelli ~ @license: http://cubiq.org/license */
205(function(window,document){var _eventListener="addEventListener"in window;var _DOMReady=false;
205if(document.readyState==="complete"){_DOMReady=true}else if(_eventListener){window.addEventListener("load",loaded,false)}function loaded(){window.removeEventListener("load",loaded,false);_DOMReady=true}var _reSmartURL=/\/ath(\/)?$/;var _reQueryString=/([\?&]ath=[^&]*$|&ath=[^&]*(&))/;var _instance;function ath(options){_instance=_instance||new ath.Class(options);return _instance}ath.intl={de_de:{ios:"Um diese Web-App zum Home-Bildschirm hinzuzufügen, tippen Sie auf %icon und dann <strong>Zum Home-Bildschirm</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},en_us:{ios:"To add this web app to the home screen: tap %icon and then <strong>Add to Home Screen</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},es_es:{ios:"Para añadir esta aplicación web a la pantalla de inicio: pulsa %icon y selecciona <strong>Añadir a pantalla de inicio</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},fr_fr:{ios:"Pour ajouter cette application web sur l'écran d'accueil : Appuyez %icon et sélectionnez <strong>Ajouter sur l'écran d'accueil</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},he_il:{ios:'<span dir="rtl">להוספת האפליקציה למסך הבית: ללחוץ על %icon ואז <strong>הוסף למסך הבית</strong>.</span>',android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},it_it:{ios:"Per aggiungere questa web app alla schermata iniziale: premi %icon e poi <strong>Aggiungi a Home</strong>.",android:'Per aggiungere questa web app alla schermata iniziale, apri il menu opzioni del browser e premi su <strong>Aggiungi alla homescreen</strong>. <small>Puoi accedere al menu premendo il pulsante hardware delle opzioni se la tua device ne ha uno, oppure premendo l\'icona <span class="ath-action-icon">icon</span> in alto a destra.</small>'},nb_no:{ios:"For å installere denne appen på hjem-skjermen: trykk på %icon og deretter <strong>Legg til på Hjem-skjerm</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},pt_br:{ios:"Para adicionar este app à tela de início: clique %icon e então <strong>Tela de início</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},pt_pt:{ios:"Para adicionar esta app ao ecrã principal: clique %icon e depois <strong>Ecrã principal</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},nl_nl:{ios:"Om deze webapp op je telefoon te installeren, klik op %icon en dan <strong>Zet in beginscherm</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},sv_se:{ios:"För att lägga till denna webbapplikation på hemskärmen: tryck på %icon och därefter <strong>Lägg till på hemskärmen</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},zh_cn:{ios:"如要把应用程式加至主屏幕,请点击%icon, 然后<strong>加至主屏幕</strong>",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'},zh_tw:{ios:"如要把應用程式加至主屏幕, 請點擊%icon, 然後<strong>加至主屏幕</strong>.",android:'To add this web app to the home screen open the browser option menu and tap on <strong>Add to homescreen</strong>. <small>The menu can be accessed by pressing the menu hardware button if your device has one, or by tapping the top right menu icon <span class="ath-action-icon">icon</span>.</small>'}};for(var lang in ath.intl){ath.intl[lang.substr(0,2)]=ath.intl[lang]}ath.defaults={appID:"org.cubiq.addtohome",fontSize:15,debug:false,modal:false,mandatory:false,autostart:true,skipFirstVisit:false,startDelay:1,lifespan:15,displayPace:1440,maxDisplayCount:0,icon:true,message:"",validLocation:[],onInit:null,onShow:null,onRemove:null,onAdd:null,onPrivate:null,privateModeOverride:false,detectHomescreen:false};var _ua=window.navigator.userAgent;var _nav=window.navigator;_extend(ath,{hasToken:document.location.hash=="#ath"||_reSmartURL.test(document.location.href)||_reQueryString.test(document.location.search),isRetina:window.devicePixelRatio&&window.devicePixelRatio>1,isIDevice:/iphone|ipod|ipad/i.test(_ua),isMobileChrome:_ua.indexOf("Android")>-1&&/Chrome\/[.0-9]*/.test(_ua),isMobileIE:_ua.indexOf("Windows Phone")>-1,language:_nav.language&&_nav.language.toLowerCase().replace("-","_")||""});ath.language=ath.language&&ath.language in ath.intl?ath.language:"en_us";ath.isMobileSafari=ath.isIDevice&&_ua.indexOf("Safari")>-1&&_ua.indexOf("CriOS")<0;ath.OS=ath.isIDevice?"ios":ath.isMobileChrome?"android":ath.isMobileIE?"windows":"unsupported";ath.OSVersion=_ua.match(/(OS|Android) (\d+[_\.]\d+)/);ath.OSVersion=ath.OSVersion&&ath.OSVersion[2]?+ath.OSVersion[2].replace("_","."):0;ath.isStandalone=window.navigator.standalone||ath.isMobileChrome&&screen.height-document.documentElement.clientHeight<40;ath.isTablet=ath.isMobileSafari&&_ua.indexOf("iPad")>-1||ath.isMobileChrome&&_ua.indexOf("Mobile")<0;ath.isCompatible=ath.isMobileSafari&&ath.OSVersion>=6||ath.isMobileChrome;var _defaultSession={lastDisplayTime:0,returningVisitor:false,displayCount:0,optedout:false,added:false};ath.removeSession=function(appID){try{localStorage.removeItem(appID||ath.defaults.appID)}catch(e){}};ath.Class=function(options){this.options=_extend({},ath.defaults);_extend(this.options,options);if(!_eventListener){return}this.options.mandatory=this.options.mandatory&&("standalone"in window.navigator||this.options.debug);this.options.modal=this.options.modal||this.options.mandatory;if(this.options.mandatory){this.options.startDelay=-.5}this.options.detectHomescreen=this.options.detectHomescreen===true?"hash":this.options.detectHomescreen;if(this.options.debug){ath.isCompatible=true;ath.OS=typeof this.options.debug=="string"?this.options.debug:ath.OS=="unsupported"?"android":ath.OS;ath.OSVersion=ath.OS=="ios"?"8":"4"}this.container=document.documentElement;this.session=localStorage.getItem(this.options.appID);this.session=this.session?JSON.parse(this.session):undefined;if(ath.hasToken&&(!ath.isCompatible||!this.session)){ath.hasToken=false;_removeToken()}if(!ath.isCompatible){return}this.session=this.session||_defaultSession;try{localStorage.setItem(this.options.appID,JSON.stringify(this.session));ath.hasLocalStorage=true}catch(e){ath.hasLocalStorage=false;if(this.options.onPrivate){this.options.onPrivate.call(this)}}var isValidLocation=!this.options.validLocation.length;for(var i=this.options.validLocation.length;i--;){if(this.options.validLocation[i].test(document.location.href)){isValidLocation=true;break}}if(localStorage.getItem("addToHome")){this.optOut()}if(this.session.optedout||this.session.added||!isValidLocation){return}if(ath.isStandalone){if(!this.session.added){this.session.added=true;this.updateSession();if(this.options.onAdd&&ath.hasLocalStorage){this.options.onAdd.call(this)}}return}if(this.options.detectHomescreen){if(ath.hasToken){_removeToken();if(!this.session.added){this.session.added=true;this.updateSession();if(this.options.onAdd&&ath.hasLocalStorage){this.options.onAdd.call(this)}}return}if(this.options.detectHomescreen=="hash"){history.replaceState("",window.document.title,document.location.href+"#ath")}else if(this.options.detectHomescreen=="smartURL"){history.replaceState("",window.document.title,document.location.href.replace(/(\/)?$/,"/ath$1"))}else{history.replaceState("",window.document.title,document.location.href+(document.location.search?"&":"?")+"ath=")}}if(!this.session.returningVisitor){this.session.returningVisitor=true;this.updateSession();if(this.options.skipFirstVisit){return}}if(!this.options.privateModeOverride&&!ath.hasLocalStorage){return}this.ready=true;if(this.options.onInit){this.options.onInit.call(this)}if(this.options.autostart){this.show()}};ath.Class.prototype={events:{load:"_delayedShow",error:"_delayedShow",orientationchange:"resize",resize:"resize",scroll:"resize",click:"remove",touchmove:"_preventDefault",transitionend:"_removeElements",webkitTransitionEnd:"_removeElements",MSTransitionEnd:"_removeElements"},handleEvent:function(e){var type=this.events[e.type];if(type){this[type](e)}},show:function(force){if(this.options.autostart&&!_DOMReady){setTimeout(this.show.bind(this),50);return}if(this.shown){return}var now=Date.now();var lastDisplayTime=this.session.lastDisplayTime;if(force!==true){if(!this.ready){return}if(now-lastDisplayTime<this.options.displayPace*6e4){return}if(this.options.maxDisplayCount&&this.session.displayCount>=this.options.maxDisplayCount){return}}this.shown=true;this.session.lastDisplayTime=now;this.session.displayCount++;this.updateSession();if(!this.applicationIcon){if(ath.OS=="ios"){this.applicationIcon=document.querySelector('head link[rel^=apple-touch-icon][sizes="152x152"],head link[rel^=apple-touch-icon][sizes="144x144"],head link[rel^=apple-touch-icon][sizes="120x120"],head link[rel^=apple-touch-icon][sizes="114x114"],head link[rel^=apple-touch-icon]')}else{this.applicationIcon=document.querySelector('head link[rel^="shortcut icon"][sizes="196x196"],head link[rel^=apple-touch-icon]')}}var message="";if(this.options.message in ath.intl){message=ath.intl[this.options.message][ath.OS]}else if(this.options.message!==""){message=this.options.message}else{message=ath.intl[ath.language][ath.OS]}message="<p>"+message.replace("%icon",'<span class="ath-action-icon">icon</span>')+"</p>";this.viewport=document.createElement("div");this.viewport.className="ath-viewport";if(this.options.modal){this.viewport.className+=" ath-modal"}if(this.options.mandatory){this.viewport.className+=" ath-mandatory"}this.viewport.style.position="absolute";this.element=document.createElement("div");this.element.className="ath-container ath-"+ath.OS+" ath-"+ath.OS+(ath.OSVersion+"").substr(0,1)+" ath-"+(ath.isTablet?"tablet":"phone");this.element.style.cssText="-webkit-transition-property:-webkit-transform,opacity;-webkit-transition-duration:0s;-webkit-transition-timing-function:ease-out;transition-property:transform,opacity;transition-duration:0s;transition-timing-function:ease-out;";this.element.style.webkitTransform="translate3d(0,-"+window.innerHeight+"px,0)";this.element.style.transform="translate3d(0,-"+window.innerHeight+"px,0)";if(this.options.icon&&this.applicationIcon){this.element.className+=" ath-icon";this.img=document.createElement("img");this.img.className="ath-application-icon";this.img.addEventListener("load",this,false);this.img.addEventListener("error",this,false);this.img.src=this.applicationIcon.href;this.element.appendChild(this.img)}this.element.innerHTML+=message;this.viewport.style.left="-99999em";this.viewport.appendChild(this.element);this.container.appendChild(this.viewport);if(!this.img){this._delayedShow()}},_delayedShow:function(e){setTimeout(this._show.bind(this),this.options.startDelay*1e3+500)},_show:function(){var that=this;this.updateViewport();window.addEventListener("resize",this,false);window.addEventListener("scroll",this,false);window.addEventListener("orientationchange",this,false);
205if(this.options.modal){document.addEventListener("touchmove",this,true)}if(!this.options.mandatory){setTimeout(function(){that.element.addEventListener("click",that,true)},1e3)}setTimeout(function(){that.element.style.webkitTransitionDuration="1.2s";that.element.style.transitionDuration="1.2s";that.element.style.webkitTransform="translate3d(0,0,0)";that.element.style.transform="translate3d(0,0,0)"},0);if(this.options.lifespan){this.removeTimer=setTimeout(this.remove.bind(this),this.options.lifespan*1e3)}if(this.options.onShow){this.options.onShow.call(this)}},remove:function(){clearTimeout(this.removeTimer);if(this.img){this.img.removeEventListener("load",this,false);this.img.removeEventListener("error",this,false)}window.removeEventListener("resize",this,false);window.removeEventListener("scroll",this,false);window.removeEventListener("orientationchange",this,false);document.removeEventListener("touchmove",this,true);this.element.removeEventListener("click",this,true);this.element.addEventListener("transitionend",this,false);this.element.addEventListener("webkitTransitionEnd",this,false);this.element.addEventListener("MSTransitionEnd",this,false);this.element.style.webkitTransitionDuration="0.3s";this.element.style.opacity="0"},_removeElements:function(){this.element.removeEventListener("transitionend",this,false);this.element.removeEventListener("webkitTransitionEnd",this,false);this.element.removeEventListener("MSTransitionEnd",this,false);this.container.removeChild(this.viewport);this.shown=false;if(this.options.onRemove){this.options.onRemove.call(this)}},updateViewport:function(){if(!this.shown){return}this.viewport.style.width=window.innerWidth+"px";this.viewport.style.height=window.innerHeight+"px";this.viewport.style.left=window.scrollX+"px";this.viewport.style.top=window.scrollY+"px";var clientWidth=document.documentElement.clientWidth;this.orientation=clientWidth>document.documentElement.clientHeight?"landscape":"portrait";var screenWidth=ath.OS=="ios"?this.orientation=="portrait"?screen.width:screen.height:screen.width;this.scale=screen.width>clientWidth?1:screenWidth/window.innerWidth;this.element.style.fontSize=this.options.fontSize/this.scale+"px"},resize:function(){clearTimeout(this.resizeTimer);this.resizeTimer=setTimeout(this.updateViewport.bind(this),100)},updateSession:function(){if(ath.hasLocalStorage===false){return}localStorage.setItem(this.options.appID,JSON.stringify(this.session))},clearSession:function(){this.session=_defaultSession;this.updateSession()},optOut:function(){this.session.optedout=true;this.updateSession()},optIn:function(){this.session.optedout=false;this.updateSession()},clearDisplayCount:function(){this.session.displayCount=0;this.updateSession()},_preventDefault:function(e){e.preventDefault();e.stopPropagation()}};function _extend(target,obj){for(var i in obj){target[i]=obj[i]}return target}function _removeToken(){if(document.location.hash=="#ath"){history.replaceState("",window.document.title,document.location.href.split("#")[0])}if(_reSmartURL.test(document.location.href)){history.replaceState("",window.document.title,document.location.href.replace(_reSmartURL,"$1"))}if(_reQueryString.test(document.location.search)){history.replaceState("",window.document.title,document.location.href.replace(_reQueryString,"$2"))}}window.addToHomescreen=ath})(window,document);;
206// jQuery-based code to implement posting feedback within articles.
207// Rewritten for L12 template - based on Bootstrap v3.3.4
208(function($){
209  'use strict';
210  $(function() {
211    // Create an "inView" filter, courtesy of 
212    // http://stackoverflow.com/questions/472930/in-jquery-is-there-way-for-slidedown-method-to-scroll-the-page-down-too/472954
213    $.extend($.expr[':'],{
214      inView: function(a) {
215        var st = (document.documentElement.scrollTop || document.body.scrollTop),
216            ot = $(a).offset().top,
217            wh = (window.innerHeight && window.innerHeight < $(window).height()) ? window.innerHeight : $(window).height();
218        return ot > st && ($(a).height() + ot) < (st + wh);
219      }
220    });
221
222    // Create the HTML for the feedback form and append it to the end of the feedbackBox div
223    $('#feedbackBox > div').append(
224'<div id="fbForm" style="overflow:auto; display:none;">' +
225  '<form action="">' +
226    '<p>Fill in the fields below and click Save to add a comment. (<em>* - required fields</em>)</p>' +
227    '<div class="form-group">' +
228      '<label for="fbName">* Name</label>' +
229      '<input type="text" name="fbName" id="fbName" value="" class="form-control" placeholder="Enter your name">' +
230    '</div>' +
231    '<div class="form-group">' +
232      '<label for="fbEmail">* Email</label>' +
233      '<input type="text" name="fbEmail" id="fbEmail" value="" class="form-control" placeholder="Enter your email address">' +
234    '</div>' +
235    '<div class="form-group">' +
236      '<label for="fbOccupation">Occupation:</label>' +
237      '<input type="text" name="fbOccupation" id="fbOccupation" value="" class="form-control" placeholder="Enter your occupation">' +
238    '</div>' +
239    '<div class="form-group">' +
240      '<label for="fbLocation">Location:</label>' +
241      '<input type="text" name="fbLocation" id="fbLocation" value="" class="form-control" placeholder="Enter your location">' +
242    '</div>' +
243    '<div class="form-group">' +
244      '<label>Display your email address?</label>' +
245      '<div class="radio">' +
246        '<label>' +
247          '<input type="radio" name="fbDisplayEmail" value="y" id="fbYes"> Yes' +
248        '</label>' +
249        '<label>' +
250          '<input type="radio" name="fbDisplayEmail" value="n" id="fbNo" checked="checked"> No' +
251        '</label>' +
252      '</div>' +
253    '</div>' +
254    '<div class="form-group">' +
255      '<label for="fbComment">* Feedback:</label>' +
256      '<textarea name="fbComment" id="fbComment" rows="10" class="form-control" placeholder="Enter your feedback"></textarea>' +
257    '</div>' +
258    '<p class="formButtons">' +
259      '<input type="button" id="saveFeedback" value="Save" disabled="disabled" class="btn btn-primary"> ' +
260      '<input type="button" id="cancelFeedback" value="Cancel" class="btn btn-primary">' +
261    '</p>' +
262  '</form>' +
263'</div>'
264    );
265
266    // Cache some elements
267    var fbForm = $('#fbForm');
268    var fbName = $('#fbName');
269    var fbEmail = $('#fbEmail');
270    var fbComment = $('#fbComment');
271    var saveFeedback = $('#saveFeedback');
272
273    // Create the HTML for the "Add New Comment" links and slide them down from above and below table
274    if ($('#feedbackBox tbody tr').length > 15) {
275      $('<p id="anc2" class="hidden-print" style="display:none;"><a href="#">Add New Comment</a></p>').insertBefore('#feedbackBox table').slideDown();
276    }
277    $('<p id="anc" class="hidden-print" style="display:none;"><a href="#">Add New Comment</a></p>').insertAfter('#feedbackBox table').slideDown();
278
279    // Create the HTML for the "Posted by" name "hover effect" in the feedback table
280    $('body').append(
281'<div id="namePreview">' +
282  '<p><strong>Email:</strong><span id="npEmail" /></p>' +
283  '<p><strong>Occupation:</strong><span id="npOccupation" /></p>' +
284  '<p><strong>Location:</strong><span id="npLocation" /></p>' +
285'</div>'
286    );
287
288    var np = $('body #namePreview');
289    np.css('opacity', 0);
290    
291    // Build the text for the Ajax messages
292    var ajaxP1 = 'Please check your e-mail for a confirmation message. You must click on the URL in the message for your feedback to be submitted.';
293    var ajaxP2 = '<strong>Thank you.</strong>';
294    var moderatedFlag = $('#Moderated_Flag').val();
295    var emailVerifyFlag = $('#Email_Verify_Flag').val();
296    if (moderatedFlag && emailVerifyFlag) {
297      ajaxP2 = 'Your feedback will then be reviewed by our moderator.';
298    } else if (moderatedFlag) {
299      ajaxP1 = 'Your feedback has been submitted for review by our moderator.';
300    } else if (emailVerifyFlag) {
301      // Messages already set, but we need this ELSE IF in order for the ELSE to catch the right stuff
302    } else {
303      ajaxP1 = 'Your feedback has been submitted.';
304    }
305
306    // Helper functions -------------------------------------------------------
307    function ajaxPost() {
308      $.post(
309        '/vfeedback/action.v?ACTION=ajaxPost',
310        {
311          Name: $.trim(fbName.val()),
312          Email: $.trim(fbEmail.val()),
313          Occupation: $.trim($('#fbOccupation').val()),
314          Location: $.trim($('#fbLocation').val()),
315          Display_Email_Flag: $('#fbForm input:radio:checked').val(),
316          Comment: $.trim(fbComment.val()),
317          Topic_Name: $('#Topic_Name').val(),
318          Topic_ID: $('#Topic_ID').val()
319         },
320        function(data) {
321          $('#ajaxLoading')
322            .find('#loadingImg').slideUp('normal', function() {
323                $('#ajaxLoading p:last').slideDown();
324            }).end()
325            .find('p:first')
326              .animate({ opacity:'0' }, 'normal', function() {
327                $(this).html(ajaxP1);
328              })
329              .animate({ opacity:'1' }, 'normal').end()
330            .find(':nth-child(3)')
331              .animate({ opacity:'0' }, 'normal', function() {
332                $(this).html(ajaxP2);
333              })
334              .animate({ opacity:'1' }, 'normal');
335        }
336      );
337    }
338
339    function CloseDialog() {
340      fbForm.slideUp('normal', function() {
341        $('#anc, #anc2').slideDown();
342      });
343    }
344
345    function ToggleSaveButton(e) {
346      // Turns out to be equivalent to: if (a || b || c)
347      if ($('#fbName, #fbEmail, #fbComment').hasClass('backgroundError')) {
348        saveFeedback.attr('disabled', 'disabled');
349      } else {
350        saveFeedback.removeAttr('disabled');
351      }
352    }
353
354    // Event Handlers ---------------------------------------------------------
355
356    // Hover over "Posted by" name to see namePreview popup
357    var namePreview = $('#feedbackBox td.feedbackAuthor .fbName');
358    if (namePreview.length) {
359      namePreview.mouseenter(function(e) {
360        var par = $(this).parent();
361        var em = '';
362        var fbe = par.find('.fbEmail');
363        if (fbe.length) em = fbe.text();
364        var occ = par.find('.fbOccupation').text();
365        var loc = par.find('.fbLocation').text();
366
367        // Put 'NA' in empty fields
368        if (em == '') em = 'NA'; if (occ == '') occ = 'NA'; if (loc == '') loc = 'NA';
369        np.find('#npEmail').html(em);
370        np.find('#npOccupation').html(occ);
371        np.find('#npLocation').html(loc);
372
373        np.css({
374          'left': e.pageX + 13,
375          'top': e.pageY + 5
376        })
377        .stop()
378        .animate({ opacity: 1 }, 'normal');
379      }).mousemove(function(e) {
380        np.css({
381          'left': e.pageX + 13,
382          'top': e.pageY + 5
383        });
384      }).mouseleave(function(e) {
385        // Fade out and then move it out of the way
386        np.stop().animate({ opacity: 0 }, 'normal', function () { $(this).css('top','-500px'); });
387      });
388    }
389
390    // "Add New Comment" link
391    $('#anc a, #anc2 a').click(function() {
392      $('#anc2').slideUp();
393
394      $('#anc').slideUp('normal', function() {
395        // Reset fields
396        $('#fbForm .formItems input:text, #fbForm #fbComment').val('');
397        $('#fbName, #fbEmail, #fbComment').addClass('backgroundError');
398        $('#fbNo').attr('checked', 'checked');
399
400        fbForm.slideDown('normal', function() {
401          // If necessary, scroll to keep the feedback form in view
402          if ($(this).is(':not(:inView)')) {
403            var sTop = $(this).offset().top;
404
405            // The L16 template has a "top bar" that can be "sticky" - take that into account when scrolling
406            if ($('.container-top-bar.sticky-top-bar').length) {
407              sTop -= ($('.container-top-bar.sticky-top-bar').outerHeight(true) + 5);
408            }
409
410            $('html,body').animate({ scrollTop: sTop }, 'normal');
411          }
412
413          // Put the cursor in the Name field
414          fbName.focus();
415
416        });
417      });
418      return false;
419    });
420
421    // Cancel button in feedback form
422    $('#cancelFeedback').click(CloseDialog);
423
424    // Close the dialog if Escape key is pressed
425    fbForm.keyup(function(e) {
426      if (e.keyCode == 27) CloseDialog();
427    });
428
429    // Watch required fields and enable/disable Save button based on existence of text in those fields
430    fbName.keyup(function(e) {
431      if ($.trim($(this).val()) == '') {
432        $(this).addClass('backgroundError');
433      } else {
434        $(this).removeClass('backgroundError');
435      }
436      ToggleSaveButton(e);
437    });
438    fbEmail.keyup(function(e) {
439      var em = $.trim($(this).val());
440      if (em == '') {
441        $(this).addClass('backgroundError');
442      } else {
443        var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
444        if (filter.test(em)) {
445          $(this).removeClass('backgroundError');
446        } else {
447          $(this).addClass('backgroundError');
448        }
449      }
450      ToggleSaveButton(e);
451    });
452    fbComment.keyup(function(e) {
453      if ($.trim($(this).val()) == '') {
454        $(this).addClass('backgroundError');
455      } else {
456        $(this).removeClass('backgroundError');
457      }
458      ToggleSaveButton(e);
459    });
460
461    // Save button in feedback form
462    saveFeedback.click(function() {
463      // Only want to create the "loading" div once
464      if ($('#ajaxLoading').length == 0) {
465        $(
466'<div id="ajaxLoading" style="display:none;">' +
467  '<p />' +
468  '<p id="loadingImg"><img src="" /></p>' +
469  '<p />' +
470  '<p><input type="button" value="Close" class="btn btn-primary" /></p>' +
471'</div>'
472        ).insertAfter('#fbForm');
473
474        $('#ajaxLoading').css({
475          'background-color': $('#fbForm p').css('background-color'),
476          'text-align': 'center'
477        })
478        .find('p:last input')
479        .click(function() {
480          if (!moderatedFlag && !emailVerifyFlag) {
481            // If no moderation, reload the page to display the new feedback post
482            location.reload();
483          } else {
484            $('#ajaxLoading').slideUp('normal', function() {
485              $('#anc, #anc2').slideDown();
486            });
487          }
488        });
489      }
490
491      fbForm.slideUp('normal', function() {
492        $('#ajaxLoading')
493          .find('p:first').html('Saving your feedback...').end()
494          .find('#loadingImg').removeAttr('style').end()
495          // Reset the img src - without this, the animated gif will only animate the first time a feedback is posted.
496          .find('#loadingImg img').attr('src', '').attr('src','https://socshelp.socs.net/images/ajax_bar_loader.gif').end()
497          .find(':nth-child(3)').html('...this may take a few seconds.').end()
498          .find('p:last').hide().end()
499          .slideDown('normal', function() {
500            ajaxPost();
501          });
502      });
503    });
504
505  });
506})(jQuery);
507
508;
509//http://www.featureblend.com/license.txt
510var FlashDetect=new function(){var self=this;self.installed=false;self.raw="";self.major=-1;self.minor=-1;self.revision=-1;self.revisionStr="";var activeXDetectRules=[{"name":"ShockwaveFlash.ShockwaveFlash.7","version":function(obj){return getActiveXVersion(obj);}},{"name":"ShockwaveFlash.ShockwaveFlash.6","version":function(obj){var version="6,0,21";try{obj.AllowScriptAccess="always";version=getActiveXVersion(obj);}catch(err){}
511return version;}},{"name":"ShockwaveFlash.ShockwaveFlash","version":function(obj){return getActiveXVersion(obj);}}];var getActiveXVersion=function(activeXObj){var version=-1;try{version=activeXObj.GetVariable("$version");}catch(err){}
512return version;};var getActiveXObject=function(name){var obj=-1;try{obj=new ActiveXObject(name);}catch(err){obj={activeXError:true};}
513return obj;};var parseActiveXVersion=function(str){var versionArray=str.split(",");return{"raw":str,"major":parseInt(versionArray[0].split(" ")[1],10),"minor":parseInt(versionArray[1],10),"revision":parseInt(versionArray[2],10),"revisionStr":versionArray[2]};};var parseStandardVersion=function(str){var descParts=str.split(/ +/);var majorMinor=descParts[2].split(/\./);var revisionStr=descParts[3];return{"raw":str,"major":parseInt(majorMinor[0],10),"minor":parseInt(majorMinor[1],10),"revisionStr":revisionStr,"revision":parseRevisionStrToInt(revisionStr)};};var parseRevisionStrToInt=function(str){return parseInt(str.replace(/[a-zA-Z]/g,""),10)||self.revision;};self.majorAtLeast=function(version){return self.major>=version;};self.minorAtLeast=function(version){return self.minor>=version;};self.revisionAtLeast=function(version){return self.revision>=version;};self.versionAtLeast=function(major){var properties=[self.major,self.minor,self.revision];var len=Math.min(properties.length,arguments.length);for(i=0;i<len;i++){if(properties[i]>=arguments[i]){if(i+1<len&&properties[i]==arguments[i]){continue;}else{return true;}}else{return false;}}};self.FlashDetect=function(){if(navigator.plugins&&navigator.plugins.length>0){var type='application/x-shockwave-flash';var mimeTypes=navigator.mimeTypes;if(mimeTypes&&mimeTypes[type]&&mimeTypes[type].enabledPlugin&&mimeTypes[type].enabledPlugin.description){var version=mimeTypes[type].enabledPlugin.description;
513var versionObj=parseStandardVersion(version);self.raw=versionObj.raw;self.major=versionObj.major;self.minor=versionObj.minor;self.revisionStr=versionObj.revisionStr;self.revision=versionObj.revision;self.installed=true;}}else if(navigator.appVersion.indexOf("Mac")==-1&&window.execScript){var version=-1;for(var i=0;i<activeXDetectRules.length&&version==-1;i++){var obj=getActiveXObject(activeXDetectRules[i].name);if(!obj.activeXError){self.installed=true;version=activeXDetectRules[i].version(obj);if(version!=-1){var versionObj=parseActiveXVersion(version);self.raw=versionObj.raw;self.major=versionObj.major;self.minor=versionObj.minor;self.revision=versionObj.revision;self.revisionStr=versionObj.revisionStr;}}}}}();};FlashDetect.JS_RELEASE="1.0.4";

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.