PageSourceSearch

https://mae.gov.vn/_layouts/15/init.debug.js?rev=mjGox%2Fw%2Fg4nfNE6XTk9dDQ%3D%3DTAG0

js mae.gov.vn collected 2026-10-02 04:31:49 UTC 629,058 bytes, 16,563 lines download raw bytes

1function $_global_init() {
2    {
3        if ("undefined" == typeof g_all_modules) {
4            g_all_modules = {};
5        }
6        g_all_modules["init.js"] = {
7            "version": {
8                "rmj": 16,
9                "rmm": 0,
10                "rup": 10417,
11                "rpr": 20175
12            }
13        };
14    }
15    if (-1 != navigator.userAgent.indexOf('ProfilerMark') && 'function' == typeof msWriteProfilerMark) {
16        spWriteProfilerMark = function(m) {
17            window.msWriteProfilerMark(m);
18        };
19    }
20    if (typeof spWriteProfilerMark == 'function')
21        spWriteProfilerMark("perfMarkBegin_" + "init.js");
22    if (typeof OffSwitch == 'undefined') {
23        OffSwitch = {
24            "__namespace": true
25        };
26        OffSwitch_module_def();
27    }
28    if (typeof RuntimeErrors == 'undefined') {
29        RuntimeErrors = {
30            "__namespace": true
31        };
32        RuntimeErrors_module_def();
33    }
34    if (typeof Verify == 'undefined') {
35        Verify = {
36            "__namespace": true
37        };
38        Verify_module_def();
39    }
40    if (typeof Define == 'undefined') {
41        Define = {
42            "__namespace": true
43        };
44        Define_module_def();
45    }
46    if (typeof BrowserDetection == 'undefined') {
47        BrowserDetection = {
48            "__namespace": true
49        };
50        BrowserDetection_module_def();
51    }
52    (function() {
53        BrowserisOld.prototype = {
54            firefox: undefined,
55            firefox36up: undefined,
56            firefox3up: undefined,
57            firefox4up: undefined,
58            ie: undefined,
59            ie55up: undefined,
60            ie5up: undefined,
61            ie7down: undefined,
62            ie8down: undefined,
63            ie8standard: undefined,
64            ie8standardUp: undefined,
65            ie9down: undefined,
66            ie9standardUp: undefined,
67            ipad: undefined,
68            windowsphone: undefined,
69            chrome: undefined,
70            chrome7up: undefined,
71            chrome8up: undefined,
72            chrome9up: undefined,
73            chrome81up: undefined,
74            iever: undefined,
75            mac: undefined,
76            major: undefined,
77            msTouch: undefined,
78            isTouch: undefined,
79            nav: undefined,
80            nav6: undefined,
81            nav6up: undefined,
82            nav7up: undefined,
83            osver: undefined,
84            safari: undefined,
85            safari125up: undefined,
86            safari3up: undefined,
87            verIEFull: undefined,
88            w3c: undefined,
89            webKit: undefined,
90            win: undefined,
91            win8AppHost: undefined,
92            win32: undefined,
93            win64bit: undefined,
94            winnt: undefined,
95            armProcessor: undefined
96        };
97        Browseris.prototype = BrowserisOld.prototype;
98        Browseris.prototype.ie10standardUp = undefined;
99        Browseris.prototype.ie11 = undefined;
100        Browseris.prototype.ie11up = undefined;
101        Browseris.prototype.msEdge = undefined;
102        function Browseris() {
103            var agt = navigator.userAgent.toLowerCase();
104            var navIdx;
105
106            this.osver = 1.0;
107            if (Boolean(agt)) {
108                var stOSVer = agt.substring(agt.indexOf("windows ") + 11);
109
110                this.osver = parseFloat(stOSVer);
111            }
112            this.major = parseInt(navigator.appVersion);
113            this.msEdge = agt.indexOf("edge/") != -1;
114            var msieIdx = agt.indexOf("msie");
115            var tridentIdx = agt.indexOf("trident");
116
117            this.ie = msieIdx != -1 || tridentIdx != -1;
118            var stIEVer = "0";
119
120            if (this.ie) {
121                if (msieIdx != -1) {
122                    stIEVer = agt.substring(msieIdx + 5);
123                }
124                else {
125                    var rvIdx = agt.indexOf("rv:");
126
127                    if (rvIdx != -1) {
128                        stIEVer = agt.substring(rvIdx + 3);
129                    }
130                }
131            }
132            this.iever = parseInt(stIEVer);
133            this.verIEFull = parseFloat(stIEVer);
134            this.ie4up = this.ie && this.major >= 4;
135            this.ie5up = this.ie && this.iever >= 5;
136            this.ie55up = this.ie && this.verIEFull >= 5.5;
137            this.ie6up = this.ie && this.iever >= 6;
138            this.ie7down = this.ie && this.iever <= 7;
139            this.ie8down = this.ie && this.iever <= 8;
140            this.ie9down = this.ie && this.iever <= 9;
141            this.ie7up = this.ie && this.iever >= 7;
142            this.ie8standard = this.ie && Boolean(document.documentMode) && document.documentMode == 8;
143            this.ie8standardUp = this.ie && (Boolean(document.documentMode) && document.documentMode >= 8);
144            this.ie9standardUp = this.ie && (Boolean(document.documentMode) && document.documentMode >= 9);
145            this.ie10standardUp = this.ie && (Boolean(document.documentMode) && document.documentMode >= 10);
146            this.ie11 = this.ie && Boolean(document.documentMode) && document.documentMode == 11;
147            this.ie11up = this.ie && (Boolean(document.documentMode) && document.documentMode >= 11);
148            this.nav = agt.indexOf('mozilla') != -1 && agt.indexOf('spoofer') == -1 && agt.indexOf('compatible') == -1 && !this.ie;
149            this.nav6 = this.nav && this.major == 5;
150            this.nav6up = this.nav && this.major >= 5;
151            this.nav7up = false;
152            if (this.nav6up) {
153                navIdx = agt.indexOf("netscape/");
154                if (navIdx >= 0)
155                    this.nav7up = parseInt(agt.substring(navIdx + 9)) >= 7;
156            }
157            this.winnt = agt.indexOf("winnt") != -1 || agt.indexOf("windows nt") != -1;
158            this.win32 = this.major >= 4 && navigator.platform == "Win32" || agt.indexOf("win32") != -1 || agt.indexOf("32bit") != -1;
159            this.win64bit = agt.indexOf("win64") != -1;
160            this.win = this.winnt || this.win32 || this.win64bit;
161            this.safari = agt.indexOf("webkit") != -1 && !this.ie && !this.msEdge;
162            this.safari125up = false;
163            this.safari3up = false;
164            if (this.safari && this.major >= 5) {
165                navIdx = agt.indexOf("webkit/");
166                if (navIdx >= 0)
167                    this.safari125up = parseInt(agt.substring(navIdx + 7)) >= 125;
168                var verIdx = agt.indexOf("version/");
169
170                if (verIdx >= 0)
171                    this.safari3up = parseInt(agt.substring(verIdx + 8)) >= 3;
172            }
173            this.firefox = this.nav && agt.indexOf("firefox") != -1;
174            this.firefox3up = false;
175            this.firefox36up = false;
176            this.firefox4up = false;
177            if (this.firefox && this.major >= 5) {
178                var ffVerIdx = agt.indexOf("firefox/");
179
180                if (ffVerIdx >= 0) {
181                    var firefoxVStr = agt.substring(ffVerIdx + 8);
182
183                    this.firefox3up = parseInt(firefoxVStr) >= 3;
184                    this.firefox36up = parseFloat(firefoxVStr) >= 3.6;
185                    this.firefox4up = parseInt(firefoxVStr) >= 4;
186                }
187            }
188            this.chrome = this.nav && agt.indexOf("chrome") != -1 && !this.ie && !this.msEdge;
189            this.chrome7up = false;
190            this.chrome8up = false;
191            this.chrome9up = false;
192            this.chrome81up = false;
193            if (this.chrome && this.major >= 5) {
194                var chmVerIdx = agt.indexOf("chrome/");
195
196                if (chmVerIdx >= 0) {
197                    var chmVerStr = agt.substring(chmVerIdx + 7);
198                    var chmVerInt = parseInt(chmVerStr);
199
200                    this.chrome7up = chmVerInt >= 7;
201                    this.chrome8up = chmVerInt >= 8;
202                    this.chrome9up = chmVerInt >= 9;
203                    this.chrome81up = chmVerInt >= 81;
204                }
205            }
206            this.ipad = agt.indexOf("ipad") != -1;
207            this.windowsphone = agt.indexOf("windows phone") != -1;
208            this.aol = this.ie && agt.indexOf(" aol ") != -1;
209            this.mac = agt.indexOf("mac") != -1;
210            this.w3c = this.nav6up;
211            this.webKit = agt.indexOf("webkit") != -1 && !this.ie && !this.msEdge;
212            this.win8AppHost = agt.indexOf("msapphost") != -1;
213            this.msTouch = typeof navigator.msMaxTouchPoints != "undefined" && navigator.msMaxTouchPoints > 0;
214            this.isTouch = this.msTouch || "ontouchstart" in document.documentElement;
215            this.armProcessor = agt.indexOf("arm") != -1;
216        }
217        function BrowserisOld() {
218            var agt = navigator.userAgent.toLowerCase();
219            var navIdx;
220
221            this.osver = 1.0;
222            if (Boolean(agt)) {
223                var stOSVer = agt.substring(agt.indexOf("windows ") + 11);
224
225                this.osver = parseFloat(stOSVer);
226            }
227            this.major = parseInt(navigator.appVersion);
228            this.nav = agt.indexOf('mozilla') != -1 && (agt.indexOf('spoofer') == -1 && agt.indexOf('compatible') == -1);
229            this.nav6 = this.nav && this.major == 5;
230            this.nav6up = this.nav && this.major >= 5;
231            this.nav7up = false;
232            if (this.nav6up) {
233                navIdx = agt.indexOf("netscape/");
234                if (navIdx >= 0)
235                    this.nav7up = parseInt(agt.substring(navIdx + 9)) >= 7;
236            }
237            this.ie = agt.indexOf("msie") != -1;
238            this.ipad = agt.indexOf("ipad") != -1;
239            this.windowsphone = agt.indexOf("windows phone") != -1;
240            this.aol = this.ie && agt.indexOf(" aol ") != -1;
241            if (this.ie) {
242                var stIEVer = agt.substring(agt.indexOf("msie ") + 5);
243
244                this.iever = parseInt(stIEVer);
245                this.verIEFull = parseFloat(stIEVer);
246            }
247            else
248                this.iever = 0;
249            this.ie4up = this.ie && this.major >= 4;
250            this.ie5up = this.ie && this.iever >= 5;
251            this.ie55up = this.ie && this.verIEFull >= 5.5;
252            this.ie6up = this.ie && this.iever >= 6;
253            this.ie7down = this.ie && this.iever <= 7;
254            this.ie8down = this.ie && this.iever <= 8;
255            this.ie9down = this.ie && this.iever <= 9;
256            this.ie7up = this.ie && this.iever >= 7;
257            this.ie8standard = this.ie && Boolean(document.documentMode) && document.documentMode == 8;
258            this.ie8standardUp = this.ie && Boolean(document.documentMode) && document.documentMode >= 8;
259            this.ie9standardUp = this.ie && Boolean(document.documentMode) && document.documentMode >= 9;
260            this.ie10standardUp = this.ie && Boolean(document.documentMode) && document.documentMode >= 10;
261            this.winnt = agt.indexOf("winnt") != -1 || agt.indexOf("windows nt") != -1;
262            this.win32 = this.major >= 4 && navigator.platform == "Win32" || agt.indexOf("win32") != -1 || agt.indexOf("32bit") != -1;
263            this.win64bit = agt.indexOf("win64") != -1;
264            this.win = this.winnt || this.win32 || this.win64bit;
265            this.mac = agt.indexOf("mac") != -1;
266            this.w3c = this.nav6up;
267            this.webKit = agt.indexOf("webkit") != -1;
268            this.safari = agt.indexOf("webkit") != -1;
269            this.safari125up = false;
270            this.safari3up = false;
271            if (this.safari && this.major >= 5) {
272                navIdx = agt.indexOf("webkit/");
273                if (navIdx >= 0)
274                    this.safari125up = parseInt(agt.substring(navIdx + 7)) >= 125;
275                var verIdx = agt.indexOf("version/");
276
277                if (verIdx >= 0)
278                    this.safari3up = parseInt(agt.substring(verIdx + 8)) >= 3;
279            }
280            this.firefox = this.nav && agt.indexOf("firefox") != -1;
281            this.firefox3up = false;
282            this.firefox36up = false;
283            this.firefox4up = false;
284            if (this.firefox && this.major >= 5) {
285                var ffVerIdx = agt.indexOf("firefox/");
286
287                if (ffVerIdx >= 0) {
288                    var firefoxVStr = agt.substring(ffVerIdx + 8);
289
290                    this.firefox3up = parseInt(firefoxVStr) >= 3;
291                    this.firefox36up = parseFloat(firefoxVStr) >= 3.6;
292                    this.firefox4up = parseInt(firefoxVStr) >= 4;
293                }
294            }
295            this.win8AppHost = agt.indexOf("msapphost") != -1;
296            this.chrome = this.nav && agt.indexOf("chrome") != -1;
297            this.chrome7up = false;
298            this.chrome8up = false;
299            this.chrome9up = false;
300            this.chrome81up = false;
301            if (this.chrome && this.major >= 5) {
302                var chmVerIdx = agt.indexOf("chrome/");
303
304                if (chmVerIdx >= 0) {
305                    var chmVerStr = agt.substring(chmVerIdx + 7);
306                    var chmVerInt = parseInt(chmVerStr);
307
308                    this.chrome7up = chmVerInt >= 7;
309                    this.chrome8up = chmVerInt >= 8;
310                    this.chrome9up = chmVerInt >= 9;
311                    this.chrome81up = chmVerInt >= 81;
312                }
313            }
314            this.msTouch = typeof navigator.msMaxTouchPoints != "undefined" && navigator.msMaxTouchPoints > 0;
315            this.isTouch = this.msTouch || "ontouchstart" in document.documentElement;
316            this.armProcessor = agt.indexOf("arm") != -1;
317        }
318        if (typeof _browserisFlight !== "undefined") {
319            BrowserDetection.userAgent = new Browseris();
320        }
321        else {
322            BrowserDetection.userAgent = new BrowserisOld();
323        }
324    })();
325    browseris = BrowserDetection.userAgent;
326    bis = BrowserDetection.userAgent;
327    if (typeof BrowserStorage == 'undefined') {
328        BrowserStorage = {
329            "__namespace": true
330        };
331        BrowserStorage_module_def();
332    }
333    if (typeof CSSUtil == 'undefined') {
334        CSSUtil = {
335            "__namespace": true
336        };
337        CSSUtil_module_def();
338    }
339    ;
340    pxToNum = CSSUtil.pxToNum;
341    GetWidthFromPxString = CSSUtil.pxToFloat;
342    GetCurrentEltStyle = CSSUtil.getCurrentStyle;
343    GetCurrentEltStyleByNames = CSSUtil.getCurrentEltStyleByNames;
344    GetOpacity = CSSUtil.getOpacity;
345    SetOpacity = CSSUtil.setOpacity;
346    HasCssClass = CSSUtil.HasClass;
347    AddCssClassToElement = CSSUtil.AddClass;
348    RemoveCssClassFromElement = CSSUtil.RemoveClass;
349    getCurrentEltStyleByNames = CSSUtil.getCurrentEltStyleByNames;
350    if (typeof DOM == 'undefined') {
351        DOM = {
352            "__namespace": true
353        };
354        DOM_module_def();
355    }
356    fRightToLeft = DOM.rightToLeft;
357    cancelDefault = DOM.cancelDefault;
358    AbsLeft = DOM.AbsLeft;
359    AbsTop = DOM.AbsTop;
360    CancelEvent = DOM.CancelEvent;
361    GetElementsByName = DOM.GetElementsByName;
362    GetEventCoords = DOM.GetEventCoords;
363    GetEventSrcElement = DOM.GetEventSrcElement;
364    GetInnerText = DOM.GetInnerText;
365    PreventDefaultNavigation = DOM.PreventDefaultNavigation;
366    SetEvent = DOM.SetEvent;
367    if (typeof Encoding == 'undefined') {
368        Encoding = {
369            "__namespace": true
370        };
371        Encoding_module_def();
372    }
373    encodeScriptQuote = Encoding.EncodeScriptQuote;
374    STSHtmlEncode = Encoding.HtmlEncode;
375    STSHtmlEncode2 = Encoding.HtmlEncode2;
376    STSHtmlEncodeEx = Encoding.HtmlEncodeEx;
377    STSHtmlDecode = Encoding.HtmlDecode;
378    StAttrQuote = Encoding.AttrQuote;
379    STSScriptEncode = Encoding.ScriptEncode;
380    STSScriptEncodeWithQuote = Encoding.ScriptEncodeWithQuote;
381    CanonicalizeUrlEncodingCase = Encoding.CanonicalizeUrlEncodingCase;
382    EncodePath = Encoding.EncodePath;
383    if (typeof ExpFlighting == 'undefined') {
384        ExpFlighting = {
385            "__namespace": true
386        };
387        ExpFlighting_module_def();
388    }
389    if (typeof IE8Support == 'undefined') {
390        IE8Support = {
391            "__namespace": true
392        };
393        IE8Support_module_def();
394    }
395    if (typeof RequestUtil == 'undefined') {
396        RequestUtil = {
397            "__namespace": true
398        };
399        RequestUtil_module_def();
400    }
401    if (typeof StringUtil == 'undefined') {
402        StringUtil = {
403            "__namespace": true
404        };
405        StringUtil_module_def();
406    }
407    StBuildParam = StringUtil.BuildParam;
408    if (typeof TypeUtil == 'undefined') {
409        TypeUtil = {
410            "__namespace": true
411        };
412        TypeUtil_module_def();
413    }
414    IsArray = TypeUtil.IsArray;
415    IsNullOrUndefined = TypeUtil.IsNullOrUndefined;
416    ObjectUtil = {
417        "__namespace": true
418    };
419    ObjectUtil_module_def();
420    URI = function(uriString, options) {
421        var that = this;
422        var URI_POUND = "#";
423        var URI_COLON = ":";
424        var URI_FORWARDSLASH = "/";
425        var URI_DOUBLE_FORWARDSLASHES = "//";
426        var URI_QUESTIONMARK = "?";
427        var URI_SEMICOLON = ";";
428        var URI_AMPERSAND = "&";
429        var URI_AT = "@";
430        var URI_EQUAL = "=";
431        var URI_DELIMITERS = ";/?:@&=$,";
432        var URI_AUTHORITY_TERMINATORS = "/?";
433        var m_queryCaseInsensitive = false;
434
435        if (typeof options !== "undefined" && typeof options.queryCaseInsensitive === 'boolean') {
436            m_queryCaseInsensitive = options.queryCaseInsensitive;
437        }
438        var m_disableEncodingDecodingForLegacyCode = false;
439
440        if (typeof options !== "undefined" && typeof options.disableEncodingDecodingForLegacyCode === 'boolean') {
441            m_disableEncodingDecodingForLegacyCode = options.disableEncodingDecodingForLegacyCode;
442        }
443        var m_pathCaseInsensitive = false;
444
445        if (typeof options !== "undefined" && typeof options.pathCaseInsensitive === 'boolean') {
446            m_pathCaseInsensitive = options.pathCaseInsensitive;
447        }
448        var m_scheme = "";
449        var m_user = "";
450        var m_host = "";
451        var m_port = "";
452        var m_path = "";
453        var m_pathEncoded = "";
454        var m_parameters = "";
455        var m_query = {};
456        var m_fragment = "";
457
458        this.getScheme = function() {
459            return m_scheme;
460        };
461        this.setScheme = function(scheme) {
462            m_scheme = decodeURIComponentIfNecessary(scheme);
463        };
464        this.getAuthority = function() {
465            return getAuthority(false);
466        };
467        this.setAuthority = function(authority) {
468            parseAuthority(authority);
469        };
470        this.getUser = function() {
471            return m_user;
472        };
473        this.getHost = function() {
474            return m_host;
475        };
476        this.getPort = function() {
477            return m_port;
478        };
479        this.getPath = function(trimTrailingSlash) {
480            var retPath = m_path;
481
482            if (typeof trimTrailingSlash === 'boolean' && trimTrailingSlash) {
483                if (retPath !== null && retPath.lastIndexOf(URI_FORWARDSLASH) === retPath.length - 1) {
484                    retPath = retPath.slice(0, -1);
485                }
486            }
487            return retPath;
488        };
489        this.setPath = function(path) {
490            if (path.indexOf(URI_FORWARDSLASH) !== 0) {
491                path = URI_FORWARDSLASH + path;
492            }
493            parsePath(path);
494        };
495        this.getPathSegments = function() {
496            if (m_path === null) {
497                return [];
498            }
499            var ret = m_path.split(URI_FORWARDSLASH);
500
501            if (ret.length > 0) {
502                if (ret[0] === "") {
503                    ret.shift();
504                }
505                else if (ret[ret.length - 1] === "") {
506                    ret.pop();
507                }
508            }
509            return ret;
510        };
511        this.getLastPathSegment = function(includeParameters) {
512            var pathSegments = that.getPathSegments();
513
514            if (pathSegments.length === 0) {
515                return "";
516            }
517            else {
518                var retPath = pathSegments[pathSegments.length - 1];
519
520                if (typeof includeParameters !== 'boolean' || !includeParameters) {
521                    var paramBeginPos = retPath.indexOf(URI_SEMICOLON);
522
523                    if (paramBeginPos >= 0) {
524                        retPath = retPath.substring(0, paramBeginPos);
525                    }
526                }
527                return retPath;
528            }
529        };
530        this.getParameters = function() {
531            return m_parameters;
532        };
533        this.getQuery = function() {
534            return serializeQuery(m_query);
535        };
536        this.setQuery = function(query) {
537            var queryObject = deserializeQuery(query);
538
539            that.setQueryFromObject(queryObject);
540        };
541        this.getQueryAsObject = function() {
542            return m_query;
543        };
544        this.setQueryFromObject = function(queryObj) {
545            m_query = {};
546            for (var queryKey in queryObj) {
547                if (queryObj.hasOwnProperty(queryKey)) {
548                    that.setQueryParameter(queryKey, queryObj[queryKey]);
549                }
550            }
551        };
552        this.getQueryParameter = function(queryKey) {
553            var ret = null;
554            var query = that.getQueryAsObject();
555
556            if (m_queryCaseInsensitive) {
557                for (var key in query) {
558                    if (m_query.hasOwnProperty(key) && key.toLowerCase() === queryKey.toLowerCase()) {
559                        ret = query[key];
560                    }
561                }
562            }
563            else {
564                ret = query[queryKey];
565            }
566            if (typeof ret !== 'undefined') {
567                return ret;
568            }
569            else {
570                return null;
571            }
572        };
573        this.setQueryParameter = function(queryKey, queryValue) {
574            var queryKeyDecoded = decodeURIComponentIfNecessary(queryKey);
575            var queryValueDecoded = decodeURIComponentIfNecessary(queryValue);
576
577            m_query[queryKeyDecoded] = queryValueDecoded;
578        };
579        this.removeQueryParameter = function(queryKey) {
580            var queryKeyDecoded = decodeURIComponentIfNecessary(queryKey);
581
582            delete m_query[queryKeyDecoded];
583        };
584        this.getFragment = function() {
585            return m_fragment;
586        };
587        this.setFragment = function(fragment) {
588            if (fragment.indexOf(URI_POUND) === 0) {
589                fragment = fragment.substring(1);
590            }
591            m_fragment = decodeURIComponentIfNecessary(fragment);
592        };
593        var isStringEqualInsensitive = function(a, b) {
594            if (a != null && b != null) {
595                return a.toLowerCase() === b.toLowerCase();
596            }
597            else {
598                return a === b;
599            }
600        };
601        var isStringEqual = function(a, b) {
602            return a === b;
603        };
604
605        this.equals = function(uri) {
606            return m_scheme.toLowerCase() === (uri.getScheme()).toLowerCase() && m_user === uri.getUser() && m_host.toLowerCase() === (uri.getHost()).toLowerCase() && m_port === uri.getPort() && (m_pathCaseInsensitive ? isStringEqualInsensitive : isStringEqual)(that.getPath(true), uri.getPath(true)) && m_parameters === uri.getParameters() && (m_queryCaseInsensitive ? isStringEqualInsensitive : isStringEqual)(that.getQuery(), uri.getQuery()) && m_fragment === uri.getFragment();
607        };
608        this.equivalent = function(uri) {
609            return isStringEqualInsensitive(m_scheme, uri.getScheme()) && isStringEqualInsensitive(m_user, uri.getUser()) && isStringEqualInsensitive(m_host, uri.getHost()) && isStringEqualInsensitive(m_port, uri.getPort()) && isStringEqualInsensitive(that.getPath(true), uri.getPath(true)) && isStringEqualInsensitive(m_parameters, uri.getParameters()) && ObjectUtil.deepCompare(that.getQueryAsObject(), uri.getQueryAsObject(), DecodeCompare) && isStringEqualInsensitive(m_fragment, uri.getFragment());
610            function DecodeCompare(l, r) {
611                var ll = URI.decodeURIComponent(l);
612                var rr = URI.decodeURIComponent(r);
613
614                return ll === rr;
615            }
616        };
617        this.getString = function(outputOptions) {
618            return getStringInternal(true, outputOptions);
619        };
620        this.getDecodedStringForDisplay = function() {
621            return getStringInternal(false);
622        };
623        this.getStringWithoutQueryAndFragment = function() {
624            return getStringWithoutQueryAndFragmentInternal(true);
625        };
626        var getStringInternal = function(encoded, outputOptions) {
627            var ret = getStringWithoutQueryAndFragmentInternal(encoded, outputOptions);
628            var query = serializeQuery(m_query, encoded);
629
630            if (query !== "") {
631                ret += URI_QUESTIONMARK + query;
632            }
633            if (m_fragment !== "") {
634                ret += URI_POUND + (encoded ? encodeURIComponentIfNecessary(m_fragment) : m_fragment);
635            }
636            return ret;
637        };
638        var getStringWithoutQueryAndFragmentInternal = function(encoded, outputOptions) {
639            var ret = "";
640
641            if (m_scheme !== "") {
642                ret += (encoded ? encodeURIComponentIfNecessary(m_scheme) : m_scheme) + URI_COLON;
643            }
644            var authority = getAuthority(encoded, outputOptions);
645
646            if (authority !== "") {
647                ret += URI_DOUBLE_FORWARDSLASHES + authority;
648            }
649            if (m_pathEncoded !== "") {
650                ret += encoded ? m_pathEncoded : m_path;
651            }
652            return ret;
653        };
654        var normalizeQueryKey = function(queryKey) {
655            var key = queryKey;
656
657            if (m_queryCaseInsensitive) {
658                key = key.toLowerCase();
659            }
660            return key;
661        };
662        var deserializeQuery = function(queryStr) {
663            var queryObj = {};
664
665            if (queryStr.indexOf(URI_QUESTIONMARK) === 0) {
666                queryStr = queryStr.substring(1);
667            }
668            var queryParts = queryStr.split(/[;&]+/);
669
670            for (var queryIdx = 0; queryIdx < queryParts.length; queryIdx++) {
671                var queryPart = queryParts[queryIdx];
672                var queryPartSegments = queryPart.split(URI_EQUAL);
673
674                if (queryPartSegments.length > 0) {
675                    var queryKey = queryPartSegments[0];
676
677                    if (queryKey.length > 0) {
678                        var queryValue = "";
679
680                        if (queryPartSegments.length == 2) {
681                            queryValue = queryPartSegments[1];
682                        }
683                        queryObj[queryKey] = queryValue;
684                    }
685                }
686            }
687            return queryObj;
688        };
689        var serializeQuery = function(queryObj, encoded) {
690            encoded = typeof encoded === "undefined" ? false : encoded;
691            var queryStr = "";
692
693            for (var queryKey in queryObj) {
694                if (queryObj.hasOwnProperty(queryKey)) {
695                    var key = queryKey;
696                    var value = queryObj[queryKey];
697
698                    if (encoded) {
699                        key = encodeURIComponentIfNecessary(key);
700                        value = encodeURIComponentIfNecessary(value);
701                    }
702                    if (value === null || value === "") {
703                        queryStr += key + URI_EQUAL + URI_AMPERSAND;
704                    }
705                    else {
706                        queryStr += key + URI_EQUAL + value + URI_AMPERSAND;
707                    }
708                }
709            }
710            if (queryStr !== "") {
711                queryStr = queryStr.slice(0, -1);
712            }
713            return queryStr;
714        };
715        var parseURI = function() {
716            var remainingString = uriString;
717            var fragmentBeginPos = remainingString.indexOf(URI_POUND);
718
719            if (fragmentBeginPos >= 0) {
720                var fragment = remainingString.substring(fragmentBeginPos + 1);
721
722                that.setFragment(fragment);
723                remainingString = remainingString.substring(0, fragmentBeginPos);
724            }
725            var schemeEndPos = findOneOf(remainingString, URI_DELIMITERS);
726
727            if (schemeEndPos >= 0) {
728                var firstColonPos = remainingString.indexOf(URI_COLON);
729
730                if (firstColonPos >= 0 && firstColonPos === schemeEndPos) {
731                    m_scheme = remainingString.substring(0, schemeEndPos);
732                    remainingString = remainingString.substring(schemeEndPos + 1);
733                }
734            }
735            else {
736                parsePath(remainingString);
737                return;
738            }
739            var authority = "";
740            var doubleSlashPos = remainingString.indexOf(URI_DOUBLE_FORWARDSLASHES);
741
742            if (doubleSlashPos >= 0 && doubleSlashPos === 0) {
743                remainingString = remainingString.substring(2);
744                var nothingElseLeft;
745                var authorityEndPos = findOneOf(remainingString, URI_AUTHORITY_TERMINATORS);
746
747                if (authorityEndPos >= 0) {
748                    authority = remainingString.substring(0, authorityEndPos);
749                    remainingString = remainingString.substring(authorityEndPos);
750                    nothingElseLeft = false;
751                }
752                else {
753                    authority = remainingString;
754                    nothingElseLeft = true;
755                }
756                parseAuthority(authority);
757                if (nothingElseLeft) {
758                    return;
759                }
760            }
761            var queryBeginPos = remainingString.indexOf(URI_QUESTIONMARK);
762
763            if (queryBeginPos >= 0) {
764                that.setQuery(remainingString.substring(queryBeginPos + 1));
765                remainingString = remainingString.substring(0, queryBeginPos);
766            }
767            parsePath(remainingString);
768        };
769        var parseAuthority = function(authority) {
770            m_host = authority;
771            var userNameEndPos = authority.lastIndexOf(URI_AT);
772
773            if (userNameEndPos >= 0) {
774                m_host = m_host.substring(userNameEndPos + 1);
775            }
776            var hostPortSeparatorPos = m_host.indexOf(URI_COLON);
777
778            if (userNameEndPos < 0 && hostPortSeparatorPos < 0) {
779                return;
780            }
781            var authorityComponents = authority;
782
783            if (userNameEndPos < 0) {
784                m_host = authorityComponents;
785            }
786            else {
787                m_user = authorityComponents.substring(0, userNameEndPos);
788                m_host = authorityComponents.substring(userNameEndPos + 1);
789            }
790            if (hostPortSeparatorPos >= 0) {
791                m_port = m_host.substring(hostPortSeparatorPos + 1);
792                m_host = m_host.substring(0, hostPortSeparatorPos);
793            }
794            m_user = decodeURIComponentIfNecessary(m_user);
795            m_host = decodeURIComponentIfNecessary(m_host);
796        };
797        var parsePath = function(remainingString) {
798            var paramBeginPos = remainingString.indexOf(URI_SEMICOLON);
799
800            if (paramBeginPos >= 0) {
801                m_parameters = decodeURIComponentIfNecessary(remainingString.substring(paramBeginPos + 1));
802            }
803            m_path = decodeURIComponentIfNecessary(remainingString);
804            var encodedPathSegments = remainingString.split(URI_FORWARDSLASH);
805
806            for (var i = 0; i < encodedPathSegments.length; ++i) {
807                var segment = encodedPathSegments[i];
808                var segmentAndParameters = segment.split(URI_SEMICOLON);
809                var decodedSegment = decodeURIComponentIfNecessary(segmentAndParameters[0]);
810
811                encodedPathSegments[i] = encodeURIComponentIfNecessary(decodedSegment);
812                for (var j = 1; j < segmentAndParameters.length; ++j) {
813                    var decodedParameter = decodeURIComponentIfNecessary(segmentAndParameters[j]);
814
815                    encodedPathSegments[i] += URI_SEMICOLON + encodeURIComponentIfNecessary(decodedParameter);
816                }
817            }
818            m_pathEncoded = encodedPathSegments.join(URI_FORWARDSLASH);
819        };
820        var findOneOf = function(str, searchValues) {
821            for (var strIdx = 0; strIdx < str.length; strIdx++) {
822                var c = str[strIdx];
823
824                for (var delimIdx = 0; delimIdx < searchValues.length; delimIdx++) {
825                    if (c === searchValues[delimIdx]) {
826                        return strIdx;
827                    }
828                }
829            }
830            return -1;
831        };
832        var getUserEncodedIfNecessary = function() {
833            var user;
834
835            if (m_disableEncodingDecodingForLegacyCode) {
836                user = m_user;
837            }
838            else {
839                user = encodeURIComponentIfNecessary(m_user);
840                user = user.replace("%3A", ":");
841            }
842            return user;
843        };
844        var getAuthority = function(encoded, outputOptions) {
845            var doNotPercentEncodeHost = false;
846
847            if (typeof outputOptions !== "undefined" && typeof outputOptions.doNotPercentEncodeHost === 'boolean') {
848                doNotPercentEncodeHost = outputOptions.doNotPercentEncodeHost;
849            }
850            var authority = "";
851            var user;
852            var host;
853            var port;
854
855            if (encoded) {
856                user = getUserEncodedIfNecessary();
857                if (doNotPercentEncodeHost) {
858                    host = m_host;
859                }
860                else {
861                    host = encodeURIComponentIfNecessary(m_host);
862                }
863                port = encodeURIComponentIfNecessary(m_port);
864            }
865            else {
866                user = m_user;
867                host = m_host;
868                port = m_port;
869            }
870            if (user !== "") {
871                authority = user + URI_AT;
872            }
873            if (m_host !== "") {
874                authority += host;
875            }
876            if (m_port !== "") {
877                authority += URI_COLON + port;
878            }
879            return authority;
880        };
881        var encodeURIComponentIfNecessary = function(component) {
882            return m_disableEncodingDecodingForLegacyCode ? component : encodeURIComponent(component);
883        };
884        var decodeURIComponentIfNecessary = function(component) {
885            return m_disableEncodingDecodingForLegacyCode ? component : URI.decodeURIComponent(component);
886        };
887
888        parseURI();
889    };
890    (function() {
891        var g_rgdwchMinEncoded = [0x00000000, 0x00000080, 0x00000800, 0x00010000, 0x00200000, 0x04000000, 0x80000000];
892
893        function Vutf8ToUnicode(rgBytes) {
894            var ix = 0;
895            var strResult = "";
896            var dwch, wch, uch;
897            var nTrailBytes, nTrailBytesOrig;
898
899            while (ix < rgBytes.length) {
900                if (rgBytes[ix] <= 0x007f) {
901                    strResult += String.fromCharCode(rgBytes[ix++]);
902                }
903                else {
904                    uch = rgBytes[ix++];
905                    nTrailBytes = Boolean(uch & 0x20) ? Boolean(uch & 0x10) ? 3 : 2 : 1;
906                    nTrailBytesOrig = nTrailBytes;
907                    dwch = uch & 0xff >>> 2 + nTrailBytes;
908                    while (Boolean(nTrailBytes) && ix < rgBytes.length) {
909                        --nTrailBytes;
910                        uch = rgBytes[ix++];
911                        if (uch == 0) {
912                            return strResult;
913                        }
914                        if ((uch & 0xC0) != 0x80) {
915                            strResult += '?';
916                            break;
917                        }
918                        dwch = dwch << 6 | uch & 0x003f;
919                    }
920                    if (Boolean(nTrailBytes)) {
921                        strResult += '?';
922                        break;
923                    }
924                    if (dwch < g_rgdwchMinEncoded[nTrailBytesOrig]) {
925                        strResult += '?';
926                        break;
927                    }
928                    else if (dwch <= 0xffff) {
929                        strResult += String.fromCharCode(dwch);
930                    }
931                    else if (dwch <= 0x10ffff) {
932                        dwch -= 0x10000;
933                        strResult += String.fromCharCode(0xD800 | dwch >>> 10);
934                        strResult += String.fromCharCode(0xDC00 | dwch & 0x003FF);
935                    }
936                    else {
937                        strResult += '?';
938                    }
939                }
940            }
941            return strResult;
942        }
943        function unescapeProperlyInternal(str) {
944            if (str == null)
945                return "null";
946            var ix = 0, ixEntity = 0;
947            var strResult = "";
948            var rgUTF8Bytes = [];
949            var ixUTF8Bytes = 0;
950            var hexString, hexCode;
951
952            while (ix < str.length) {
953                if (str.charAt(ix) == '%') {
954                    if (str.charAt(++ix) == 'u') {
955                        hexString = "";
956                        for (ixEntity = 0; ixEntity < 4 && ix < str.length; ++ixEntity) {
957                            hexString += str.charAt(++ix);
958                        }
959                        while (hexString.length < 4) {
960                            hexString += '0';
961                        }
962                        hexCode = parseInt(hexString, 16);
963                        if (isNaN(hexCode)) {
964                            strResult += '?';
965                        }
966                        else {
967                            strResult += String.fromCharCode(hexCode);
968                        }
969                    }
970                    else {
971                        hexString = "";
972                        for (ixEntity = 0; ixEntity < 2 && ix < str.length; ++ixEntity) {
973                            hexString += str.charAt(ix++);
974                        }
975                        while (hexString.length < 2) {
976                            hexString += '0';
977                        }
978                        hexCode = parseInt(hexString, 16);
979                        if (isNaN(hexCode)) {
980                            if (Boolean(ixUTF8Bytes)) {
981                                strResult += Vutf8ToUnicode(rgUTF8Bytes);
982                                ixUTF8Bytes = 0;
983                                rgUTF8Bytes.length = ixUTF8Bytes;
984                            }
985                            strResult += '?';
986                        }
987                        else {
988                            rgUTF8Bytes[ixUTF8Bytes++] = hexCode;
989                        }
990                    }
991                }
992                else {
993                    if (Boolean(ixUTF8Bytes)) {
994                        strResult += Vutf8ToUnicode(rgUTF8Bytes);
995                        ixUTF8Bytes = 0;
996                        rgUTF8Bytes.length = ixUTF8Bytes;
997                    }
998                    strResult += str.charAt(ix++);
999                }
1000            }
1001            if (Boolean(ixUTF8Bytes)) {
1002                strResult += Vutf8ToUnicode(rgUTF8Bytes);
1003                ixUTF8Bytes = 0;
1004                rgUTF8Bytes.length = ixUTF8Bytes;
1005            }
1006            return strResult;
1007        }
1008        function URI_unescapeProperly(str) {
1009            var strResult = null;
1010
1011            try {
1012                strResult = decodeURIComponent(str);
1013            }
1014            catch (e) {
1015                strResult = unescapeProperlyInternal(str);
1016            }
1017            return strResult;
1018        }
1019        function URI_GetAbsoluteUrl(url) {
1020            var dummyAnchor = document.createElement('a');
1021
1022            dummyAnchor.href = url;
1023            var retVal = dummyAnchor.href;
1024
1025            dummyAnchor = null;
1026            return retVal;
1027        }
1028        ;
1029        function URI_RemoveQueryParameterFromUrl(stURL, stParameterName) {
1030            var startArg = stURL.indexOf("?");
1031            var startFragment = stURL.indexOf("#");
1032
1033            if (-1 == startArg)
1034                return stURL;
1035            if (-1 == startFragment)
1036                startFragment = stURL.length;
1037            if (startFragment <= startArg)
1038                return stURL;
1039            var stUrlArgs = stURL.substr(startArg, startFragment - startArg);
1040            var re = new RegExp("[&?]" + stParameterName + "=[^&]*", "");
1041
1042            stUrlArgs = stUrlArgs.replace(re, "");
1043            if (stUrlArgs.length > 0 && "&" == stUrlArgs[0]) {
1044                stUrlArgs = "?" + stUrlArgs.substr(1);
1045            }
1046            return stURL.substr(0, startArg) + stUrlArgs + stURL.substr(startFragment);
1047        }
1048        function URI_RemoveUrlKeyValue(keyName, url) {
1049            var re = new RegExp(keyName + "=[^&]*&");
1050
1051            url = url.replace(re, "");
1052            re = new RegExp(keyName + "=[^&]*");
1053            url = url.replace(re, "");
1054            return url;
1055        }
1056        function URI_RemoveParametersFromUrl(url) {
1057            var paramsBeginPos = url.indexOf('?');
1058
1059            if (paramsBeginPos == -1)
1060                return url;
1061            else
1062                return url.substr(0, paramsBeginPos);
1063        }
1064        function URI_StURLSetVar2(stURL, stVar, stValue) {
1065            var stNewSet = stVar + "=" + stValue;
1066            var ichQ = stURL.indexOf("?");
1067            var ichH = stURL.indexOf("#");
1068
1069            if (ichQ != -1) {
1070                var ich = stURL.indexOf("?" + stVar + "=", ichQ);
1071
1072                if (ich == -1) {
1073                    ich = stURL.indexOf("&" + stVar + "=", ichQ);
1074                    if (ich != -1)
1075                        stNewSet = "&" + stNewSet;
1076                }
1077                else {
1078                    stNewSet = "?" + stNewSet;
1079                }
1080                if (ich != -1) {
1081                    var re = new RegExp("[&?]" + stVar + "=[^&#]*", "");
1082
1083                    stURL = stURL.replace(re, stNewSet);
1084                }
1085                else {
1086                    if (ichH == -1)
1087                        stURL = stURL + "&" + stNewSet;
1088                    else
1089                        stURL = stURL.substr(0, ichH) + "&" + stNewSet + stURL.substr(ichH);
1090                }
1091            }
1092            else {
1093                if (ichH == -1)
1094                    stURL = stURL + "?" + stNewSet;
1095                else
1096                    stURL = stURL.substr(0, ichH) + "?" + stNewSet + stURL.substr(ichH);
1097            }
1098            return stURL;
1099        }
1100        function URI_CompleteDecode(strIn) {
1101            if (typeof strIn == 'undefined' || strIn == null)
1102                return strIn;
1103            var strOut = strIn;
1104            var dStr = URI_unescapeProperly(strOut);
1105
1106            while (strOut != dStr) {
1107                strOut = dStr;
1108                dStr = URI_unescapeProperly(strOut);
1109            }
1110            return strOut;
1111        }
1112        function URI_RestructureFilterUrl(strDocUrl, filterNo) {
1113            var j = filterNo + 1;
1114            var filterArray = strDocUrl.match(new RegExp("FilterField" + String(j) + "=[^&]*"));
1115            var isMultipleFilter = false;
1116
1117            if (!Boolean(filterArray)) {
1118                filterArray = strDocUrl.match(new RegExp("FilterFields" + String(j) + "=[^&]*"));
1119                isMultipleFilter = filterArray != null;
1120            }
1121            for (var i = filterNo; filterArray != null; i++) {
1122                var strNew = isMultipleFilter ? "FilterFields" + String(i) : "FilterField" + String(i);
1123                var strOld = isMultipleFilter ? "FilterFields" + String(j) : "FilterField" + String(j);
1124
1125                strDocUrl = strDocUrl.replace(strOld, strNew);
1126                strNew = isMultipleFilter ? "FilterValues" + String(i) : "FilterValue" + String(i);
1127                strOld = isMultipleFilter ? "FilterValues" + String(j) : "FilterValue" + String(j);
1128                strDocUrl = strDocUrl.replace(strOld, strNew);
1129                strNew = "FilterOp" + String(i);
1130                strOld = "FilterOp" + String(j);
1131                strDocUrl = strDocUrl.replace(strOld, strNew);
1132                strNew = "FilterLookupId" + String(i);
1133                strOld = "FilterLookupId" + String(j);
1134                strDocUrl = strDocUrl.replace(strOld, strNew);
1135                strNew = "FilterData" + String(i);
1136                strOld = "FilterData" + String(j);
1137                strDocUrl = strDocUrl.replace(strOld, strNew);
1138                j++;
1139                filterArray = strDocUrl.match(new RegExp("FilterField" + String(j) + "=[^&]*"));
1140                if (!Boolean(filterArray))
1141                    filterArray = strDocUrl.match(new RegExp("FilterFields" + String(j) + "=[^&]*"));
1142            }
1143            return strDocUrl;
1144        }
1145        function URI_ParseMultiColumnValue(fieldValue, delimiter, bIncludeEmpty) {
1146            var strSubColumn;
1147            var subColumnValues = [];
1148
1149            if (delimiter == null)
1150                delimiter = ';#';
1151            var lead = delimiter.charCodeAt(0);
1152            var trail = delimiter.charCodeAt(1);
1153
1154            if (fieldValue == null || fieldValue.length == 0)
1155                return subColumnValues;
1156            var strLead = delimiter.charAt(0);
1157            var strLeadLead = strLead + strLead;
1158            var escaped = new RegExp(strLeadLead, "g");
1159            var unescaped = delimiter.charAt(0);
1160            var startLocal = 0;
1161
1162            if (fieldValue.substr(0, 2) == delimiter) {
1163                if (Boolean(bIncludeEmpty))
1164                    subColumnValues.push('');
1165                startLocal = 2;
1166            }
1167            var end = startLocal;
1168            var bContainEscapedCharacters = false;
1169            var totalLength = fieldValue.length;
1170
1171            while (end < totalLength) {
1172                var index = fieldValue.indexOf(strLead, end);
1173
1174                if (index >= 0) {
1175                    end = index;
1176                    end++;
1177                    if (fieldValue.charCodeAt(end) == trail) {
1178                        if (end - 1 > startLocal) {
1179                            strSubColumn = fieldValue.substr(startLocal, end - startLocal - 1);
1180                            if (bContainEscapedCharacters)
1181                                strSubColumn = strSubColumn.replace(escaped, unescaped);
1182                            subColumnValues.push(strSubColumn);
1183                            bContainEscapedCharacters = false;
1184                        }
1185                        else {
1186                            subColumnValues.push('');
1187                        }
1188                        end++;
1189                        startLocal = end;
1190                        continue;
1191                    }
1192                    else if (fieldValue.charCodeAt(end) == lead) {
1193                        end++;
1194                        bContainEscapedCharacters = true;
1195                        continue;
1196                    }
1197                    else {
1198                        throw "ArgumentException";
1199                    }
1200                }
1201                else {
1202                    end = totalLength;
1203                }
1204            }
1205            if (end > startLocal) {
1206                strSubColumn = fieldValue.substr(startLocal, end - startLocal);
1207                if (bContainEscapedCharacters)
1208                    strSubColumn = strSubColumn.replace(escaped, unescaped);
1209                subColumnValues.push(strSubColumn);
1210            }
1211            else if (Boolean(bIncludeEmpty))
1212                subColumnValues.push('');
1213            return subColumnValues;
1214        }
1215        function URI_ConvertMultiColumnValueToString(subColumnValues, delimiter, bAddLeadingTailingDelimiter) {
1216            if (delimiter == null)
1217                delimiter = ";#";
1218            if (bAddLeadingTailingDelimiter == null)
1219                bAddLeadingTailingDelimiter = true;
1220            var strLead = delimiter.charAt(0);
1221            var strLeadLead = strLead + strLead;
1222            var escaped = new RegExp(delimiter.charAt(0), "g");
1223            var bHasValue = false;
1224            var sb = '';
1225
1226            for (var i = 0; i < subColumnValues.length; i++) {
1227                var strSubColumn = subColumnValues[i];
1228
1229                if (strSubColumn != null && strSubColumn.length > 0)
1230                    strSubColumn = strSubColumn.replace(escaped, strLeadLead);
1231                if (strSubColumn != null && strSubColumn.length > 0)
1232                    bHasValue = true;
1233                if (bAddLeadingTailingDelimiter || i != 0)
1234                    sb += delimiter;
1235                sb += strSubColumn;
1236            }
1237            if (bHasValue) {
1238                if (bAddLeadingTailingDelimiter) {
1239                    sb += delimiter;
1240                }
1241                return sb;
1242            }
1243            else
1244                return '';
1245        }
1246        URI.decodeURIComponent = URI_unescapeProperly;
1247        URI.getAbsolute = URI_GetAbsoluteUrl;
1248        URI.removeKeyValue = URI_RemoveUrlKeyValue;
1249        URI.removeParameters = URI_RemoveParametersFromUrl;
1250        URI.removeQueryParameter = URI_RemoveQueryParameterFromUrl;
1251        URI.stURLSetVar2 = URI_StURLSetVar2;
1252        URI.completeDecode = URI_CompleteDecode;
1253        URI.restructureFilterUrl = URI_RestructureFilterUrl;
1254        URI.parseMultiColumnValue = URI_ParseMultiColumnValue;
1255        URI.convertMultiColumnValueToString = URI_ConvertMultiColumnValueToString;
1256    })();
1257    unescapeProperly = URI.decodeURIComponent;
1258    GetAbsoluteUrl = URI.getAbsolute;
1259    RemoveParametersFromUrl = URI.removeParameters;
1260    RemoveQueryParameterFromUrl = URI.removeQueryParameter;
1261    RemoveUrlKeyValue = URI.removeKeyValue;
1262    StURLSetVar2 = URI.stURLSetVar2;
1263    ParseMultiColumnValue = URI.parseMultiColumnValue;
1264    ConvertMultiColumnValueToString = URI.convertMultiColumnValueToString;
1265    CompleteDecode = URI.completeDecode;
1266    if (typeof URI_Encoding == 'undefined') {
1267        URI_Encoding = {
1268            "__namespace": true
1269        };
1270        URI_Encoding_module_def();
1271    }
1272    escapeUrlForCallback = URI_Encoding.escapeUrlForCallback;
1273    escapeProperly = URI_Encoding.encodeURIComponent;
1274    escapeProperlyCore = URI_Encoding.encodeURIComponent;
1275    escapeProperlyCoreCore = URI_Encoding.encodeURIComponent;
1276    PageContextInfo_InitializePrototype();
1277    if (typeof Nav == 'undefined') {
1278        Nav = {
1279            "__namespace": true
1280        };
1281        Nav_module_def();
1282    }
1283    ajaxNavigate = Nav.ajaxNavigate;
1284    STSNavigate = Nav.navigate;
1285    GetUrlKeyValue = Nav.getUrlKeyValue;
1286    STSPageUrlValidation = function(url) {
1287        return Nav.pageUrlValidation(url, Strings.STS.L_InvalidPageUrl_Text);
1288    };
1289    PageUrlValidation = function(url) {
1290        return Nav.pageUrlValidation(url, Strings.STS.L_InvalidPageUrl_Text);
1291    };
1292    AjaxNavigate$isMDSURL = Nav.isMDSUrl;
1293    isPortalTemplatePage = Nav.isPortalTemplatePage;
1294    GoToHistoryLink = Nav.goToHistoryLink;
1295    GetGotoLinkUrl = Nav.getGoToLinkUrl;
1296    GoToLink = Nav.goToLink;
1297    GoToLinkOrDialogNewWindow = Nav.goToLinkOrDialogNewWindow;
1298    GoToDiscussion = Nav.goToDiscussion;
1299    GetSource = Nav.getSource;
1300    RemoveMDSQueryParametersFromUrl = Nav.removeMDSQueryParametersFromUrl;
1301    AjaxNavigate$_GetWindowLocationNoHash = Nav.getWindowLocationNoHash;
1302    AjaxNavigate$WantsNewTab = Nav.wantsNewTab;
1303    AjaxNavigate$parseHash = Nav.parseHash;
1304    AjaxNavigate$_UrlFromHashBag = Nav.urlFromHashBag;
1305    AjaxNavigate$_getAjaxLocationWindow = Nav.getAjaxLocationWindow;
1306    IsSTSPageUrlValid = Nav.isPageUrlValid;
1307    AjaxNavigate$OnClickHook = Nav.onClickHook;
1308    AjaxNavigate$convertRegularURLtoMDSURL = Nav.convertRegularURLtoMDSURL;
1309    AjaxNavigate$convertMDSURLtoRegularURL = Nav.ajaxNavigate.convertMDSURLtoRegularURL;
1310    if (typeof ProfileCache == 'undefined') {
1311        ProfileCache = {
1312            "__namespace": true
1313        };
1314        ProfileCache_module_def();
1315    }
1316    if (typeof ListModule == 'undefined') {
1317        ListModule = {
1318            "__namespace": true
1319        };
1320        ListModule_module_def();
1321    }
1322    BasePermissions = ListModule.BasePermissions;
1323    ContextInfo = ListModule.Context;
1324    CTXTYPE_EDITMENU = ListModule.Context.Type.EditMenu;
1325    CTXTYPE_VIEWSELECTOR = ListModule.Context.Type.ViewSelector;
1326    if (typeof List_Util == 'undefined') {
1327        List_Util = {
1328            "__namespace": true
1329        };
1330        List_Util_module_def();
1331    }
1332    ctxInitItemState = ListModule.Util.ctxInitItemState;
1333    ClearSelectedItemsDict = ListModule.Util.clearSelectedItemsDict;
1334    CreateItemPropertiesTitleUrl = ListModule.Util.createItemPropertiesTitleUrl;
1335    GetAttributeFromItemTable = ListModule.Util.getAttributeFromItemTable;
1336    GetSelectedItemsDict = ListModule.Util.getSelectedItemsDict;
1337    RemoveOnlyPagingArgs = ListModule.Util.removeOnlyPagingArgs;
1338    RemovePagingArgs = ListModule.Util.removePagingArgs;
1339    ShowAttachmentRows = ListModule.Util.showAttachmentRows;
1340    CanUploadFile = ListModule.Util.canUploadFile;
1341    addWPQtoId = ListModule.Util.addWPQtoId;
1342    isDefinedAndNotNullOrEmpty = ListModule.Util.isDefinedAndNotNullOrEmpty;
1343    HasEditPermission = ListModule.Util.hasEditPermission;
1344    getHostUrl = ListModule.Util.getHostUrl;
1345    ReconcileQstringFilters = ListModule.Util.reconcileQstringFilters;
1346    QstringStruct = ListModule.Util.Qstring;
1347    if (typeof SuiteNavCommon == 'undefined') {
1348        SuiteNavCommon = {
1349            "__namespace": true
1350        };
1351        SuiteNavCommon_module_def();
1352    }
1353    if (typeof OnePageUtil == 'undefined') {
1354        OnePageUtil = {
1355            "__namespace": true
1356        };
1357        OnePageUtil_module_def();
1358    }
1359    if (Flighting == null) {
1360        Flighting = {};
1361        Flighting.ExpFeatures = [];
1362    }
1363    Flighting.VariantConfiguration = {};
1364    Flighting.VariantConfiguration.IsExpFeatureClientEnabled = function(id) {
1365        var elem = Math.floor(id / 32);
1366        var mask;
1367
1368        if (!(window["OffSwitch"] == null || OffSwitch.IsActive("AF5A380E-20E0-4096-BA87-2C4CDFB4DBDF"))) {
1369            var expFeatures = Flighting.ExpFeatures;
1370            var pageContextInfo = window['_spPageContextInfo'];
1371
1372            if (expFeatures.length === 0 && pageContextInfo != null && pageContextInfo.ExpFeatures != null) {
1373                expFeatures = _spPageContextInfo.ExpFeatures;
1374            }
1375            if (elem < 0 || elem >= expFeatures.length) {
1376                return false;
1377            }
1378            mask = 1 << id % 32;
1379            return (expFeatures[elem] & mask) != 0;
1380        }
1381        else {
1382            if (elem < 0 || elem >= Flighting.ExpFeatures.length) {
1383                return false;
1384            }
1385            mask = 1 << id % 32;
1386            return (Flighting.ExpFeatures[elem] & mask) != 0;
1387        }
1388    };
1389    String.prototype.trim = function() {
1390        return (this.replace(/^\s\s*/, '')).replace(/\s\s*$/, '');
1391    };
1392    currentCtx = null;
1393    itemTable = null;
1394    if ('undefined' == typeof g_supportFiles)
1395        g_supportFiles = new Array(0);
1396    if (!(window["OffSwitch"] == null || OffSwitch.IsActive("79D8320F-D4AA-45D1-A83F-9B7AF522EE5C"))) {
1397        OnePageUtil.overrideEventListenerFunctions(window);
1398        OnePageUtil.overrideEventListenerFunctions(document);
1399        var timerManager = OnePageUtil.GetTimerManager();
1400
1401        timerManager.overrideTimer();
1402    }
1403    if (!Boolean(ULS))
1404        ULS = new ULSObject;
1405    ULSObject.prototype = {
1406        bucket: undefined,
1407        request: undefined,
1408        Correlation: undefined,
1409        OnReceiveBucketParameters: undefined,
1410        WebServiceNS: undefined,
1411        file: undefined,
1412        line: undefined,
1413        callStack: undefined,
1414        clientInfo: undefined,
1415        enable: undefined
1416    };
1417    if (typeof window.onerror != 'undefined' && window.onerror != ULSOnError) {
1418        ULS.OriginalOnError = window.onerror;
1419        window.onerror = ULSOnError;
1420    }
1421    if (!Boolean(ULSCat))
1422        ULSCat = {};
1423    ULSCat.msoulscat_WSS_General = 'WSS';
1424    ULSCat.msoulscat_WSS_DeltaManager = 'DeltaManager';
1425    ULSCat.msoulscat_WSS_Inplview = 'Inplview';
1426    ULSCat.msoulscat_WSS_JsGrid = 'JsGrid';
1427    ULSCat.msoulscat_WSS_MediaPlayer = 'MediaPlayer';
1428    ULSCat.msoulscat_WSS_SPGantt = 'SPGantt';
1429    ULS.AssertJS = function(category, condition, message) {
1430        if (condition == false) {
1431            var formattedMessage = "[Category: " + category + "] [Assert: " + message + "]";
1432
1433            ULSSendExceptionImpl(formattedMessage, window.location.href, 0, ULS.AssertJS.caller);
1434        }
1435    };
1436    ULS.SendErrorMessageJS = function(category, message) {
1437        var formattedMessage = "[Category: " + category + "] [Error: " + message + "]";
1438
1439        ULSSendExceptionImpl(formattedMessage, window.location.href, 0, ULS.SendErrorMessageJS.caller);
1440    };
1441    ULS.SendExceptionJS = function(category, exception) {
1442        var formattedMessage;
1443
1444        if (exception != null) {
1445            var exmessage = exception.message;
1446            var exname = exception.name;
1447
1448            if (typeof exmessage != "undefined" && typeof exname != "undefined") {
1449                formattedMessage = "[Category: " + category + "] [Exception Name: " + exname + ", Exception Message: " + exmessage + "]";
1450            }
1451            else {
1452                formattedMessage = "[Category: " + category + "] [Exception: " + exception.toString() + "]";
1453            }
1454        }
1455        else {
1456            formattedMessage = "[Category: " + category + "] [Exception: Null Exception]";
1457        }
1458        ULSSendExceptionImpl(formattedMessage, window.location.href, 0, ULS.SendExceptionJS.caller);
1459    };
1460    if (typeof Sys != "undefined" && Boolean(Sys) && typeof Sys.Application != "undefined" && Boolean(Sys.Ap
1460plication) && typeof Sys.Application.notifyScriptLoaded == "function") {
1461        Sys.Application.notifyScriptLoaded();
1462    }
1463    if (typeof NotifyScriptLoadedAndExecuteWaitingJobs == "function") {
1464        NotifyScriptLoadedAndExecuteWaitingJobs("owsbrows.js");
1465    }
1466    if (typeof spWriteProfilerMark == 'function')
1467        spWriteProfilerMark("perfMarkEnd_" + "init.js");
1468    g_cde = {};
1469    ;
1470    ;
1471    LegalUrlChars = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, false, false, true, false, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
1472    poundIndex = 35;
1473    percentIndex = 37;
1474    if (typeof Sys != "undefined" && Boolean(Sys) && Boolean(Sys.Application)) {
1475        Sys.Application.notifyScriptLoaded();
1476    }
1477    if (typeof NotifyScriptLoadedAndExecuteWaitingJobs == "function") {
1478        NotifyScriptLoadedAndExecuteWaitingJobs("commonvalidation.js");
1479    }
1480    recycleBinEnabled = 0;
1481    cascadeDeleteWarningMessage = "";
1482    bIsFileDialogView = false;
1483    g_ViewIdToViewCounterMap = [];
1484    g_ctxDict = [];
1485    bIsFileDialogView = false;
1486    g_ViewIdToViewCounterMap = [];
1487    g_ctxDict = [];
1488    browserUpdatedWithServerRedirectedUrl = false;
1489    g_objProjectTaskLaunch = null;
1490    g_ssImporterObj = null;
1491    g_fSSImporter = false;
1492    if (typeof Date.now === 'undefined' || Date.now === null) {
1493        Date.now = function() {
1494            return Number(new Date());
1495        };
1496    }
1497    JSRequest = {
1498        QueryString: null,
1499        FileName: null,
1500        PathName: null,
1501        EnsureSetup: function() {
1502            if (JSRequest.QueryString != null)
1503                return;
1504            JSRequest.QueryString = [];
1505            var queryString = (ajaxNavigate.get_search()).substring(1);
1506            var pairs = queryString.split("&");
1507            var p;
1508
1509            for (var i = 0; i < pairs.length; i++) {
1510                var pair = pairs[i];
1511
1512                p = pair.indexOf("=");
1513                if (p > -1) {
1514                    var key = pair.substring(0, p);
1515                    var value = pair.substring(p + 1);
1516
1517                    JSRequest.QueryString[key] = value;
1518                }
1519            }
1520            var path = JSRequest.PathName = window.location.pathname;
1521
1522            p = path.lastIndexOf("/");
1523            if (p > -1) {
1524                JSRequest.FileName = path.substring(p + 1);
1525            }
1526            else {
1527                JSRequest.PageName = path;
1528            }
1529        }
1530    };
1531    ExpGroupWPListName = "WSS_ExpGroupWPList";
1532    ExpGroupCookiePrefix = "WSS_ExpGroup_";
1533    ExpGroupCookieDelimiter = "&";
1534    ExpGroupMaxWP = 11;
1535    ExpGroupMaxCookieLength = 3960;
1536    g_ExpGroupCAMLQueue = new Array(0);
1537    g_ExpGroupXSLTQueue = new Array(0);
1538    g_ExpGroupInProgress = false;
1539    g_ExpInitializing = false;
1540    g_ExpGroupTable = [];
1541    g_ExpGroupNeedsState = false;
1542    g_ExpGroupParseStage = false;
1543    locked = false;
1544    if ("undefined" == typeof _v_dictSod) {
1545        _v_dictSod = [];
1546    }
1547    if ("undefined" == typeof _v_dictCss) {
1548        _v_dictCss = [];
1549    }
1550    Sods = {
1551        missing: 1,
1552        loading: 2,
1553        pending: 3,
1554        loaded: 4,
1555        error: 5
1556    };
1557    _v_qsod = [];
1558    _v_sodctx = {
1559        "document": document,
1560        "window": window
1561    };
1562    Sod.prototype = {
1563        url: undefined,
1564        key: undefined,
1565        loaded: undefined,
1566        depkeys: undefined,
1567        state: undefined,
1568        qfn: undefined,
1569        reset: undefined
1570    };
1571    SodCallbackInfo.prototype = {
1572        success: undefined,
1573        error: undefined,
1574        expectedType: undefined
1575    };
1576    g_PendingLoadSodQueue = null;
1577    g_viewportHeight = null;
1578    g_viewportWidth = null;
1579    g_wpadderHeight = 0;
1580    g_setWidthInited = false;
1581    g_workspaceResizedHandlers = [];
1582    g_setScrollPos = false;
1583    g_frl = false;
1584    g_spribbon = new Object();
1585    g_spribbon.isMinimized = true;
1586    g_spribbon.isInited = false;
1587    g_spribbon.minimizedHeight = "35px";
1588    g_spribbon.maximizedHeight = "126px";
1589    v_stsOpenDoc2 = null;
1590    v_strStsOpenDoc2 = null;
1591    deleteInstance = 0;
1592    firstCalled = true;
1593    _callbackinitdelayed = false;
1594    g_spDragDropUpload = {};
1595    SPDragUploadInfo.prototype = {
1596        webPartId: undefined,
1597        serverUrl: undefined,
1598        siteRelativeUrl: undefined,
1599        listName: undefined,
1600        rootFolder: undefined,
1601        overwriteAll: undefined,
1602        hideProgressBar: undefined,
1603        refreshFunc: undefined,
1604        preUploadFunc: undefined,
1605        postUploadFunc: undefined,
1606        checkPermissionFunc: undefined
1607    };
1608    g_QuickLaunchControlIds = [];
1609    PageMinimized();
1610    OverrideDefaultMethod("confirm", "LogConfirm", 1);
1611    OverrideDefaultMethod("alert", "LogAlert", 1);
1612    SupplementDefaultMethod("onerror", "LogOnError", 5);
1613    IMNControlObj = null;
1614    bIMNControlInited = false;
1615    IMNDictionaryObj = null;
1616    IMNDictionaryPresenceTextObj = null;
1617    bIMNSorted = false;
1618    bIMNOnloadAttached = false;
1619    IMNOrigScrollFunc = null;
1620    bIMNInScrollFunc = false;
1621    IMNSortableObj = null;
1622    IMNHeaderObj = null;
1623    IMNNameDictionaryObj = null;
1624    IMNNameDictionaryPresenceTextObj = null;
1625    IMNShowOfflineObj = null;
1626    OwaLang = "1033";
1627    OwaRoot = "owa/";
1628    OwaSharedHoverCardJsKey = "sharedhovercard.js";
1629    OwaSharedHoverCardStringsJsKey = "sharedhovercard.strings.js";
1630    SharedHoverCardHideTime = 800;
1631    SharedHoverCardDelayTimer = null;
1632    SharedHoverCardDelayTime = 250;
1633    SharedHoverCardDelayed = null;
1634    SharedHoverCardPending = null;
1635    currentShowHoverCardInstance = 0;
1636    nextShowHoverCardInstance = 0;
1637    currentShowHoverCardInstanceBootstrappedState = false;
1638    IMNImageInfo_InitializePrototype();
1639    imnCount = 0;
1640    imnElemsCount = 0;
1641    imnMarkerBatchSize = 4;
1642    imnMarkerBatchDelay = 40;
1643    sharedHoverCardsCount = 0;
1644    sharedHoverCardElementsCount = 0;
1645    sharedHoverCardMarkerBatchSize = 4;
1646    sharedHoverCardMarkerBatchDelay = 40;
1647    IsIFrameSharedHoverCard = false;
1648    SharedHoverCardIFrame = null;
1649    SharedHoverCardIFrameCode = "<!DOCTYPE html><html><head></head>\
1650    <body style='background-color:#ffffff; left:-9px; top:-9px'>\
1651    <script type='text/javascript'>var g_Workspace = 's4-workspace'; var files = new Array();\
1652    function FindFiles() {\
1653	    var scripts = window.parent.document.getElementsByTagName('script');\
1654	    for (var i = 0; i < scripts.length; i++) {\
1655		    var src = scripts[i].src; if (src.indexOf('/init.js') != -1 || src.indexOf('/init.debug.js') != -1) files[0] = src;\
1656		    else if (src.indexOf('/core.js') != -1 || src.indexOf('/core.debug.js') != -1) files[1] = src;\
1657	    }\
1658    }\
1659    function LoadFiles(index) {\
1660	    if (index >= files.length) {\
1661		    InitIFrameSharedHoverCard();\
1662		    return;\
1663	    }\
1664	    var scriptTag = document.createElement('script'); scriptTag.src = files[index];\
1665	    if (scriptTag.readyState) {\
1666		    scriptTag.onreadystatechange = function () {\
1667			    if (scriptTag.readyState == 'loaded' || scriptTag.readyState == 'complete') { LoadFiles(index + 1); }\
1668		    };\
1669	    } else {\
1670		    scriptTag.onload = function () { LoadFiles(index + 1); };\
1671	    }\
1672	    document.getElementsByTagName('head')[0].appendChild(scriptTag);\
1673    }\
1674    if (window.parent != null) { FindFiles(); LoadFiles(0); }\
1675    </script></body></html>\
1676";
1677    ;
1678    _spBodyOnLoadCalled = false;
1679    if (typeof _spBodyOnLoadFunctions === "undefined" || _spBodyOnLoadFunctions === null) {
1680        _spBodyOnLoadFunctions = [];
1681    }
1682    _spFormOnSubmitCalled = false;
1683    _spBodyOnPageShowRegistered = false;
1684    _spBodyOnLoadCalled = false;
1685    if ("undefined" != typeof _spBodyOnLoad) {
1686        _spBodyOnLoad = undefined;
1687    }
1688    if ("undefined" != typeof _spRestoreScrollForDiv_rscr) {
1689        _spRestoreScrollForDiv_rscr = undefined;
1690    }
1691    if (_spBodyOnLoadFunctionNames == null) {
1692        _spBodyOnLoadFunctionNames = [];
1693        _spBodyOnLoadFunctionNames.push("_spBodyOnLoad");
1694        _spBodyOnLoadFunctionNames.push("_spRestoreScrollForDiv_rscr");
1695    }
1696    _spFormOnSubmitCalled = false;
1697    _spBodyOnPageShowRegistered = false;
1698    _spPageLoadedRegistered = false;
1699    _inlineEditString = null;
1700    _spOriginalFormAction = null;
1701    g_numberOfYields = 10;
1702    g_spPreFetchKeys = [];
1703    _spSuppressFormOnSubmitWrapper = false;
1704    _inlineEditString = null;
1705    _spPageLoadedRegistered = false;
1706    g_fAnimateListCSR = true;
1707    g_fAreAllSodsLoaded = false;
1708    if (document.body == null || document.body.firstChild == null) {
1709        if (typeof document.addEventListener != 'undefined' && typeof window.msWriteProfilerMark != 'undefined') {
1710            document.addEventListener("DOMContentLoaded", function() {
1711                window.msWriteProfilerMark("DOMContentLoaded");
1712            }, false);
1713        }
1714        AttachEvent("DOMContentLoaded", _spBodyOnLoadWrapper, document);
1715        window.onload = _spBodyOnLoadWrapper;
1716        AttachEvent("hashchange", _bodyOnHashChangeHandler, window);
1717    }
1718    DeveloperDashboard = {
1719        wnd: null,
1720        msgQueue: [],
1721        cookie: 'WSS_DeveloperDashboard',
1722        PostMsg: function(to, subject, msg) {
1723            DeveloperDashboard.msgQueue.push({
1724                to: to,
1725                subject: subject,
1726                msg: msg
1727            });
1728        }
1729    };
1730    (function() {
1731        window.setTimeout(function() {
1732            ddInit();
1733            ddToggleCScope();
1734        }, 0);
1735    })();
1736    flyoutsAllowed = false;
1737    g_ExecuteOrWaitJobs = new Object();
1738    cuiKeyHash = {};
1739    cuiKeyHash[219] = 91;
1740    cuiKeyHash[221] = 93;
1741    cuiKeyHash[51] = 35;
1742    cuiKeyHash[186] = 59;
1743    cuiKeyHash[187] = 61;
1744    cuiKeyHash[188] = 44;
1745    cuiKeyHash[189] = 45;
1746    cuiKeyHash[190] = 46;
1747    cuiKeyHash[191] = 47;
1748    cuiKeyHash[222] = 39;
1749    g_ribbonHeaderScaleClass = ['ms-cui-tts', 'ms-cui-tts-scale-1', 'ms-cui-tts-scale-2'];
1750    SPRibbonInfo.prototype.buildMinimized = undefined;
1751    SPRibbonInfo.prototype.initialTabId = undefined;
1752    StatusIdWithTopPriority = null;
1753    StatusColorWithTopPriority = null;
1754    StatusPriority = {
1755        red: 4,
1756        yellow: 3,
1757        green: 2,
1758        blue: 1
1759    };
1760    StatusBarClassNames = {
1761        "4": "ms-status-red",
1762        "3": "ms-status-yellow",
1763        "2": "ms-status-green",
1764        "1": "ms-status-blue"
1765    };
1766    ColorMap = {
1767        red: 4,
1768        yellow: 3,
1769        green: 2,
1770        blue: 1
1771    };
1772    g_uniqueIndex = 0;
1773    g_dlgWndTop = null;
1774    g_spDlgLauncher = true;
1775    g_ModalDialogCount = 0;
1776    g_overlayPopup = undefined;
1777    g_childDialog = undefined;
1778    CommonGlobalDialogReturnValue_InitializePrototype();
1779    commonModalDialogReturnValue = new CommonGlobalDialogReturnValue();
1780    if (!(window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx")) {
1781        var raiseNav = function() {
1782            if ("unknown" != typeof Sys && "undefined" != typeof Sys && null != Sys && null != Sys.Application) {
1783                Sys.Application.add_load(function() {
1784                    window.setTimeout(function() {
1785                        ajaxNavigate._raiseNavigate(ajaxNavigate);
1786                    }, 0);
1787                });
1788            }
1789        };
1790        var aListener = function() {
1791            document.removeEventListener("DOMContentLoaded", aListener, false);
1792            raiseNav();
1793        };
1794
1795        if (Boolean(document.addEventListener)) {
1796            document.addEventListener("DOMContentLoaded", aListener, false);
1797        }
1798        else {
1799            _spBodyOnLoadFunctions.push(raiseNav);
1800        }
1801    }
1802    SPListView = true;
1803    ;
1804    ;
1805    RenderECBinline = function(renderCtx, listItem, field) {
1806        var ret = [];
1807
1808        ret.push("<span class=\"js-callout-ecbMenu\" CTXName=\"ctx");
1809        ret.push(renderCtx.ctxId);
1810        ret.push("\" id=\"");
1811        ret.push(listItem.ID);
1812        ret.push("\" Field=\"");
1813        ret.push(field.Name);
1814        ret.push("\" Perm=\"");
1815        ret.push(listItem.PermMask);
1816        ret.push("\" EventType=\"");
1817        ret.push(listItem.EventType);
1818        ret.push("\">");
1819        ret.push("<a class=\"js-callout-action ms-calloutLinkEnabled ms-calloutLink js-ellipsis25-a\" onclick=\"calloutCreateAjaxMenu(event); return false;\" href=\"#\" title=\"" + Strings.STS.L_SPCalloutAction_ellipsis + "\">");
1820        ret.push("<img class=\"js-ellipsis25-icon\" src=\"" + GetThemedImageUrl("spcommon.png") + "\" alt=\"" + Encoding.HtmlEncode(Strings.STS.L_SPCalloutAction_ellipsis) + "\" />");
1821        ret.push("</a>");
1822        ret.push("</span>");
1823        return ret.join('');
1824    };
1825    CALLOUT_STR_ELLIPSIS = '...';
1826    CALLOUT_ELLIPSIS_LENGTH = CALLOUT_STR_ELLIPSIS.length;
1827    CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION = 2 + CALLOUT_ELLIPSIS_LENGTH;
1828    MountPointSiteIdFieldName = "_mpSPSiteId";
1829    MountPointWebIdFieldName = "_mpSPWebId";
1830    MountPointItemUniqueIdFieldName = "_mpItemUniqueId";
1831    MountPointInfo = (function() {
1832        function createMountPointInfo(mpProperties) {
1833            var rootFolder = mpProperties.rootFolder;
1834            var siteId = mpProperties.siteId;
1835            var webId = mpProperties.webId;
1836            var folderId = mpProperties.folderId;
1837            var mpPrefix = mpProperties.mpPrefix;
1838            var isInitProperly = Boolean(mpPrefix) && Boolean(siteId) && Boolean(webId) && Boolean(folderId);
1839            var mpLevel = Boolean(mpProperties.mpLevel) ? mpProperties.mpLevel : "1,0";
1840            var majorLevel = -1;
1841            var minorLevel = -1;
1842            var levels = [];
1843
1844            if (Boolean(mpLevel) && isInitProperly) {
1845                levels = mpLevel.split(',');
1846                if (levels.length == 2) {
1847                    majorLevel = tryParseLevel(levels[0], 1);
1848                    minorLevel = tryParseLevel(levels[1], 0);
1849                }
1850            }
1851            function changeMpLevel(majorLevelChange, minorLevelChange) {
1852                majorLevel += majorLevelChange;
1853                if (majorLevelChange == 0)
1854                    minorLevel += minorLevelChange;
1855                else
1856                    minorLevel = 0;
1857                mpLevel = String(majorLevel) + "," + String(minorLevel);
1858            }
1859            function tryParseLevel(level, minLevel) {
1860                var retLevel = minLevel;
1861
1862                if (level != null && level.length > 0 && !isNaN(retLevel)) {
1863                    retLevel = parseInt(level);
1864                    if (retLevel < minLevel)
1865                        return minLevel;
1866                }
1867                return retLevel;
1868            }
1869            function getMountPointProperties(bRemoteIdsOnly) {
1870                if (!isInitProperly)
1871                    return {};
1872                var props = {
1873                    RemoteSiteId: siteId,
1874                    RemoteWebId: webId,
1875                    RemoteFolderId: folderId
1876                };
1877
1878                if (!Boolean(bRemoteIdsOnly)) {
1879                    props.MPLevel = mpLevel;
1880                    props.MPPrefix = mpPrefix;
1881                }
1882                return props;
1883            }
1884            function getMountPointUrl(joinToken, bRemoteIdsOnly) {
1885                var ret = [];
1886
1887                if (isInitProperly) {
1888                    var props = getMountPointProperties(bRemoteIdsOnly);
1889
1890                    for (var propKey in props) {
1891                        ret.push(propKey + "=" + URI_Encoding.encodeURIComponent(props[propKey]));
1892                    }
1893                }
1894                if (!Boolean(joinToken))
1895                    joinToken = '&';
1896                return ret.join(joinToken);
1897            }
1898            return {
1899                "isInitProperly": isInitProperly,
1900                "mpPrefix": isInitProperly ? mpPrefix : "",
1901                "rootFolder": isInitProperly ? rootFolder : "",
1902                "getMajorLevel": function getMajorLevel() {
1903                    return majorLevel;
1904                },
1905                "getMinorLevel": function getMinorLevel() {
1906                    return minorLevel;
1907                },
1908                "incrementMajorLevel": function incrementMajorLevel() {
1909                    changeMpLevel(1, 0);
1910                },
1911                "incrementMinorLevel": function incrementMinorLevel() {
1912                    changeMpLevel(0, 1);
1913                },
1914                "decrementMinorLevel": function decrementMinorLevel() {
1915                    changeMpLevel(0, -1);
1916                },
1917                "getMountPointProperties": getMountPointProperties,
1918                "getMountPointUrl": getMountPointUrl
1919            };
1920        }
1921        ;
1922        function createByListItem(listItem, renderCtx) {
1923            var mpProperties = {};
1924
1925            if (Boolean(IsMountPoint(listItem)) && Boolean(renderCtx)) {
1926                var curUri = null;
1927
1928                if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(168)) {
1929                    curUri = new URI('http://foo?' + getHashAsQueryString(renderCtx));
1930                }
1931                if (!Boolean(curUri)) {
1932                    curUri = new URI(Nav.ajaxNavigate.get_href());
1933                }
1934                if (Boolean(curUri)) {
1935                    mpProperties.mpPrefix = curUri.getQueryParameter("MPPrefix");
1936                    if (!Boolean(mpProperties.mpPrefix))
1937                        mpProperties.mpPrefix = listItem.FileRef.replace(/.url$/, '');
1938                    mpProperties.siteId = listItem[MountPointSiteIdFieldName];
1939                    mpProperties.webId = listItem[MountPointWebIdFieldName];
1940                    mpProperties.folderId = listItem[MountPointItemUniqueIdFieldName];
1941                }
1942            }
1943            return createMountPointInfo(mpProperties);
1944        }
1945        function createByContext(renderCtx) {
1946            return createByQueryString(getHashAsQueryString(renderCtx));
1947        }
1948        function createByQueryString(queryString) {
1949            var mpProperties = {};
1950
1951            if (Boolean(queryString)) {
1952                var uri = new URI("http://foo?" + queryString);
1953
1954                mpProperties.rootFolder = uri.getQueryParameter("RootFolder");
1955                if (!Boolean(mpProperties.rootFolder))
1956                    mpProperties.rootFolder = "";
1957                mpProperties.siteId = uri.getQueryParameter("RemoteSiteId");
1958                mpProperties.webId = uri.getQueryParameter("RemoteWebId");
1959                mpProperties.folderId = uri.getQueryParameter("RemoteFolderId");
1960                mpProperties.mpPrefix = uri.getQueryParameter("MPPrefix");
1961                mpProperties.mpLevel = uri.getQueryParameter("MPLevel");
1962            }
1963            return createMountPointInfo(mpProperties);
1964        }
1965        function getHashAsQueryString(renderCtx) {
1966            var retStr = "";
1967            var hash = "";
1968
1969            if (renderCtx != null && renderCtx.clvp != null && typeof renderCtx.clvp.WebPartId == "function") {
1970                hash = GetInplviewHash(renderCtx.clvp.WebPartId());
1971                if (Boolean(hash))
1972                    retStr = InplViewUtil.DecodeHashAsQueryString(hash);
1973            }
1974            return retStr;
1975        }
1976        return {
1977            "createByListItem": createByListItem,
1978            "createByContext": createByContext,
1979            "createByQueryString": createByQueryString
1980        };
1981    })();
1982    ShortcutLinkTargetUrlFieldName = "_ShortcutUrl";
1983    ShortcutLinkSiteIdFieldName = "_ShortcutSiteId";
1984    ShortcutLinkWebIdFieldName = "_ShortcutWebId";
1985    ShortcutLinkUniqueIdFieldName = "_ShortcutUniqueId";
1986    _EnsureJSNamespace("SP");
1987    if (typeof SP.SOD == "undefined")
1988        SP.SOD = {};
1989    SP.SOD.execute = EnsureScriptParams;
1990    SP.SOD.executeFunc = EnsureScriptFunc;
1991    SP.SOD.registerSod = RegisterSod;
1992    SP.SOD.registerSodDep = RegisterSodDep;
1993    SP.SOD.executeOrDelayUntilScriptLoaded = ExecuteOrDelayUntilScriptLoaded;
1994    SP.SOD.executeOrDelayUntilEventNotified = ExecuteOrDelayUntilEventNotified;
1995    SP.SOD.notifyScriptLoadedAndExecuteWaitingJobs = NotifyScriptLoadedAndExecuteWaitingJobs;
1996    SP.SOD.notifyEventAndExecuteWaitingJobs = NotifyEventAndExecuteWaitingJobs;
1997    SP.SOD.loadMultiple = LoadMultipleSods;
1998    SP.SOD.delayUntilEventNotified = DelayUntilEventNotified;
1999    g_prefetch = 1;
2000    SP.SOD.get_prefetch = function() {
2001        return g_prefetch;
2002    };
2003    SP.SOD.set_prefetch = function(prefetch) {
2004        g_prefetch = prefetch;
2005    };
2006    SP.SOD.prefetch = _spPreFetch;
2007    g_ribbonImagePrefetch = true;
2008    SP.SOD.get_ribbonImagePrefetchEnabled = function() {
2009        return g_ribbonImagePrefetch;
2010    };
2011    SP.SOD.set_ribbonImagePrefetchEnabled = function(ribbonImagePrefetchEnabled) {
2012        g_ribbonImagePrefetch = ribbonImagePrefetchEnabled;
2013    };
2014    _EnsureJSNamespace("SP.UI");
2015    if (typeof SP.UI.Workspace == "undefined")
2016        SP.UI.Workspace = {};
2017    SP.UI.Workspace.add_resized = function(handler) {
2018        g_workspaceResizedHandlers.push(handler);
2019    };
2020    SP.UI.Workspace.remove_resized = function(handler) {
2021        var match = -1;
2022
2023        for (var i = 0, wLen = g_workspaceResizedHandlers.length; i < wLen; i++) {
2024            if (handler == g_workspaceResizedHandlers[i]) {
2025                match = i;
2026                break;
2027            }
2028        }
2029        if (match != -1) {
2030            g_workspaceResizedHandlers.splice(match, 1);
2031        }
2032    };
2033    AriaLogger = {};
2034    (function() {
2035        AriaLogger.TenantToken = {
2036            stsPPE: "9eeb6da3b66f4f20aec8c84bdaccb30d-429a3df1-6962-4e5e-bfc8-31dfd52c4e12-7768",
2037            stsProd: "66034bde775d42a19f1a2d3d2e647e42-82d9432e-bacf-4067-bb5d-fe87f33fa915-7384"
2038        };
2039        var token = null;
2040        var logger = null;
2041
2042        AriaLogger.Logger = function() {
2043            var context = window["_spPageContextInfo"];
2044            var flushed = false;
2045
2046            if (!Boolean(context))
2047                return;
2048            switch (context.env) {
2049            case "edog":
2050            case "prodbubble":
2051                token = AriaLogger.TenantToken.stsPPE;
2052                break;
2053            case "prod":
2054            case "dprod":
2055                token = AriaLogger.TenantToken.stsProd;
2056                break;
2057            default:
2058                token = AriaLogger.TenantToken.stsPPE;
2059                break;
2060            }
2061            if (!Boolean(logger)) {
2062                logger = AWTLogManager.initialize(token);
2063                var semanticContext = logger.getSemanticContext();
2064
2065                semanticContext.setUserId(context.systemUserKey);
2066                var logContext = {
2067                    AccountType: getAccountType(context),
2068                    Environment: context.env,
2069                    IsAuthenticated: isUserAuthenticated(context),
2070                    BrowserUserAgent: navigator.userAgent,
2071                    BrowserIsMobile: isMobile(),
2072                    SiteSubscriptionId: context.siteSubscriptionId
2073                };
2074
2075                if (Boolean(context.farmLabel)) {
2076                    logContext.FarmLabel = context.farmLabel;
2077                }
2078                for (var key4 in logContext) {
2079                    logger.setContext(key4, logContext[key4]);
2080                }
2081            }
2082            var OnBeforeUnload = function(e) {
2083                if (Boolean(logger) && !Boolean(logger.flushed)) {
2084                    AWTLogManager.flush(function() {
2085                    });
2086                    logger.flushed = true;
2087                }
2088            };
2089
2090            if (typeof window.addEventListener != "undefined") {
2091                window.addEventListener("beforeunload", OnBeforeUnload, true);
2092            }
2093            this.safeLogEvent = function(ev) {
2094                try {
2095                    this.logEvent(ev);
2096                }
2097                catch (exception) {
2098                    if (Boolean(exception)) {
2099                        ;
2100                    }
2101                }
2102            };
2103            this.logEvent = function(ev) {
2104                if (!Boolean(logger) || !ariaEnabledEvent(ev))
2105                    return;
2106                var eName = ev.eventName.toString();
2107                var eType = "Start";
2108                var eResultType;
2109                var eResultCode;
2110                var eComponent;
2111                var nName;
2112
2113                if (ev.eventName == "RUMOne") {
2114                    eName = "RUMOneDataUpload";
2115                    eType = "single";
2116                    nName = ev.data.ScenarioId.toString();
2117                }
2118                else if (ev.eventName == "UserEngagement") {
2119                    eName = "qos";
2120                    if (Boolean(ev.data) && Boolean(ev.data.EngagementName)) {
2121                        eType = ev.data.EngagementName.endsWith(".Start") ? "Start" : ev.data.EngagementName.endsWith(".Success") ? "End" : ev.data.EngagementName.endsWith(".Failure") ? "Failure" : "NA";
2122                        eResultType = eType == "End" ? "Success" : eType == "Failure" ? "Failure" : "NA";
2123                        eComponent = ev.data.EngagementName.substring(0, ev.data.EngagementName.indexOf('.'));
2124                        nName = ev.data.EngagementName.substring(0, ev.data.EngagementName.lastIndexOf('.'));
2125                        eResultCode = Boolean(ev.data.Properties) && Boolean(ev.data.Properties.ErrorCode) ? ev.data.Properties.ErrorCode.toString() : "NA";
2126                    }
2127                }
2128                var eventProperties = new AWTEventProperties();
2129                var values = {
2130                    "CorrelationVector": ev.correlationVector,
2131                    "Component": eComponent,
2132                    "Name": nName,
2133                    "WebLog_FullName": eName,
2134                    "WebLog_EventType": eType
2135                };
2136
2137                values["WebLog_Type_" + eName.toString()] = 1;
2138                values["Workload"] = getWorkLoad(ev);
2139                if (eType == "End") {
2140                    values["ResultType"] = eResultType;
2141                    values["ResultCode"] = eResultCode;
2142                }
2143                var prefixName;
2144
2145                if (ev.eventName == "RUMOne") {
2146                    prefixName = eName + "_dictionary_";
2147                }
2148                else if (eName == "qos") {
2149                    prefixName = "Qos_extraData_";
2150                }
2151                var dictProperties = ev.data;
2152
2153                for (var key2 in dictProperties) {
2154                    var v = dictProperties[key2];
2155
2156                    if (!Boolean(v))
2157                        continue;
2158                    values[prefixName + key2] = dictProperties[key2];
2159                }
2160                eventProperties.setName("ev_" + eName.toString());
2161                this.setProperties(eventProperties, values);
2162                logger.logEvent(eventProperties);
2163            };
2164            this.setProperties = function(properties, values) {
2165                try {
2166                    for (var key3 in values) {
2167                        properties.setProperty(key3, values[key3]);
2168                    }
2169                }
2170                catch (exception) {
2171                    var errorCode = void 0;
2172
2173                    if (exception != null) {
2174                        errorCode = exception.ErrorCode();
2175                        if (typeof console != "undefined" && Boolean(console) && typeof console.log == "function") {
2176                            console.log("Aria error: " + exception.toString() + errorCode.toString());
2177                        }
2178                    }
2179                    throw exception;
2180                }
2181            };
2182            this.isInitialized = function() {
2183                return Boolean(logger);
2184            };
2185            function ariaEnabledEvent(ev) {
2186                if (ev.eventName == "RUMOne" || ev.eventName == "UserEngagement") {
2187                    return true;
2188                }
2189                return false;
2190            }
2191            function Capitalize(str) {
2192                if (Boolean(str)) {
2193                    return str[0].toUpperCase() + str.substr(1);
2194                }
2195                return str;
2196            }
2197            function getWorkLoad(ev) {
2198                if (ev.eventName == "RUMOne" && Boolean(ev.data) && Boolean(ev.data.ScenarioId)) {
2199                    return ev.data.ScenarioId.substring(0, ev.data.ScenarioId.indexOf('-'));
2200                }
2201                if (ev.EventName == "UserEngagement" && Boolean(ev.data) && Boolean(ev.data.name)) {
2202                    return ev.data.EngagementName.substring(0, ev.data.EngagementName.indexOf('.'));
2203                }
2204                return "STS";
2205            }
2206            function isMobile() {
2207                var isIOS = BrowserDetection.userAgent.ipad || (navigator.userAgent.toLowerCase()).indexOf("iphone") > -1;
2208                var isAndroid = (navigator.userAgent.toLowerCase()).indexOf("android") > -1 && !isIOS;
2209
2210                return !!(BrowserDetection.userAgent.windowsphone || isIOS || isA
2210ndroid);
2211            }
2212            function isUserAuthenticated(ctx1) {
2213                return Boolean(ctx1.userLoginName);
2214            }
2215            function getAccountType(ctx2) {
2216                return isUserAuthenticated(ctx2) ? "Business" : "BusinessAnonymouse";
2217            }
2218        };
2219        var ariaLogger = null;
2220
2221        AriaLogger.GetLogger = function() {
2222            if (!Boolean(ariaLogger)) {
2223                ariaLogger = new AriaLogger.Logger();
2224            }
2225            return ariaLogger;
2226        };
2227    })();
2228    BaseLogger = {};
2229    (function() {
2230        BaseLogger.Constants = {
2231            STREAM_ID: 1234,
2232            JSON_VERSION: "V1",
2233            IDX_VERSION: 0,
2234            IDX_EVENTNAME: 1,
2235            IDX_PROPERTY_START: 2,
2236            MAX_DATA_SIZE: 64 * 1024,
2237            MAX_ROWS_IN_STREAM: 1000,
2238            SIZE_DWORD: 4,
2239            SIZE_DATAPOINT_ENTRY: 3 * 4,
2240            SIZE_STREAM_ENTRY: 3 * 4,
2241            MS_BTN_EPOCHS: 11644473600000,
2242            MAX_INT32: 0xFFFFFFFF,
2243            MAX_SQM_DATAID: 0x7FFFFFFF,
2244            DATAKEY_SESSION_NORMAL: 0,
2245            DATAKEY_SESSION_CONTINUATION: 1
2246        };
2247        BaseLogger.BSQMFlags = {
2248            FLAG_BSQM_ENABLED: 0x00000010,
2249            FLAG_QOS_ENABLED: 0x00000020
2250        };
2251        BaseLogger.DATAID = {
2252            DATAID_BSQM_MAXSTREAMROWSSTREAMID: 8048,
2253            DATAID_BSQM_MAXSTREAMROWS: 7993,
2254            DATAID_SESSION_TYPE: 60
2255        };
2256        BaseLogger.UploadCallBack = function(request) {
2257            if (Boolean(request)) {
2258                if (request.readyState === 4 && request.status !== 200 && Boolean(request.status)) { }
2259            }
2260        };
2261        BaseLogger.Logger = function(customUploadFunc) {
2262            var WSAStreamRow = function(values) {
2263                this.Tic = GetTicks32();
2264                var numValues = values.length;
2265
2266                this.Vals = new Array(numValues);
2267                for (var i = 0; i < numValues; i++) {
2268                    this.Vals[i] = values[i];
2269                }
2270            };
2271            var WSADatapoint = function(id, value) {
2272                this.Id = id;
2273                this.Val = value;
2274                this.Tic = GetTicks32();
2275            };
2276            var WSAStream = function(id, width) {
2277                this.Id = id;
2278                this.Width = width;
2279                this.Rows = new Array(0);
2280            };
2281            var WSAData = function(fIsOptedIn, fIsQoSEnabled) {
2282                this.StartTime = GetTicks64();
2283                this.EndTime = null;
2284                this.CorrelationId = null;
2285                var flags = 0;
2286
2287                if (fIsOptedIn)
2288                    flags = BaseLogger.BSQMFlags.FLAG_BSQM_ENABLED;
2289                if (fIsQoSEnabled)
2290                    flags |= BaseLogger.BSQMFlags.FLAG_QOS_ENABLED;
2291                this.Flags = flags;
2292                this.wsaDatapoints = new Array(0);
2293                this.wsaStreams = new Array(0);
2294            };
2295            var _uploadUrl = null;
2296            var _wsaData = null;
2297            var _numDatapoints = 0;
2298            var _numStreams = 0;
2299            var _numStreamBytes = 0;
2300            var _dictStreams = null;
2301            var _dictDatapoints = null;
2302            var _streamRowCount = 0;
2303            var _bDataAvailableForUpload = false;
2304            var _bContinuation = false;
2305            var _initialized = false;
2306            var _fEnabled = false;
2307            var _uploadFunc = null;
2308
2309            this.SetCorrelationId = function(correlationId) {
2310                _initialize();
2311                if (Boolean(_wsaData)) {
2312                    _wsaData.CorrelationId = correlationId;
2313                }
2314            };
2315            this.WriteLog = function(eventName, dictProperties) {
2316                _initialize();
2317                if (!_fEnabled || !Boolean(eventName) || !Boolean(dictProperties)) {
2318                    return;
2319                }
2320                var values = new Array(BaseLogger.Constants.IDX_PROPERTY_START + 1);
2321
2322                values[BaseLogger.Constants.IDX_VERSION] = BaseLogger.Constants.JSON_VERSION;
2323                values[BaseLogger.Constants.IDX_EVENTNAME] = eventName;
2324                var index = BaseLogger.Constants.IDX_PROPERTY_START;
2325
2326                for (var key in dictProperties) {
2327                    values[index++] = key;
2328                    var propVal = dictProperties[key];
2329
2330                    if (propVal != null && propVal instanceof Date) {
2331                        propVal = propVal.getTime();
2332                    }
2333                    values[index++] = propVal;
2334                }
2335                _addToStream(BaseLogger.Constants.STREAM_ID, values);
2336            };
2337            this.UploadData = function() {
2338                _initialize();
2339                _uploadData();
2340            };
2341            var _initialize = function() {
2342                if (_initialized) {
2343                    return;
2344                }
2345                _fEnabled = _wsaCEIPEnabled();
2346                if (!_fEnabled) {
2347                    return;
2348                }
2349                _wsaData = new WSAData(_fEnabled, false);
2350                _uploadUrl = "/_layouts/15/WsaUpload.ashx";
2351                _dictStreams = new Array(0);
2352                _dictDatapoints = new Array(0);
2353                _createStream(BaseLogger.Constants.STREAM_ID, 1);
2354                _uploadFunc = Boolean(customUploadFunc) ? customUploadFunc : _uploadWsaDataRequest;
2355                _initialized = true;
2356            };
2357            var _createStream = function(streamId, width) {
2358                if (!Boolean(_dictStreams[streamId])) {
2359                    var wsaStream = new WSAStream(streamId, width);
2360                    var idxStream = _numStreams;
2361
2362                    _wsaData.wsaStreams[idxStream] = wsaStream;
2363                    _numStreams++;
2364                    _numStreamBytes += BaseLogger.Constants.SIZE_STREAM_ENTRY;
2365                    _dictStreams[streamId] = idxStream;
2366                }
2367            };
2368            var _addToStream = function(streamId, dictValues) {
2369                try {
2370                    var wsaStreamRow = new WSAStreamRow(dictValues);
2371
2372                    if (_isMaxSizeReachedCheck()) {
2373                        return;
2374                    }
2375                    _bDataAvailableForUpload = true;
2376                    _setDatapoint(BaseLogger.DATAID.DATAID_BSQM_MAXSTREAMROWSSTREAMID, streamId);
2377                    var wsaStream = _wsaData.wsaStreams[_dictStreams[streamId]];
2378
2379                    if (Boolean(wsaStream)) {
2380                        if (_streamRowCount < BaseLogger.Constants.MAX_ROWS_IN_STREAM) {
2381                            wsaStream.Rows[_streamRowCount++] = wsaStreamRow;
2382                            _numStreamBytes += _getTotalBytesForRow(wsaStreamRow);
2383                            _setDatapoint(BaseLogger.DATAID.DATAID_BSQM_MAXSTREAMROWS, _streamRowCount);
2384                        }
2385                        else {
2386                            throw "BaseLogger: MAX_ROWS_IN_STREAM exceeded for stream ID " + String(streamId);
2387                        }
2388                    }
2389                }
2390                catch (e) { }
2391            };
2392            var _getTotalBytesForRow = function(row) {
2393                var numTotalBytes = BaseLogger.Constants.SIZE_DWORD;
2394
2395                for (var i = 0; i < row.Vals.length; i++) {
2396                    var value = String(row.Vals[i]);
2397
2398                    numTotalBytes += value.length * 2;
2399                }
2400                numTotalBytes += (row.Vals.length - 1) * 6;
2401                return numTotalBytes;
2402            };
2403            var _setDatapoint = function(datapointId, datapointValue) {
2404                if (datapointId < 1 || datapointId > BaseLogger.Constants.MAX_SQM_DATAID) {
2405                    return;
2406                }
2407                if (datapointValue < 0 || datapointValue > BaseLogger.Constants.MAX_INT32) {
2408                    return;
2409                }
2410                var savedDatapoint = null;
2411                var idxDP = _dictDatapoints[datapointId];
2412
2413                if (Boolean(idxDP)) {
2414                    savedDatapoint = _wsaData.wsaDatapoints[idxDP];
2415                }
2416                if (savedDatapoint == null) {
2417                    var datapoint = new WSADatapoint(datapointId, datapointValue);
2418                    var idxDatapoint = _numDatapoints;
2419
2420                    _wsaData.wsaDatapoints[idxDatapoint] = datapoint;
2421                    _dictDatapoints[datapointId] = idxDatapoint;
2422                    _numDatapoints++;
2423                }
2424                else {
2425                    savedDatapoint.Val = datapointValue;
2426                }
2427            };
2428            var _uploadData = function() {
2429                if (!_fEnabled || _wsaData == null || !Boolean(_uploadUrl)) {
2430                    return;
2431                }
2432                try {
2433                    if (_bDataAvailableForUpload) {
2434                        if (Boolean(_bContinuation)) {
2435                            _setDatapoint(BaseLogger.DATAID.DATAID_SESSION_TYPE, BaseLogger.Constants.DATAKEY_SESSION_CONTINUATION);
2436                        }
2437                        else {
2438                            _setDatapoint(BaseLogger.DATAID.DATAID_SESSION_TYPE, BaseLogger.Constants.DATAKEY_SESSION_NORMAL);
2439                            _bContinuation = true;
2440                        }
2441                        _wsaData.EndTime = GetTicks64();
2442                        var jsonString = null;
2443
2444                        try {
2445                            jsonString = JSON.stringify(_wsaData);
2446                        }
2447                        catch (e) { }
2448                        _initContinuationSession();
2449                        if (jsonString != null && jsonString.length > 0) {
2450                            _uploadFunc(jsonString);
2451                        }
2452                    }
2453                }
2454                catch (e1) { }
2455            };
2456            var _initContinuationSession = function() {
2457                _dictStreams = new Array(0);
2458                _dictDatapoints = new Array(0);
2459                _numDatapoints = 0;
2460                _numStreams = 0;
2461                _streamRowCount = 0;
2462                _numStreamBytes = 0;
2463                _numDatapoints = 0;
2464                var corrId = _wsaData.CorrelationId;
2465
2466                _wsaData = new WSAData(_fEnabled, false);
2467                _wsaData.CorrelationId = corrId;
2468                _createStream(BaseLogger.Constants.STREAM_ID, 1);
2469                _bDataAvailableForUpload = false;
2470            };
2471            var _uploadWsaDataRequest = function(json) {
2472                var request = new XMLHttpRequest();
2473
2474                request.onreadystatechange = function() {
2475                    BaseLogger.UploadCallBack(request);
2476                };
2477                request.open('POST', _uploadUrl, true);
2478                request.setRequestHeader('Content-Type', 'application/json');
2479                request.send(json);
2480            };
2481            var _isMaxSizeReachedCheck = function() {
2482                var size = _numDatapoints * BaseLogger.Constants.SIZE_DATAPOINT_ENTRY + _numStreamBytes;
2483
2484                if (size >= BaseLogger.Constants.MAX_DATA_SIZE) {
2485                    _uploadData();
2486                    size = _numDatapoints * BaseLogger.Constants.SIZE_DATAPOINT_ENTRY + _numStreamBytes;
2487                    return size >= BaseLogger.Constants.MAX_DATA_SIZE;
2488                }
2489                return false;
2490            };
2491            var _wsaCEIPEnabled = function() {
2492                return typeof g_wsaEnabled != "undefined" && g_wsaEnabled;
2493            };
2494            var startTicks = 0;
2495            var GetTicks32 = function() {
2496                var timeNow = new Date();
2497                var ticks64 = timeNow.getTime();
2498
2499                if (startTicks == 0) {
2500                    startTicks = ticks64;
2501                }
2502                return 1 + ticks64 - startTicks & 0x7FFFFFFF;
2503            };
2504            var GetTicks64 = function() {
2505                var timeNow = new Date();
2506                var ticks64 = timeNow.getTime();
2507
2508                ticks64 = ticks64 + BaseLogger.Constants.MS_BTN_EPOCHS;
2509                ticks64 = ticks64 * 10000;
2510                return ticks64;
2511            };
2512        };
2513        var _baseLoggerInstance = null;
2514
2515        BaseLogger.GetLogger = function() {
2516            if (_baseLoggerInstance == null) {
2517                _baseLoggerInstance = new BaseLogger.Logger();
2518            }
2519            return _baseLoggerInstance;
2520        };
2521    })();
2522    CacheLogger = {
2523        "__namespace": true
2524    };
2525    CacheLogger_module_def();
2526    DebugLogger = {
2527        "__namespace": true
2528    };
2529    DebugLogger_module_def();
2530    QoSLogger = {
2531        "__namespace": true
2532    };
2533    QoSLogger_module_def();
2534    RUMDelta = {};
2535    (function() {
2536        var LOG_ID = "RUMActionDelta";
2537
2538        RUMDelta.Logger = function(logger) {
2539            RUMDelta.Application = {
2540                SharePointTouchAppHost: 0x0001,
2541                SharePoint: 0x0002,
2542                SharePointFileXfer: 0x0003
2543            };
2544            var RUMDeltaDataItem = function(action, correlationId, lastSeenCorrelationId, beginTime, firstChance, networkDone, serverTime, eupl) {
2545                this.Version = 1;
2546                this.Action = action;
2547                this.CorrelationId = correlationId;
2548                this.LastSeenCorrelationId = lastSeenCorrelationId;
2549                this.UserAgent = navigator.userAgent;
2550                this.BeginTime = beginTime;
2551                this.FirstChance = firstChance;
2552                this.NetworkDone = networkDone;
2553                this.ServerTime = serverTime;
2554                this.EUPL = eupl;
2555            };
2556            var _correlationId = "";
2557            var _lastSeenServerCorrelationId = "";
2558            var _logId = LOG_ID;
2559            var _basicLogger = Boolean(logger) ? logger : BaseLogger.GetLogger();
2560
2561            this.SetCorrelationId = function(correlationId) {
2562                _basicLogger.SetCorrelationId(correlationId);
2563                _correlationId = correlationId;
2564            };
2565            this.SetLastSeenCorrelationId = function(correlationId) {
2566                _lastSeenServerCorrelationId = correlationId;
2567            };
2568            this.UploadRUMData = function(action, beginTime, firstChance, networkDone, serverTime, eupl) {
2569                try {
2570                    var logItem = new RUMDeltaDataItem(action, _correlationId, _lastSeenServerCorrelationId, beginTime, firstChance, networkDone, serverTime, eupl);
2571
2572                    _basicLogger.WriteLog(_logId, logItem);
2573                    _basicLogger.UploadData();
2574                }
2575                catch (e) { }
2576            };
2577        };
2578    })();
2579    PerformanceLogger = {
2580        "__namespace": true
2581    };
2582    PerformanceLogger_module_def();
2583    SPRUMLogger = {
2584        "__namespace": true
2585    };
2586    SPRUMLogger_module_def();
2587    SPLoggers = {
2588        "__namespace": true
2589    };
2590    SPLoggers_module_def();
2591    getLoggingInfo = function(args) {
2592        var info = [];
2593
2594        if (Boolean(args)) {
2595            addToInfoIfExists("ErrorCode", info, args, args.get_errorCode);
2596            addToInfoIfExists("CorrelationID", info, args, args.get_errorTraceCorrelationId);
2597            addToInfoIfExists("ErrorType", info, args, args.get_errorTypeName);
2598            addToInfoIfExists("Message", info, args, args.get_message);
2599            addToInfoIfExists("StackTrace", info, args, args.get_stackTrace);
2600        }
2601        return info.join("\n");
2602    };
2603    addToInfoIfExists = function(header, info, args, fn) {
2604        if (args != null && typeof fn != 'undefined' && fn != null) {
2605            var result = fn.call(args);
2606
2607            if (result != null || result != "")
2608                info.push(header + ": " + result);
2609        }
2610    };
2611    SP.Performance.UploadNonMDSPageLoadTime = function(pageContext, endTime) {
2612        (SP.Performance.Log.GetLogger()).UploadNonMDSPageLoadTelemetry(pageContext, endTime);
2613    };
2614    _WOPIDocLoaded = false;
2615    SetWOPIDocLoaded = function() {
2616        _WOPIDocLoaded = true;
2617    };
2618    _TelemetryEndTime = -1;
2619    UploadFileXferTelemetry = function(source, startTime, endTime, byteCount) {
2620        (SP.Performance.Log.GetLogger()).UploadFileXferTelemetry(source, startTime, endTime, byteCount);
2621        _TelemetryEndTime = endTime;
2622    };
2623    ReadyToUploadLogs = function() {
2624        if (typeof SP.ReadyToUploadLogs != "undefined")
2625            SP.ReadyToUploadLogs();
2626    };
2627    if (typeof g_mdsReady == "undefined") {
2628        if (typeof window.addEventListener != 'undefined') {
2629            window.addEventListener('load', RumNonMDSHandler, false);
2630        }
2631        else {
2632            window.attachEvent('onload', RumNonMDSHandler);
2633        }
2634    }
2635    ;
2636    if (typeof SPThemeUtils == 'undefined') {
2637        SPThemeUtils = {
2638            "__namespace": true
2639        };
2640        SPThemeUtils_module_def();
2641    }
2642    if (typeof SuiteNavRendering == 'undefined') {
2643        SuiteNavRendering = {
2644            "__namespace": true
2645        };
2646        SuiteNavRendering_module_def();
2647    }
2648    if (typeof ModuleLink == 'undefined') {
2649        ModuleLink = {
2650            "__namespace": true
2651        };
2652        ModuleLink_module_def();
2653    }
2654    _spBodyOnLoadFunctionNames.push("AllowCSSFiltersOnIE8");
2655    initJsLoaded = true;
2656    notifyScriptsLoadedAndExecuteWaitingJobs("init.js");
2657    if (typeof spWriteProfilerMark == 'function')
2658        spWriteProfilerMark("perfMarkEnd_" + "init.js");
2659}
2660var spWriteProfilerMark;
2661var OffSwitch;
2662
2663function OffSwitch_module_def() {
2664    OffSwitch.IsActive = OffSwitch_IsActive;
2665    function OffSwitch_IsActive(guidOffSwitchKey) {
2666        var offSwitches = window["g_SPOffSwitches"];
2667        var contextOffSwitches = null;
2668        var defaultResultWhenDataMissing = true;
2669
2670        if (offSwitches == null) {
2671            var pageContextInfo = window["_spPageContextInfo"];
2672
2673            contextOffSwitches = pageContextInfo == null ? null : pageContextInfo["killSwitches"];
2674            if (contextOffSwitches != null && !contextOffSwitches.hasOwnProperty("2625010B-67AA-49D2-B302-A12D0281E865")) {
2675                offSwitches = contextOffSwitches;
2676            }
2677        }
2678        if (offSwitches != null && !offSwitches.hasOwnProperty("DA1F7C1B-A819-4265-BD85-6D15C304CFDC")) {
2679            defaultResultWhenDataMissing = false;
2680        }
2681        var offSwitchActivated;
2682
2683        offSwitchActivated = offSwitches == null ? defaultResultWhenDataMissing : offSwitches.hasOwnProperty(guidOffSwitchKey);
2684        return offSwitchActivated;
2685    }
2686}
2687var RuntimeErrors;
2688
2689function RuntimeErrors_module_def() {
2690    RuntimeErrors.MismatchError = function(expected, actual, msg) {
2691        Error.call(this, msg);
2692        this.expected = expected;
2693        this.actual = actual;
2694    };
2695    RuntimeErrors.MismatchError.prototype = new Error;
2696    RuntimeErrors.ArgumentTypeError = function(expected, actual) {
2697        RuntimeErrors.MismatchError.call(this, expected, actual, "runtime type mismatch");
2698    };
2699    RuntimeErrors.ArgumentTypeError.prototype = new RuntimeErrors.MismatchError;
2700}
2701var Verify;
2702
2703function Verify_module_def() {
2704    function _Verify(errorCtr, expected, actual) {
2705        if (actual != expected) {
2706            throw new errorCtr(expected, actual);
2707        }
2708    }
2709    Verify.ArgumentType = function _VerifyArgumentType(arg, expected) {
2710        var primitiveType = typeof arg;
2711
2712        if (typeof expected == 'function') {
2713            _Verify(RuntimeErrors.ArgumentTypeError, 'object', primitiveType);
2714            if (!(arg instanceof expected)) {
2715                throw new RuntimeErrors.ArgumentTypeError(expected, arg.constructor);
2716            }
2717        }
2718        else if (typeof expected == 'string') {
2719            _Verify(RuntimeErrors.ArgumentTypeError, expected, primitiveType);
2720        }
2721        else {
2722            throw new RuntimeErrors.ArgumentTypeError('function or string', typeof expected);
2723        }
2724    };
2725}
2726var Define;
2727
2728function Define_module_def() {
2729    var modules = {};
2730
2731    Define.loadScript = function(url, successCallback, errCallback) {
2732        Verify.ArgumentType(url, 'string');
2733        Verify.ArgumentType(successCallback, 'function');
2734        Verify.ArgumentType(errCallback, 'function');
2735        var agt = navigator.userAgent.toLowerCase();
2736        var ie8down = agt.indexOf("msie") != -1 && parseInt(agt.substring(agt.indexOf("msie ") + 5)) <= 8;
2737        var s = document.createElement("SCRIPT");
2738
2739        s.type = "text/javascript";
2740        s.src = url;
2741        if (ie8down) {
2742            s.onreadystatechange = getCallback(successCallback);
2743        }
2744        else {
2745            s.onload = getCallback(successCallback);
2746            s.onerror = getCallback(errCallback);
2747        }
2748        (document.getElementsByTagName("HEAD"))[0].appendChild(s);
2749        return s;
2750        function getCallback(cb) {
2751            return function() {
2752                var loaded = false;
2753
2754                if (ie8down && typeof s.readyState != 'undefined')
2755                    loaded = s.readyState == "complete" || s.readyState == "loaded";
2756                else
2757                    loaded = true;
2758                if (loaded) {
2759                    s.onreadystatechange = null;
2760                    s.onload = null;
2761                    s.onerror = null;
2762                    cb();
2763                }
2764            };
2765        }
2766    };
2767    Define.require = function(req, callback) {
2768        if (typeof req == 'object' && req instanceof Array) {
2769            return requireMultiple(callback);
2770        }
2771        else {
2772            Verify.ArgumentType(req, 'string');
2773            return requireSingle(req, callback);
2774        }
2775        function requireSingle(n, cb) {
2776            if (modules[n] != null) {
2777                if (typeof cb == 'function') {
2778                    cb(modules[n]);
2779                }
2780                return modules[n];
2781            }
2782            Verify.ArgumentType(cb, 'function');
2783            Define.loadScript("/_layouts/15/" + n + ".js", function() {
2784                cb(modules[n]);
2785            }, function() {
2786                throw "Failed to load module: " + n;
2787            });
2788            return undefined;
2789        }
2790        function requireMultiple(cb) {
2791            Verify.ArgumentType(cb, 'function');
2792            var names = req;
2793
2794            if (names.length == 0) {
2795                cb();
2796                return;
2797            }
2798            var allNames = names.slice(0, names.length);
2799            var n = names.shift();
2800            var callbackWithDeps = function() {
2801                var deps = [];
2802
2803                for (var i = 0; i < allNames.length; i++) {
2804                    deps.push(Define.require(allNames[i]));
2805                }
2806                cb.apply(null, deps);
2807            };
2808
2809            Define.require(n, function() {
2810                Define.require(names, callbackWithDeps);
2811            });
2812        }
2813    };
2814    Define.define = function(n, deps, def) {
2815        Verify.ArgumentType(n, 'string');
2816        Verify.ArgumentType(deps, Array);
2817        Verify.ArgumentType(def, 'function');
2818        if (modules[n] != null) {
2819            return;
2820        }
2821        Define.require(deps, function() {
2822            modules[n] = def.apply(null, Array.prototype.slice.call(arguments));
2823        });
2824    };
2825}
2826var BrowserDetection;
2827
2828function BrowserDetection_module_def() {
2829}
2830var browseris;
2831var bis;
2832var BrowserStorage;
2833
2834function BrowserStorage_module_def() {
2835    StorageObject.prototype = {
2836        getItem: function(key) {
2837            return "";
2838        },
2839        setItem: function(key, value) {
2840        },
2841        removeItem: function(key) {
2842        },
2843        clear: function() {
2844        },
2845        length: 0
2846    };
2847    function StorageObject() {
2848        var _this = this;
2849        var _data = {};
2850
2851        function StorageObject_ContainsKey(key) {
2852            return _data.hasOwnProperty(key);
2853        }
2854        function StorageObject_GetItem(key) {
2855            var v = _data[key];
2856
2857            if (typeof v == "undefined")
2858                v = null;
2859            return v;
2860        }
2861        ;
2862        function StorageObject_SetItem(key, value) {
2863            if (!StorageObject_ContainsKey(key)) {
2864                _this.length++;
2865            }
2866            _data[key] = String(value);
2867        }
2868        ;
2869        function StorageObject_RemoveItem(key) {
2870            var hasProp = StorageObject_ContainsKey(key);
2871
2872            if (hasProp) {
2873                delete _data[key];
2874                _this.length--;
2875            }
2876        }
2877        ;
2878        function StorageObject_Clear() {
2879            _data = {};
2880            _this.length = 0;
2881        }
2882        ;
2883        this.length = 0;
2884        this.getItem = StorageObject_GetItem;
2885        this.setItem = StorageObject_SetItem;
2886        this.removeItem = StorageObject_RemoveItem;
2887        this.clear = StorageObject_Clear;
2888    }
2889    ;
2890    CachedStorage.prototype = StorageObject.prototype;
2891    function CachedStorage(storage) {
2892        var _this = this;
2893
2894        function UpdateLength() {
2895            _this.length = storage.length;
2896        }
2897        UpdateLength();
2898        this.getItem = function(key) {
2899            return storage.getItem(key);
2900        };
2901        this.setItem = function(key, value) {
2902            try {
2903                storage.setItem(key, value);
2904            }
2905            catch (exStorage) { }
2906            UpdateLength();
2907        };
2908        this.removeItem = function(key) {
2909            try {
2910                storage.removeItem(key);
2911            }
2912            catch (exRemoveItemFromStorage) { }
2913            UpdateLength();
2914        };
2915        this.clear = function() {
2916            storage.clear();
2917            UpdateLength();
2918        };
2919    }
2920    var _testKey = "BrowserStorageTest";
2921    var _testValue = "1";
2922
2923    function TestStorage(storage) {
2924        var result = false;
2925
2926        storage.setItem(_testKey, _testValue);
2927        if (storage.getItem(_testKey) === _testValue) {
2928            result = true;
2929        }
2930        storage.removeItem(_testKey);
2931        return result;
2932    }
2933    var _local = null;
2934    var _session = null;
2935
2936    try {
2937        if (typeof window.localStorage != 'undefined') {
2938            var localStorageObject = window.localStorage;
2939
2940            if (TestStorage(localStorageObject))
2941                _local = localStorageObject;
2942        }
2943    }
2944    catch (exUsingLocalStorage) { }
2945    try {
2946        if (typeof window.sessionStorage != 'undefined') {
2947            var sessionStorageObject = window.sessionStorage;
2948
2949            if (TestStorage(sessionStorageObject))
2950                _session = sessionStorageObject;
2951        }
2952    }
2953    catch (exUsingSessionStorage) { }
2954    if (_session == null)
2955        _session = new StorageObject();
2956    if (_local == null)
2957        _local = _session;
2958    BrowserStorage.local = new CachedStorage(_local);
2959    BrowserStorage.session = new CachedStorage(_session);
2960}
2961var CSSUtil;
2962
2963function CSSUtil_module_def() {
2964    function BuildRegex(className) {
2965        return new RegExp('(\\s|^)' + className + '(\\s|$)');
2966    }
2967    CSSUtil.HasClass = function(elem, className) {
2968        if (elem == null || className == null) {
2969            return false;
2970        }
2971        return elem.className.match(BuildRegex(className)) != null;
2972    };
2973    CSSUtil.AddClass = function(elem, className) {
2974        if (elem != null && !CSSUtil.HasClass(elem, className)) {
2975            elem.className += " " + className;
2976            return true;
2977        }
2978        return false;
2979    };
2980    CSSUtil.RemoveClass = function(elem, className) {
2981        if (CSSUtil.HasClass(elem, className)) {
2982            elem.className = elem.className.replace(BuildRegex(className), ' ');
2983            return true;
2984        }
2985        return false;
2986    };
2987    CSSUtil.pxToFloat = function(pxString) {
2988        if (typeof pxString != "string")
2989            return 0;
2990        var trimmedPxString = pxString.trim();
2991        var pxWidth = Number((trimmedPxString.substring(0, trimmedPxString.length - 2)).trim());
2992
2993        return isNaN(pxWidth) ? 0 : pxWidth;
2994    };
2995    CSSUtil.pxToNum = function(px) {
2996        var ret;
2997
2998        if (px === "" || px === "none") {
2999            ret = 0;
3000        }
3001        else {
3002            ret = parseInt(px);
3003        }
3004        return ret;
3005    };
3006    CSSUtil.numToPx = function(n) {
3007        if (typeof n != "number") {
3008            throw new Error("n must be a number.");
3009        }
3010        return String(Math.round(n)) + "px";
3011    };
3012    CSSUtil.getCurrentEltStyleByNames = function(elem, styleNames) {
3013        var style = null;
3014        var i = 0;
3015
3016        while (i < styleNames.length) {
3017            style = CSSUtil.getCurrentStyle(elem, styleNames[i]);
3018            if (style != null) {
3019                break;
3020            }
3021            i++;
3022        }
3023        return style;
3024    };
3025    CSSUtil.getCurrentStyle = function(element, cssStyle) {
3026        if (Boolean(element.currentStyle))
3027            return element.currentStyle[cssStyle];
3028        else {
3029            if (Boolean(window) && Boolean(window.getComputedStyle)) {
3030                var compStyle = window.getComputedStyle(element, null);
3031
3032                if (Boolean(compStyle) && Boolean(compStyle.getPropertyValue)) {
3033                    return compStyle.getPropertyValue(cssStyle);
3034                }
3035            }
3036        }
3037        return null;
3038    };
3039    CSSUtil.getCurrentStyleCorrect = function(element, camelStyleName, dashStyleName) {
3040        if (typeof document.defaultView != 'undefined' && typeof document.defaultView.getComputedStyle != 'undefined') {
3041            return (document.defaultView.getComputedStyle(element, null)).getPropertyValue(dashStyleName);
3042        }
3043        else {
3044            if (camelStyleName == 'width') {
3045                return String(element.offsetWidth) + "px";
3046            }
3047            return element.currentStyle[camelStyleName];
3048        }
3049    };
3050    CSSUtil.getOpacity = function(element) {
3051        return XUIHtml.GetOpacity(element);
3052    };
3053    CSSUtil.setOpacity = function(element, value) {
3054        XUIHtml.SetOpacity(element, value);
3055    };
3056    var XUIHtml = {};
3057
3058    XUIHtml.SetOpacity = function(domNode, newVal) {
3059        if (typeof domNode.style == "undefined")
3060            return;
3061        if (document.body.style.opacity != null) {
3062            if (newVal == 1)
3063                XUIHtml.RemoveCSSProperty(domNode, "opacity");
3064            else {
3065                domNode.style.opacity = String(newVal);
3066            }
3067        }
3068        else {
3069            if (newVal == 1)
3070                XUIHtml.RemoveCSSProperty(domNode, "filter");
3071            else
3072                domNode.style.filter = 'alpha(opacity=' + String(newVal * 100) + ')';
3073        }
3074    };
3075    XUIHtml.RemoveCSSProperty = function(domNode, propName) {
3076        if (typeof domNode.style.removeProperty != "undefined")
3077            domNode.style.removeProperty(propName);
3078        else
3079            domNode.style.removeAttribute(propName);
3080    };
3081    XUIHtml.GetOpacity = function(domNode) {
3082        if (typeof domNode.style == "undefined")
3083            return -1;
3084        if (document.body.style.opacity != null) {
3085            var o = domNode.style.opacity;
3086
3087            return o != null && o != '' ? parseFloat(o) : 1;
3088        }
3089        else {
3090            var f = domNode.style.filter;
3091
3092            return f != null && f != '' ? parseInt((f.replace('alpha(opacity=', '')).replace(')', '')) / 100 : 1;
3093        }
3094    };
3095}
3096var pxToNum;
3097var GetWidthFromPxString;
3098var GetCurrentEltStyle;
3099var GetCurrentEltStyleByNames;
3100var GetOpacity;
3101var SetOpacity;
3102var HasCssClass;
3103var AddCssClassToElement;
3104var RemoveCssClassFromElement;
3105var getCurrentEltStyleByNames;
3106var DOM;
3107
3108function DOM_module_def() {
3109    DOM.rightToLeft = document.documentElement.dir == "rtl";
3110    DOM.cancelDefault = DOM_cancelDefault;
3111    DOM.AbsLeft = DOM_AbsLeft;
3112    DOM.AbsTop = DOM_AbsTop;
3113    DOM.CancelEvent = DOM_CancelEvent;
3114    DOM.GetElementsByName = DOM_GetElementsByName;
3115    DOM.GetEventCoords = DOM_GetEventCoords;
3116    DOM.GetEventSrcElement = DOM_GetEventSrcElement;
3117    DOM.GetInnerText = DOM_GetInnerText;
3118    DOM.GetParentLinkFromEvent = DOM_GetParentLinkFromEvent;
3119    DOM.GetSelectedElement = DOM_GetSelectedElement;
3120    DOM.PreventDefaultNavigation = DOM_PreventDefaultNavigation;
3121    DOM.SetEvent = DOM_SetEvent;
3122    DOM.AddEventHandler = DOM_AddEventHandler;
3123    DOM.RemoveEventHandler = DOM_RemoveEventHandler;
3124    DOM.EnsureElementIsInViewPort = DOM_EnsureElementIsInViewPort;
3125    function DOM_cancelDefault(evt) {
3126        if (typeof evt == "undefined" || evt == null) {
3127            evt = window.event;
3128        }
3129        if (!(typeof evt == "undefined" || evt == null)) {
3130            if (typeof evt.stopPropagation == "function")
3131                evt.stopPropagation();
3132            else
3133                evt.cancelBubble = true;
3134            if (typeof evt.preventDefault == "function")
3135                evt.preventDefault();
3136            else
3137                evt.returnValue = false;
3138        }
3139        return false;
3140    }
3141    function DOM_CancelEvent(e) {
3142        e.cancelBubble = true;
3143        if (Boolean(e.preventDefault))
3144            e.preventDefault();
3145        e.returnValue = false;
3146        return false;
3147    }
3148    function DOM_GetElementsByName(str) {
3149        var ret = document.getElementsByName(str);
3150
3151        if (ret.length == 0 && Boolean(XMLHttpRequest)) {
3152            ret = FFGetElementsById(document, str);
3153        }
3154        return ret;
3155        function FFGetElementsById(doc, tabId) {
3156            var rg = [];
3157            var ele = doc.getElementById(tabId);
3158
3159            while (ele != null) {
3160                rg.push(ele);
3161                ele.id = "";
3162                ele = doc.getElementById(tabId);
3163            }
3164            var i;
3165
3166            for (i = 0; i < rg.length; i++) {
3167                rg[i].id = tabId;
3168            }
3169            return rg;
3170        }
3171    }
3172    function DOM_GetEventSrcElement(e) {
3173        if (e.target != null) {
3174            return e.target;
3175        }
3176        else if (typeof e.srcElement != 'undefined') {
3177            return e.srcElement;
3178        }
3179        else {
3180            ;
3181            return null;
3182        }
3183    }
3184    function DOM_GetParentLinkFromEvent(e) {
3185        if (e == null)
3186            e = window.event;
3187        var srcElement = DOM.GetEventSrcElement(e);
3188        var anchorElement = DOM_GetSelectedElement(srcElement, "A", "a");
3189
3190        if (anchorElement !== null && anchorElement.tagName != null && anchorElement.tagName.toUpperCase() === "A")
3191            return anchorElement;
3192        else
3193            return null;
3194    }
3195    function DOM_GetSelectedElement(elem, tagName, tagAlt) {
3196        while (elem != null && elem.tagName != tagName && (tagAlt == null || elem.tagName != tagAlt))
3197            elem = elem.parentNode;
3198        return elem;
3199    }
3200    function DOM_GetInnerText(elem) {
3201        if (typeof elem.textContent !== "undefined" && elem.textContent !== null) {
3202            return elem.textContent;
3203        }
3204        else if (typeof elem.innerText !== "undefined") {
3205            return elem.innerText;
3206        }
3207        return undefined;
3208    }
3209    function DOM_PreventDefaultNavigation(evt) {
3210        if (typeof evt == "undefined" || evt == null) {
3211            evt = window.event;
3212        }
3213        if (!(typeof evt == "undefined" || evt == null)) {
3214            if (evt.preventDefault == null)
3215                evt.returnValue = false;
3216            else
3217                evt.preventDefault();
3218        }
3219    }
3220    function DOM_Abs(obj, propName) {
3221        var x = obj[propName];
3222        var p = obj.offsetParent;
3223
3224        while (p != null && p.tagName != "BODY") {
3225            x += p[propName];
3226            p = p.offsetParent;
3227        }
3228        if (p != null)
3229            x += p[propName];
3230        return x;
3231    }
3232    function DOM_AbsLeft(obj) {
3233        return DOM_Abs(obj, "offsetLeft");
3234    }
3235    function DOM_AbsTop(obj) {
3236        return DOM_Abs(obj, "offsetTop");
3237    }
3238    function DOM_GetEventCoords(ev) {
3239        var x, y;
3240
3241        if ("undefined" !== typeof ev.pageX && "undefined" !== typeof ev.pageY) {
3242            x = ev.pageX;
3243            y = ev.pageY;
3244        }
3245        else {
3246            x = ev.clientX;
3247            y = ev.clientY;
3248            if ("undefined" !== typeof document.body && null !== document.body) {
3249                x += document.body.scrollLeft;
3250                y += document.body.scrollTop;
3251            }
3252            if ("undefined" !== typeof document.documentElement && null !== document.documentElement) {
3253                x += document.documentElement.scrollLeft;
3254                y += document.documentElement.scrollTop;
3255            }
3256        }
3257        return {
3258            x: x,
3259            y: y
3260        };
3261    }
3262    function DOM_SetEvent(eventName, eventFunc, el) {
3263        if (!Boolean(el))
3264            el = window;
3265        if (typeof eventFunc == 'string')
3266            eventFunc = new Function(eventFunc);
3267        el['on' + eventName] = eventFunc;
3268    }
3269    function DOM_AddEventHandler(ele, strEvt, func, useCapture) {
3270        if (Boolean(ele.addEventListener)) {
3271            useCapture = typeof useCapture != "undefined" && useCapture != null ? useCapture : false;
3272            ele.addEventListener(strEvt.substr(2), func, useCapture);
3273        }
3274        else if (Boolean(ele.attachEvent)) {
3275            ele.attachEvent(strEvt, func);
3276        }
3277    }
3278    function DOM_RemoveEventHandler(ele, strEvt, func, useCapture) {
3279        if (Boolean(ele.removeEventListener)) {
3280            useCapture = typeof useCapture != "undefined" && useCapture != null ? useCapture : false;
3281            ele.removeEventListener(strEvt.substr(2), func, useCapture);
3282        }
3283        else if (Boolean(ele.detachEvent)) {
3284            ele.detachEvent(strEvt, func);
3285        }
3286    }
3287    function DOM_EnsureElementIsInViewPort(ele, padding, widths) {
3288        var elementTop = Number(DOM_AbsTop(ele));
3289        var elementLeft = Number(DOM_AbsLeft(ele));
3290        var elementHeight = Number(ele.clientHeight);
3291        var elementWidth = Number(ele.clientWidth);
3292        var viewPortHeight = Number(document.documentElement.clientHeight);
3293        var viewPortWidth = Number(document.documentElement.clientWidth);
3294        var newTop = elementTop;
3295        var newLeft = elementLeft;
3296
3297        if (elementTop + elementHeight > viewPortHeight) {
3298            newTop = viewPortHeight - elementHeight - padding;
3299        }
3300        if (elementLeft < 0) {
3301            if (elementWidth + padding < viewPortWidth)
3302                newLeft = padding;
3303        }
3304        else if (elementLeft + elementWidth > viewPortWidth) {
3305            if (Boolean(widths)) {
3306                for (var i = 0; i < widths.length; i++) {
3307                    newLeft -= widths[i];
3308                }
3309            }
3310            else
3311                newLeft = viewPortWidth - elementWidth - padding;
3312        }
3313        if (newTop !== elementTop || newLeft !== elementLeft) {
3314            newTop = Math.max(newTop, 0);
3315            newLeft = Math.max(newLeft, 0);
3316            ele.style.position = "absolute";
3317            ele.style.top = String(newTop) + "px";
3318            ele.style.left = String(newLeft) + "px";
3319        }
3320    }
3321}
3322var fRightToLeft;
3323var cancelDefault;
3324var AbsLeft;
3325var AbsTop;
3326var CancelEvent;
3327var GetElementsByName;
3328var GetEventCoords;
3329var GetEventSrcElement;
3330var GetInnerText;
3331var PreventDefaultNavigation;
3332var SetEvent;
3333var Encoding;
3334
3335function Encoding_module_def() {
3336    Encoding.EncodeScriptQuote = Encoding_encodeScriptQuote;
3337    Encoding.HtmlEncode = Encoding_STSHtmlEncode;
3338    Encoding.HtmlEncode2 = Encoding_STSHtmlEncode2;
3339    Encoding.HtmlEncodeEx = Encoding_STSHtmlEncodeEx;
3340    Encoding.HtmlDecode = Encoding_STSHtmlDecode;
3341    Encoding.AttrQuote = Encoding_StAttrQuote;
3342    Encoding.ScriptEncode = Encoding_STSScriptEncode;
3343    Encoding.ScriptEncodeWithQuote = Encoding_STSScriptEncodeWithQuote;
3344    Encoding.CanonicalizeUrlEncodingCase = Encoding_CanonicalizeUrlEncodingCase;
3345    Encoding.EncodePath = Encoding_encodePath;
3346    function Encoding_CanonicalizeUrlEncodingCase(str) {
3347        var strOut = "";
3348        var ix;
3349
3350        for (ix = 0; ix < str.length; ix++) {
3351            var curChar = str.charAt(ix);
3352
3353            if (curChar == '%' && ix + 2 < str.length) {
3354                strOut += curChar;
3355                ix++;
3356                strOut += ((str.charAt(ix)).toString()).toUpperCase();
3357                ix++;
3358                strOut += ((str.charAt(ix)).toString()).toUpperCase();
3359            }
3360            else {
3361                strOut += curChar;
3362            }
3363        }
3364        return strOut;
3365    }
3366    function Encoding_encodeScriptQuote(str) {
3367        var strIn = new String(str);
3368        var strOut = [];
3369        var ix = 0;
3370        var max = strIn.length;
3371
3372        for (ix = 0; ix < max; ix++) {
3373            var ch = strIn.charAt(ix);
3374
3375            strOut.push(ch == '\'' ? "%27" : ch);
3376        }
3377        return strOut.join('');
3378    }
3379    function Encoding_STSHtmlEncode(str) {
3380        return Encoding_STSHtmlEncode2(str, false);
3381    }
3382    function Encoding_STSHtmlEncode2(str, preventDoubleEncode) {
3383        if (null == str)
3384            return "";
3385        var strIn = new String(str);
3386        var strOut = [];
3387        var ix = 0;
3388        var max = strIn.length;
3389
3390        for (ix = 0; ix < max; ix++) {
3391            var ch = strIn.charAt(ix);
3392
3393            switch (ch) {
3394            case '<':
3395                strOut.push("&lt;");
3396                break;
3397            case '>':
3398                strOut.push("&gt;");
3399                break;
3400            case '&':
3401                if (preventDoubleEncode && /^(&#\d+;|&#x[0-9A-F]+;)/i.test(strIn.substring(ix))) {
3402                    strOut.push(ch);
3403                }
3404                else {
3405                    strOut.push("&amp;");
3406                }
3407                break;
3408            case '\"':
3409                strOut.push("&quot;");
3410                break;
3411            case '\'':
3412                strOut.push("&#39;");
3413                break;
3414            default:
3415                strOut.push(ch);
3416                break;
3417            }
3418        }
3419        return strOut.join('');
3420    }
3421    function Encoding_encodePath(url, encodeHash) {
3422        if (null == url)
3423            return url;
3424        var encodedUrl = encodeURI(url);
3425
3426        if (encodeHash) {
3427            encodedUrl = encodedUrl.replace(/#/g, "%23");
3428        }
3429        return encodedUrl;
3430    }
3431    function Encoding_STSHtmlEncodeEx(str) {
3432        if (null == str)
3433            return "";
3434        var strIn = new String(str);
3435        var strOut = [];
3436        var ix = 0;
3437        var max = strIn.length;
3438
3439        for (ix = 0; ix < max; ix++) {
3440            var ch = strIn.charAt(ix);
3441
3442            switch (ch) {
3443            case '<':
3444                strOut.push("&lt;");
3445                break;
3446            case '>':
3447                strOut.push("&gt;");
3448                break;
3449            case '&':
3450                strOut.push("&amp;");
3451                break;
3452            case '\"':
3453                strOut.push("&quot;");
3454                break;
3455            case '\'':
3456                strOut.push("&#39;");
3457                break;
3458            case '#':
3459                strOut.push("%23");
3460                break;
3461            case '%':
3462                strOut.push("%25");
3463                break;
3464            default:
3465                strOut.push(ch);
3466                break;
3467            }
3468        }
3469        return strOut.join('');
3470    }
3471    function Encoding_STSHtmlDecode(str) {
3472        if (null == str)
3473            return "";
3474        var rRegexs = [/\&lt;/g, /\&gt;/g, /\&quot;/g, /\&#39;/g, /\&#58;/g, /\&#123;/g, /\&#125;/g, /\&amp;/g];
3475        var rSubtitutes = ["<", ">", "\"", "'", ":", "{", "}", "&"];
3476        var strOut = [];
3477        var ix = 0;
3478        var len = rRegexs.length;
3479
3480        for (ix = 0; ix < len; ix++) {
3481            var firstAmpPos = str.indexOf("&");
3482
3483            if (-1 != firstAmpPos) {
3484                if (0 < firstAmpPos) {
3485                    strOut.push(str.substr(0, firstAmpPos));
3486                    str = str.substr(firstAmpPos);
3487                }
3488                str = str.replace(rRegexs[ix], rSubtitutes[ix]);
3489            }
3490            else {
3491                break;
3492            }
3493        }
3494        strOut.push(str);
3495        return strOut.join('');
3496    }
3497    function Encoding_StAttrQuote(st) {
3498        st = st.toString();
3499        st = st.replace(/&/g, '&amp;');
3500        st = st.replace(/\"/g, '&quot;');
3501        st = st.replace(/\r/g, '&#13;');
3502        return '"' + st + '"';
3503    }
3504    function Encoding_STSScriptEncode(str) {
3505        if (null == str || typeof str == 'undefined')
3506            return "";
3507        var strIn = new String(str);
3508        var strOut = [];
3509        var ix = 0;
3510        var max = strIn.length;
3511
3512        for (ix = 0; ix < max; ix++) {
3513            var charCode = strIn.charCodeAt(ix);
3514
3515            if (charCode > 0x0fff) {
3516                strOut.push("\\u" + (charCode.toString(16)).toUpperCase());
3517            }
3518            else if (charCode > 0x00ff) {
3519                strOut.push("\\u0" + (charCode.toString(16)).toUpperCase());
3520            }
3521            else if (charCode > 0x007f) {
3522                strOut.push("\\u00" + (charCode.toString(16)).toUpperCase());
3523            }
3524            else {
3525                var c = strIn.charAt(ix);
3526
3527                switch (c) {
3528                case '\n':
3529                    strOut.push("\\n");
3530                    break;
3531                case '\r':
3532                    strOut.push("\\r");
3533                    break;
3534                case '\"':
3535                    strOut.push("\\u0022");
3536                    break;
3537                case '%':
3538                    strOut.push("\\u0025");
3539                    break;
3540                case '&':
3541                    strOut.push("\\u0026");
3542                    break;
3543                case '\'':
3544                    strOut.push("\\u0027");
3545                    break;
3546                case '(':
3547                    strOut.push("\\u0028");
3548                    break;
3549                case ')':
3550                    strOut.push("\\u0029");
3551                    break;
3552                case '+':
3553                    strOut.push("\\u002b");
3554                    break;
3555                case '/':
3556                    strOut.push("\\u002f");
3557                    break;
3558                case '<':
3559                    strOut.push("\\u003c");
3560                    break;
3561                case '>':
3562                    strOut.push("\\u003e");
3563                    break;
3564                case '\\':
3565                    strOut.push("\\\\");
3566                    break;
3567                default:
3568                    strOut.push(c);
3569                }
3570                ;
3571            }
3572        }
3573        return strOut.join('');
3574    }
3575    function Encoding_STSScriptEncodeWithQuote(str) {
3576        return '"' + Encoding_STSScriptEncode(str) + '"';
3577    }
3578}
3579var encodeScriptQuote;
3580var STSHtmlEncode;
3581var STSHtmlEncode2;
3582var STSHtmlEncodeEx;
3583var STSHtmlDecode;
3584var StAttrQuote;
3585var STSScriptEncode;
3586var STSScriptEncodeWithQuote;
3587var CanonicalizeUrlEncodingCase;
3588var EncodePath;
3589var ExpFlighting;
3590
3591function ExpFlighting_module_def() {
3592    var c_strUndefined = "undefined";
3593
3594    function IsFlightingAvailable() {
3595        var varConfig;
3596
3597        return typeof Flighting != c_strUndefined && typeof Flighting.VariantConfiguration != c_strUndefined && typeof Flighting.VariantConfiguration.IsExpFeatureClientEnabled != c_strUndefined;
3598    }
3599}
3600var IE8Support;
3601
3602function IE8Support_module_def() {
3603    IE8Support.arrayIndexOf = function(array, item, startIdx) {
3604        if (typeof Array.prototype.indexOf != "undefined") {
3605            return array.indexOf(item, startIdx);
3606        }
3607        if (typeof item === "undefined")
3608            return -1;
3609        var l = array.length;
3610
3611        if (l !== 0) {
3612            startIdx = startIdx - 0;
3613            if (isNaN(startIdx)) {
3614                startIdx = 0;
3615            }
3616            else {
3617                if (isFinite(startIdx)) {
3618                    startIdx = startIdx - startIdx % 1;
3619                }
3620                if (startIdx < 0) {
3621                    startIdx = Math.max(0, l + startIdx);
3622                }
3623            }
3624            for (var i = startIdx; i < l; i++) {
3625                if (typeof array[i] !== "undefined" && array[i] === item) {
3626                    return i;
3627                }
3628            }
3629        }
3630        return -1;
3631    };
3632    IE8Support.attachDOMContentLoaded = function(handler) {
3633        if (typeof document.addEventListener == 'undefined') {
3634            document.onreadystatechange = function() {
3635                if (document.readyState == "complete") {
3636                    handler();
3637                }
3638            };
3639        }
3640        else {
3641            document.addEventListener("DOMContentLoaded", handler, false);
3642        }
3643    };
3644    IE8Support.getComputedStyle = function(domObj, camelStyleName, dashStyleName) {
3645        if (typeof document.defaultView != 'undefined' && typeof document.defaultView.getComputedStyle != 'undefined') {
3646            return (document.defaultView.getComputedStyle(domObj, null)).getPropertyValue(dashStyleName);
3647        }
3648        else {
3649            if (camelStyleName == 'width') {
3650                return String(domObj.offsetWidth) + "px";
3651            }
3652            return domObj.currentStyle[camelStyleName];
3653        }
3654    };
3655    IE8Support.stopPropagation = function(evt) {
3656        if (typeof evt.stopPropagation == "function")
3657            evt.stopPropagation();
3658        else
3659            evt.cancelBubble = true;
3660    };
3661    IE8Support.getCurrentTarget = function(evt) {
3662        if (typeof evt.currentTarget != "undefined")
3663            return evt.currentTarget;
3664        return evt.srcElement;
3665    };
3666    if (typeof Array.isArray == 'undefined') {
3667        Array.isArray = function(obj) {
3668            return typeof obj == 'object' && obj instanceof Array;
3669        };
3670    }
3671    if (typeof Object.create == 'undefined') {
3672        Object.create = function(proto, properties) {
3673            ;
3674            function ctr() {
3675            }
3676            ctr.prototype = proto;
3677            return new ctr;
3678        };
3679    }
3680    if (typeof String.prototype.trim == "undefined") {
3681        String.prototype.trim = function() {
3682            return this.replace(/^\s+|\s+$/g, '');
3683        };
3684    }
3685}
3686var RequestUtil;
3687
3688function RequestUtil_module_def() {
3689    RequestUtil.RequestHeader = RequestHeader;
3690    function RequestHeader(header, value) {
3691        this.header = header;
3692        this.value = value;
3693    }
3694    RequestUtil.WithLoadedXMLHttpRequest = WithLoadedXMLHttpRequest;
3695    function WithLoadedXMLHttpRequest(xhrResultCallback, url, requestHeaders) {
3696        var req = new XMLHttpRequest();
3697
3698        req.onreadystatechange = function() {
3699            if (req.readyState != 4)
3700                return;
3701            xhrResultCallback(req);
3702        };
3703        req.open("GET", url, true);
3704        if (requestHeaders != null) {
3705            for (var i = 0; i < requestHeaders.length; i++) {
3706                var rh = requestHeaders[i];
3707
3708                req.setRequestHeader(rh.header, rh.value);
3709            }
3710        }
3711        req.send("");
3712    }
3713    RequestUtil.WithUrlContents = WithUrlContents;
3714    function WithUrlContents(resultCallback, url, requestHeaders) {
3715        WithLoadedXMLHttpRequest(CallbackWithUrlContents, url, requestHeaders);
3716        function CallbackWithUrlContents(req) {
3717            var responseText = null;
3718
3719            if (req.status == 200) {
3720                responseText = req.responseText;
3721            }
3722            resultCallback(responseText);
3723        }
3724    }
3725    var _restHeaders = [new RequestHeader("Content-Type", "application/x-www-form-urlencoded"), new RequestHeader("ACCEPT", "application/json; odata = verbose")];
3726
3727    RequestUtil.WithRestValue = WithRestValue;
3728    function WithRestValue(resultCallback, url) {
3729        WithUrlContents(resultCallback, url, _restHeaders);
3730    }
3731}
3732var StringUtil;
3733
3734function StringUtil_module_def() {
3735    StringUtil.BuildParam = StringUtil_StBuildParam;
3736    StringUtil.IsGuid = StringUtil_IsGuid;
3737    if (typeof String.prototype.endsWith == "undefined") {
3738        String.prototype.endsWith = function(suffix) {
3739            return this.substr(this.length - suffix.length) === suffix;
3740        };
3741    }
3742    if (typeof String.prototype.startsWith == "undefined") {
3743        String.prototype.startsWith = function(prefix) {
3744            return this.substr(0, prefix.length) === prefix;
3745        };
3746    }
3747    function StringUtil_StBuildParam(stPattern) {
3748        var re;
3749        var i;
3750
3751        for (i = 1; i < arguments.length; i++) {
3752            re = new RegExp("\\^" + String(i));
3753            stPattern = stPattern.replace(re, arguments[i]);
3754        }
3755        return stPattern;
3756    }
3757    StringUtil.ApplyStringTemplate = function() {
3758        var a = arguments;
3759
3760        if (a.length < 1)
3761            throw new Error("arguments");
3762        var str = Array.prototype.shift.call(a);
3763
3764        return str.replace(/\{(\d+)\}/g, getReplacementString);
3765        function getReplacementString(match, capture) {
3766            return a[Number(capture)];
3767        }
3768    };
3769    function StringUtil_IsGuid(str) {
3770        var regex = /^((\{[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}\})|([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}))$/i;
3771
3772        return regex.test(str);
3773    }
3774}
3775var StBuildParam;
3776var TypeUtil;
3777
3778function TypeUtil_module_def() {
3779    TypeUtil.IsArray = TypeUtil_IsArray;
3780    TypeUtil.IsNullOrUndefined = TypeUtil_IsNullOrUndefined;
3781    function TypeUtil_IsArray(input) {
3782        return typeof input == 'object' && input instanceof Array;
3783    }
3784    function TypeUtil_IsNullOrUndefined(value) {
3785        return value == null || value == undefined;
3786    }
3787}
3788var IsArray;
3789var IsNullOrUndefined;
3790var ObjectUtil;
3791
3792function ObjectUtil_module_def() {
3793    ObjectUtil.deepCopy = ObjectUtil_DeepCopy;
3794    ObjectUtil.deepCompare = ObjectUtil_DeepCompare;
3795    function ObjectUtil_DeepCopy(object) {
3796        var refsCopied = [];
3797
3798        function copyRecurse(obj) {
3799            var result = null;
3800
3801            if (Boolean(obj)) {
3802                if (obj instanceof Array) {
3803                    result = [];
3804                }
3805                else {
3806                    result = Object.create(Object.getPrototypeOf(obj));
3807                }
3808                for (var i in obj) {
3809                    if (obj.hasOwnProperty(i)) {
3810                        if (typeof obj[i] === "object") {
3811                            if (refsCopied.indexOf(obj[i]) !== -1) {
3812                                throw new Error("Cannot perform DeepCopy() because a circular reference was encountered, object: " + String(obj) + ", property: " + String(i));
3813                            }
3814                            refsCopied.push(obj[i]);
3815                            result[i] = copyRecurse(obj[i]);
3816                            refsCopied.pop();
3817                        }
3818                        else {
3819                            result[i] = obj[i];
3820                        }
3821                    }
3822                }
3823            }
3824            return result;
3825        }
3826        return copyRecurse(object);
3827    }
3828    function ObjectUtil_DeepCompare(objA, objB, equivalent) {
3829        var refsComparedA = [];
3830        var refsComparedB = [];
3831        var compare = Boolean(equivalent) ? equivalent : function(a, b) {
3832            return a === b;
3833        };
3834
3835        function equals(a, b) {
3836            if (a === b) {
3837                return true;
3838            }
3839            if (a === null || b === null) {
3840                return false;
3841            }
3842            for (var prop in b) {
3843                if (b.hasOwnProperty(prop) && !a.hasOwnProperty(prop)) {
3844                    return false;
3845                }
3846            }
3847            if (a instanceof Object && b instanceof Object) {
3848                for (prop in a) {
3849                    if (typeof a[prop] === "function" || !a.hasOwnProperty(prop)) {
3850                        continue;
3851                    }
3852                    if (!b.hasOwnProperty(prop)) {
3853                        return false;
3854                    }
3855                    if (!Boolean(compare(a[prop], b[prop]))) {
3856                        if (typeof a[prop] === "object") {
3857                            if (refsComparedA.indexOf(a[prop]) !== -1) {
3858                                throw new Error("Cannot perform DeepCompare() because a circular reference was encountered, object: " + String(a) + ", property: " + String(prop));
3859                            }
3860                            refsComparedA.push(a[prop]);
3861                            if (refsComparedB.indexOf(b[prop]) !== -1) {
3862                                throw new Error("Cannot perform DeepCompare() because a circular reference was encountered, object: " + String(b) + ", property: " + String(prop));
3863                            }
3864                            refsComparedB.push(b[prop]);
3865                            if (!equals(a[prop], b[prop])) {
3866                                return false;
3867                            }
3868                            refsComparedA.pop();
3869                            refsComparedB.pop();
3870                        }
3871                        else {
3872                            return false;
3873                        }
3874                    }
3875                }
3876            }
3877            else {
3878                return false;
3879            }
3880            return true;
3881        }
3882        return equals(objA, objB);
3883    }
3884}
3885var URI;
3886var unescapeProperly;
3887var GetAbsoluteUrl;
3888var RemoveParametersFromUrl;
3889var RemoveQueryParameterFromUrl;
3890var RemoveUrlKeyValue;
3891var StURLSetVar2;
3892var ParseMultiColumnValue;
3893var ConvertMultiColumnValueToString;
3894var CompleteDecode;
3895var URI_Encoding;
3896
3897function URI_Encoding_module_def() {
3898    function URI_escapeProperly(str, bAsUrl, bForFilterQuery, bForCallback) {
3899        var strOut = "";
3900        var strByte;
3901        var ix = 0;
3902        var strEscaped = " \"%<>\'&";
3903
3904        if (typeof str == "undefined")
3905            return "";
3906        for (ix = 0; ix < str.length; ix++) {
3907            var charCode = str.charCodeAt(ix);
3908            var curChar = str.charAt(ix);
3909
3910            if (bAsUrl && (curChar == '#' || curChar == '?')) {
3911                strOut += str.substr(ix);
3912                break;
3913            }
3914            if (bForFilterQuery && curChar == '&') {
3915                strOut += curChar;
3916                continue;
3917            }
3918            if (charCode <= 0x7f) {
3919                if (bForCallback) {
3920                    strOut += curChar;
3921                }
3922                else {
3923                    if (charCode >= 97 && charCode <= 122 || charCode >= 65 && charCode <= 90 || charCode >= 48 && charCode <= 57 || bAsUrl && (charCode >= 32 && charCode <= 95) && strEscaped.indexOf(curChar) < 0) {
3924                        strOut += curChar;
3925                    }
3926                    else if (charCode <= 0x0f) {
3927                        strOut += "%0" + (charCode.toString(16)).toUpperCase();
3928                    }
3929                    else if (charCode <= 0x7f) {
3930                        strOut += "%" + (charCode.toString(16)).toUpperCase();
3931                    }
3932                }
3933            }
3934            else if (charCode <= 0x07ff) {
3935                strByte = 0xc0 | charCode >> 6;
3936                strOut += "%" + (strByte.toString(16)).toUpperCase();
3937                strByte = 0x80 | charCode & 0x003f;
3938                strOut += "%" + (strByte.toString(16)).toUpperCase();
3939            }
3940            else if ((charCode & 0xFC00) != 0xD800) {
3941                strByte = 0xe0 | charCode >> 12;
3942                strOut += "%" + (strByte.toString(16)).toUpperCase();
3943                strByte = 0x80 | (charCode & 0x0fc0) >> 6;
3944                strOut += "%" + (strByte.toString(16)).toUpperCase();
3945                strByte = 0x80 | charCode & 0x003f;
3946                strOut += "%" + (strByte.toString(16)).toUpperCase();
3947            }
3948            else if (ix < str.length - 1) {
3949                charCode = (charCode & 0x03FF) << 10;
3950                ix++;
3951                var nextCharCode = str.charCodeAt(ix);
3952
3953                charCode |= nextCharCode & 0x03FF;
3954                charCode += 0x10000;
3955                strByte = 0xf0 | charCode >> 18;
3956                strOut += "%" + (strByte.toString(16)).toUpperCase();
3957                strByte = 0x80 | (charCode & 0x3f000) >> 12;
3958                strOut += "%" + (strByte.toString(16)).toUpperCase();
3959                strByte = 0x80 | (charCode & 0x0fc0) >> 6;
3960                strOut += "%" + (strByte.toString(16)).toUpperCase();
3961                strByte = 0x80 | charCode & 0x003f;
3962                strOut += "%" + (strByte.toString(16)).toUpperCase();
3963            }
3964        }
3965        return strOut;
3966    }
3967    function URI_escapeUrlForCallback(str) {
3968        var iPound = str.indexOf("#");
3969        var iQues = str.indexOf("?");
3970
3971        if (iPound > 0 && (iQues == -1 || iPound < iQues)) {
3972            var strNew = str.substr(0, iPound);
3973
3974            if (iQues > 0) {
3975                strNew += str.substr(iQues);
3976            }
3977            str = strNew;
3978        }
3979        return URI_escapeProperly(str, true, false, true);
3980    }
3981    URI_Encoding.encodeURIComponent = URI_escapeProperly;
3982    URI_Encoding.escapeUrlForCallback = URI_escapeUrlForCallback;
3983}
3984var escapeUrlForCallback;
3985var escapeProperly;
3986var escapeProperlyCore;
3987var escapeProperlyCoreCore;
3988
3989function PageContextInfo(webServerRelativeUrl, webLanguage, currentLanguage, webUIVersion, pageListId, pageItemId, userId, alertsEnabled, siteServerRelativeUrl, allowSilverlightPrompt, webAbsoluteUrl, siteClientTag, layoutsUrl, tenantAppVersion, siteAbsoluteUrl, themedImageRootPath, themedImageFileNames, clientServerTimeDelta, serverRedirectedUrl, expFeatures) {
3990    this.webServerRelativeUrl = webServerRelativeUrl;
3991    this.webAbsoluteUrl = webAbsoluteUrl;
3992    this.siteAbsoluteUrl = siteAbsoluteUrl;
3993    this.layoutsUrl = layoutsUrl;
3994    this.webLanguage = webLanguage;
3995    this.siteClientTag = siteClientTag;
3996    this.currentLanguage = currentLanguage;
3997    this.webUIVersion = webUIVersion;
3998    this.pageListId = pageListId;
3999    this.pageItemId = pageItemId;
4000    this.userId = userId;
4001    this.alertsEnabled = alertsEnabled;
4002    this.siteServerRelativeUrl = siteServerRelativeUrl;
4003    this.allowSilverlightPrompt = allowSilverlightPrompt;
4004    this.tenantAppVersion = tenantAppVersion;
4005    this.themedImageRootPath = themedImageRootPath;
4006    this.themedImageFileNames = themedImageFileNames;
4007    this.clientServerTimeDelta = clientServerTimeDelta;
4008    this.updateFormDigestPageLoaded = new Date();
4009    this.serverRedirectedUrl = serverRedirectedUrl;
4010    this.ExpFeatures = expFeatures;
4011}
4012function PageContextInfo_InitializePrototype() {
4013    var dynamicNull = null;
4014
4015    PageContextInfo.prototype.webServerRelativeUrl = "";
4016    PageContextInfo.prototype.webAbsoluteUrl = "";
4017    PageContextInfo.prototype.siteAbsoluteUrl = "";
4018    PageContextInfo.prototype.serverRequestPath = "";
4019    PageContextInfo.prototype.layoutsUrl = "";
4020    PageContextInfo.prototype.siteClientTag = "";
4021    PageContextInfo.prototype.webLanguage = 0;
4022    PageContextInfo.prototype.webTitle = null;
4023    PageContextInfo.prototype.webLogoUrl = null;
4024    PageContextInfo.prototype.currentCultureName = null;
4025    PageContextInfo.prototype.currentUICultureName = null;
4026    PageContextInfo.prototype.currentLanguage = 0;
4027    PageContextInfo.prototype.crossDomainPhotosEnabled = false;
4028    PageContextInfo.prototype.AllowCustomMarkupInCalculatedField = false;
4029    PageContextInfo.prototype.CustomMarkupInCalculatedFieldDisabled = true;
4030    PageContextInfo.prototype.webUIVersion = 0;
4031    PageContextInfo.prototype.pageListId = "";
4032    PageContextInfo.prototype.pageItemId = 0;
4033    PageContextInfo.prototype.userId = "";
4034    PageContextInfo.prototype.systemUserKey = "";
4035    PageContextInfo.prototype.alertsEnabled = false;
4036    PageContextInfo.prototype.siteServerRelativeUrl = "";
4037    PageContextInfo.prototype.allowSilverlightPrompt = "";
4038    PageContextInfo.prototype.tenantAppVersion = null;
4039    PageContextInfo.prototype.themedImageRootPath = null;
4040    PageContextInfo.prototype.themedImageFileNames = dynamicNull;
4041    PageContextInfo.prototype.clientServerTimeDelta = 0;
4042    PageContextInfo.prototype.webTemplate = "";
4043    PageContextInfo.prototype.isSLV = false;
4044    PageContextInfo.prototype.userLoginName = "";
4045    PageContextInfo.prototype.supportPoundStorePath = "";
4046    PageContextInfo.prototype.supportPercentStorePath = "";
4047    PageContextInfo.prototype.updateFormDigestPageLoaded = new Date();
4048    PageContextInfo.prototype.showNGSCDialogForSyncOnODB = false;
4049    PageContextInfo.prototype.showNGSCDialogForSyncOnTS = false;
4050    PageContextInfo.prototype.isSPO = false;
4051    PageContextInfo.prototype.serverRedirectedUrl = null;
4052    PageContextInfo.prototype.ExpFeatures = [];
4053}
4054var _spPageContextInfo;
4055var Nav;
4056
4057function Nav_module_def() {
4058    function AjaxNavigate() {
4059        this._list = new Array(0);
4060        this._fixLayoutsUrl = function AjaxNavigate$_fixLayoutsUrl(url) {
4061            var idxLayouts = url.indexOf("_layouts/");
4062
4063            if (idxLayouts != -1) {
4064                var strPostLayouts = url.substr(idxLayouts);
4065                var expectedVersionNum = (strPostLayouts.split("/"))[1];
4066
4067                if (expectedVersionNum != null) {
4068                    if (isNaN(Number(expectedVersionNum)))
4069                        url = url.replace("_layouts/", "_layouts/15/");
4070                }
4071            }
4072            return url;
4073        };
4074        this.update = function AjaxNavigate$update(url, updateParts, fullNavigate, anchorName) {
4075            var oldHash = Nav_AjaxNavigate$_GetWindowLocationHash(window.location.href);
4076            var hashObject = {};
4077            var newHash = "";
4078
4079            if (null == url) {
4080                if (oldHash != null && oldHash.length != 0) {
4081                    var parts = (oldHash.substr(1)).split('#');
4082                    var partsLength = parts.length;
4083                    var partPosStart = 0;
4084
4085                    if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && partsLength > 0 && parts[0].length > 0 && parts[0][0] == '/') {
4086                        newHash = parts[0];
4087                        partPosStart = 1;
4088                    }
4089                    Nav_AjaxNavigate$_parseParams(hashObject, parts, partsLength, partPosStart);
4090                }
4091            }
4092            else {
4093                newHash = this._fixLayoutsUrl(url);
4094            }
4095            if ("undefined" != typeof updateParts) {
4096                for (var part in updateParts) {
4097                    var partValue = updateParts[part];
4098
4099                    if (null != partValue && "string" != typeof partValue && "number" != typeof partValue) {
4100                        throw "Unexpected";
4101                    }
4102                    if (null == partValue) {
4103                        if (hashObject[part] != null) {
4104                            delete hashObject[part];
4105                        }
4106                    }
4107                    else {
4108                        hashObject[part] = updateParts[part];
4109                    }
4110                }
4111            }
4112            if ("undefined" != typeof anchorName && anchorName != null && anchorName != "")
4113                newHash += "#" + encodeURIComponent(anchorName);
4114            for (part in hashObject) {
4115                if (part != "anchorTag")
4116                    newHash += "#" + part + "=" + encodeURIComponent(hashObject[part]);
4117            }
4118            if (null != url) {
4119                if (typeof _dlgWndTop == 'function' && typeof commonModalDialogClose == 'function') {
4120                    commonModalDialogClose(0, null);
4121                }
4122            }
4123            var fDeltaManager = "undefined" != typeof asyncDeltaManager && Boolean(asyncDeltaManager) && "undefined" != typeof asyncDeltaManager._handleLocalAnchor && "undefined" != typeof asyncDeltaManager.SetCurrentUrl && "undefined" != typeof asyncDeltaManager._navigate;
4124
4125            if ("undefined" != typeof fullNavigate && fullNavigate || !fDeltaManager) {
4126                if (newHash.startsWith('#')) {
4127                    try {
4128                        window.location.hash = newHash;
4129                    }
4130                    catch (ex) { }
4131                }
4132                else {
4133                    try {
4134                        window.location.href = newHash;
4135                    }
4136                    catch (ex) { }
4137                }
4138            }
4139            else {
4140                if (null == url) {
4141                    if (fDeltaManager) {
4142                        if ("undefined" != typeof anchorName && anchorName != null && anchorName != "")
4143                            asyncDeltaManager._handleLocalAnchor(anchorName);
4144                        var startPageUrl = Nav_AjaxNavigate$_GetWindowLocationNoHash(window.location.href);
4145                        var newAction = Nav_GetUrlFromMDSLocation(startPageUrl, Nav_RemoveMDSQueryParametersFromUrl(newHash), true);
4146
4147                        if (Boolean(newAction)) {
4148                            asyncDeltaManager._savedFormAction = newAction;
4149                        }
4150                    }
4151                    try {
4152                        window.location.hash = newHash;
4153                    }
4154                    catch (ex) { }
4155                }
4156                else {
4157                    if (fDeltaManager) {
4158                        asyncDeltaManager.SetCurrentUrl(null);
4159                        asyncDeltaManager._navigate(newHash, anchorName, true);
4160                    }
4161                }
4162            }
4163        };
4164        this.add_navigate = function AjaxNavigate$add_navigate(handler) {
4165            if ('function' != typeof handler)
4166                throw "unexpected";
4167            var index = IE8Support.arrayIndexOf(this._list, handler, 0);
4168
4169            if (-1 == index) {
4170                this._list.push(handler);
4171            }
4172        };
4173        this.remove_navigate = function AjaxNavigate$remove_navigate(handler) {
4174            if ('function' != typeof handler)
4175                throw "unexpected";
4176            var index = IE8Support.arrayIndexOf(this._list, handler, 0);
4177
4178            if (-1 != index) {
4179                this._list.splice(index, 1);
4180            }
4181        };
4182        this._buildHashBag = function AjaxNavigate$_buildHashBag(hash) {
4183            var hashObject = {};
4184
4185            try {
4186                if (hash == "" || hash == "#") {
4187                    hashObject["url"] = "/";
4188                }
4189                else if (hash != null && hash.length != 0) {
4190                    var parts = (hash.substr(1)).split(/#|%23/);
4191                    var partsLength = parts.length;
4192                    var partPosStart = 0;
4193
4194                    if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && partsLength > 0 && parts[0].length > 0 && parts[0][0] == '/') {
4195                        hashObject["url"] = parts[0];
4196                        partPosStart = 1;
4197                    }
4198                    Nav_AjaxNavigate$_parseParams(hashObject, parts, partsLength, partPosStart);
4199                }
4200            }
4201            catch (e) { }
4202            ;
4203            return hashObject;
4204        };
4205        this._raiseNavigate = function AjaxNavigate$_raiseNavigate(sender) {
4206            var hashObject = this._buildHashBag(Nav_AjaxNavigate$_GetWindowLocationHash(window.location.href));
4207            var listLen = this._list.length;
4208
4209            for (var i = 0, l = listLen; i < l; i++) {
4210                this._list[i](sender, hashObject);
4211            }
4212        };
4213        this._clear = function AjaxNavigate$_clear() {
4214            this._list = new Array(0);
4215        };
4216        this.submit = function AjaxNavigate$submit(formToSubmit) {
4217            if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx") && "undefined" != typeof asyncDeltaManager && "undefined" != typeof asyncDeltaManager._onFormSubmitCore) {
4218                asyncDeltaManager._onFormSubmitCore(formToSubmit);
4219            }
4220            else {
4221                formToSubmit.submit();
4222            }
4223        };
4224        this.getParam = function AjaxNavigate$_getParam(partName) {
4225            var hashObject = this._buildHashBag(Nav_AjaxNavigate$_GetWindowLocationHash(window.location.href));
4226
4227            return hashObject[partName];
4228        };
4229        this.getSavedFormAction = function AjaxNavigate$_getSavedFormAction() {
4230            var formAction = null;
4231
4232            if ("undefined" != typeof asyncDeltaManager && Boolean(asyncDeltaManager) && "undefined" != typeof asyncDeltaManager._savedFormAction) {
4233                formAction = asyncDeltaManager._savedFormAction;
4234                if (Boolean(formAction)) {
4235                    formAction = Nav_AjaxNavigate$_normalizeFormAction(formAction);
4236                }
4237            }
4238            return formAction;
4239        };
4240        this.get_href = function AjaxNavigate$get_href() {
4241            var ajaxLocation = null;
4242
4243            if ((window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx")) {
4244                if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload) {
4245                    ajaxLocation = this.getSavedFormAction();
4246                }
4247                if (!Boolean(ajaxLocation)) {
4248                    ajaxLocation = Nav_AjaxNavigate$_getAjaxLocationWindow();
4249                }
4250            }
4251            else {
4252                ajaxLocation = window.location.href;
4253            }
4254            return ajaxLocation;
4255        };
4256        this.get_hash = function AjaxNavigate$get_hash() {
4257            var ajaxHash = window.location.hash;
4258
4259            if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx")) {
4260                var hashIndex = ajaxHash.indexOf("#", 1);
4261
4262                ajaxHash = hashIndex > 0 ? ajaxHash.substr(hashIndex) : "";
4263            }
4264            return ajaxHash;
4265        };
4266        this.get_search = function AjaxNavigate$get_search() {
4267            var ajaxsearch = "";
4268
4269            if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && (window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx")) {
4270                var href = this.getSavedFormAction();
4271
4272                if (Boolean(href)) {
4273                    var startSearch = href.indexOf("?");
4274
4275                    if (-1 != startSearch) {
4276                        ajaxsearch = href.substr(startSearch);
4277                    }
4278                }
4279            }
4280            else {
4281                ajaxsearch = window.location.search;
4282            }
4283            return ajaxsearch;
4284        };
4285        this.convertMDSURLtoRegularURL = function Nav_AjaxNavigate$convertMDSURLtoRegularURL(mdsPath) {
4286            var regularUrl = mdsPath;
4287
4288            if (mdsPath != null || mdsPath != "") {
4289                var startPage = "/_layouts/15/start.aspx";
4290                var idxMdsHash = (mdsPath.toLowerCase()).indexOf(startPage);
4291
4292                if (idxMdsHash != -1) {
4293                    var webUrl = mdsPath.substring(0, idxMdsHash);
4294
4295                    idxMdsHash += startPage.length;
4296                    if (mdsPath.length == idxMdsHash) {
4297                        regularUrl = webUrl;
4298                    }
4299                    else if (mdsPath[idxMdsHash] == '#') {
4300                        idxMdsHash += 1;
4301                        if (mdsPath.length == idxMdsHash) {
4302                            regularUrl = webUrl;
4303                        }
4304                        else if (mdsPath.length >= idxMdsHash + 2 && mdsPath[idxMdsHash] == '/' && mdsPath[idxMdsHash + 1] == '/') {
4305                            var idxHttp = mdsPath.indexOf("://");
4306
4307                            if (idxHttp != -1) {
4308                                var idxServerPath = mdsPath.indexOf("/", idxHttp + 3);
4309
4310                                if (idxServerPath != -1) {
4311                                    var serverPath = mdsPath.substring(0, idxServerPath);
4312                                    var serverRelativeUrl = mdsPath.substring(idxMdsHash + 1);
4313
4314                                    regularUrl = Nav_AjaxNavigate$combineURL(serverPath, serverRelativeUrl);
4315                                }
4316                            }
4317                        }
4318                        else if (mdsPath.length >= idxMdsHash + 1 && mdsPath[idxMdsHash] == '/') {
4319                            var webRelativeUrl = mdsPath.substring(idxMdsHash);
4320
4321                            regularUrl = Nav_AjaxNavigate$combineURL(webUrl, webRelativeUrl);
4322                        }
4323                    }
4324                }
4325            }
4326            return regularUrl;
4327        };
4328    }
4329    function Nav_AjaxNavigate$WantsNewTab(evt) {
4330        if ("undefined" != typeof evt.ctrlKey && Boolean(evt.ctrlKey)) {
4331            return true;
4332        }
4333        if ("undefined" != typeof evt.button && 1 == evt.button) {
4334            return true;
4335        }
4336        var parentLink = DOM.GetParentLinkFromEvent(evt);
4337
4338        if (parentLink != null) {
4339            var linkTarget = parentLink.getAttribute("target");
4340
4341            if (Boolean(linkTarget)) {
4342                linkTarget = linkTarget.toUpperCase();
4343                if (linkTarget == "_BLANK" || linkTarget == "_NEW" || linkTarget.charAt(0) != "_") {
4344                    return true;
4345                }
4346            }
4347        }
4348        return false;
4349    }
4350    function Nav_AjaxNavigate$OnClickHook(evt, topElem) {
4351        if (!(evt.returnValue === false || evt.defaultPrevented) && !Nav_AjaxNavigate$WantsNewTab(evt)) {
4352            var srcElement = DOM.GetEventSrcElement(evt);
4353            var currentElem = srcElement;
4354            var anchorClick = false;
4355
4356            while (null != currentElem) {
4357                if (null != currentElem.tagName && "A" == currentElem.tagName.toUpperCase()) {
4358                    anchorClick = true;
4359                    break;
4360                }
4361                if (currentElem == topElem)
4362                    break;
4363                currentElem = currentElem.parentNode;
4364            }
4365            if (anchorClick && currentElem.href != null && currentElem.href.length > 0 && currentElem.href != "#" && !/^javascript:/i.test(currentElem.href)) {
4366                if (window["OffSwitch"] == null || OffSwitch.IsActive("911A3FDF-0DB6-45AC-BD03-E2FE43E0925B") || Nav.isPageUrlValid(currentElem.href)) {
4367                    DOM.cancelDefault(evt);
4368                    Nav.navigate(currentElem.href);
4369                    return false;
4370                }
4371            }
4372        }
4373        return (function(u) {
4374            return u;
4375        })();
4376    }
4377    function Nav_AjaxNavigate$_parseParams(hashObject, parts, partsLength, partPosStart) {
4378        var bLocalAnchor = false;
4379
4380        for (var partPos = partPosStart; partPos < partsLength; partPos++) {
4381            var part = parts[partPos];
4382
4383            if (null == part || 0 == part.length)
4384                continue;
4385            var eqPos = part.indexOf('=');
4386            var key;
4387            var value;
4388
4389            if (eqPos >= 1) {
4390                key = part.substr(0, eqPos);
4391                value = part.substr(eqPos + 1);
4392                hashObject[key] = URI.decodeURIComponent(value);
4393            }
4394            else if (eqPos == -1 && !bLocalAnchor) {
4395                if (bLocalAnchor)
4396                    throw "Unexpected";
4397                key = "anchorTag";
4398                value = part;
4399                hashObject[key] = URI.decodeURIComponent(value);
4400                bLocalAnchor = true;
4401            }
4402            else {
4403                throw "Unexpected";
4404            }
4405        }
4406    }
4407    function Nav_AjaxNavigate$_GetWindowLocationHash(href) {
4408        var nHashPos = href.indexOf('#');
4409
4410        nHashPos = nHashPos > 0 ? nHashPos : href.length;
4411        return href.substr(nHashPos);
4412    }
4413    function Nav_AjaxNavigate$_GetWindowLocationNoHash(href) {
4414        var nHashPos = href.indexOf('#');
4415
4416        nHashPos = nHashPos > 0 ? nHashPos : href.length;
4417        return href.substr(0, nHashPos);
4418    }
4419    function Nav_RemoveMDSQueryParametersFromUrl(inUrl) {
4420        return URI.removeQueryParameter(URI.removeQueryParameter(URI.removeQueryParameter(inUrl, 'AjaxDelta'), 'OrigMaster'), 'isStartPlt1');
4421    }
4422    function Nav_GetUrlFromMDSLocation(startPage, relativeMDSLocation, fServerAbsolute) {
4423        var anUndefined = (function() {
4424        })();
4425
4426        if (startPage == null)
4427            return anUndefined;
4428        if (relativeMDSLocation == null || relativeMDSLocation.length < 1 || relativeMDSLocation[0] != "/")
4429            return anUndefined;
4430        var locationWeb = startPage.indexOf("/_layouts/15/start.aspx");
4431
4432        if (-1 == locationWeb) {
4433            return anUndefined;
4434        }
4435        var prefix;
4436
4437        if (fServerAbsolute && '/' != startPage[0]) {
4438            var startHostName = startPage.indexOf("://");
4439
4440            if (-1 == startHostName)
4441                return anUndefined;
4442            var firstSlash = startPage.indexOf("/", startHostName + 3);
4443
4444            prefix = startPage.substr(firstSlash, locationWeb - firstSlash);
4445        }
4446        else {
4447            prefix = startPage.substr(0, locationWeb);
4448        }
4449        return prefix + relativeMDSLocation;
4450    }
4451    function Nav_AjaxNavigate$_UrlFromHashBag(hashObject) {
4452        var url = hashObject["url"];
4453        var anchorName = hashObject["anchorTag"];
4454
4455        for (var part in hashObject) {
4456            if (part != "anchorTag" && part != "url")
4457                url += "#" + part + "=" + encodeURIComponent(hashObject[part]);
4458        }
4459        if (Boolean(anchorName)) {
4460            url += "#" + anchorName;
4461        }
4462        if (null != url && url.length > 1 && "/" == url[0] && "/" == url[1]) {
4463            return url.substr(1);
4464        }
4465        else {
4466            var startPageUrl = Nav_AjaxNavigate$_GetWindowLocationNoHash(window.location.href);
4467
4468            return Nav_GetUrlFromMDSLocation(startPageUrl, url, true);
4469        }
4470    }
4471    function Nav_AjaxNavigate$parseHash(hash) {
4472        var hashObject = {};
4473
4474        try {
4475            if (hash != null && hash.length != 0) {
4476                var parts = hash.split('#');
4477
4478                Nav_AjaxNavigate$_parseParams(hashObject, parts, parts.length, 0);
4479            }
4480        }
4481        catch (e) { }
4482        ;
4483        return hashObject;
4484    }
4485    function Nav_AjaxNavigate$_normalizeFormAction(formAction) {
4486        var tmpForm = document.createElement('form');
4487
4488        tmpForm.action = formAction;
4489        return tmpForm.action;
4490    }
4491    function Nav_AjaxNavigate$_getAjaxLocationWindow() {
4492        var ajaxLocation = null;
4493        var href = window.location.href;
4494        var startPos = (href.toLowerCase()).indexOf("/_layouts/15/start.aspx");
4495        var index1 = href.indexOf("://");
4496        var index2 = href.indexOf("/", index1 + 3);
4497
4498        if (-1 == index2) {
4499            index2 = href.length;
4500        }
4501        var hashPos = href.indexOf("#");
4502
4503        if (-1 != hashPos && hashPos + 1 <= href.length && "/" == href[hashPos + 1]) {
4504            if (hashPos + 2 <= href.length && "/" == href[hashPos + 2]) {
4505                ajaxLocation = href.substr(0, index2) + href.substr(hashPos + 2);
4506            }
4507            else {
4508                ajaxLocation = href.substr(0, startPos) + href.substr(hashPos + 1);
4509            }
4510        }
4511        else {
4512            ajaxLocation = href.substr(0, startPos);
4513        }
4514        return ajaxLocation;
4515    }
4516    function Nav_AjaxNavigate$combineURL(baseUrlPath, additionalNodes) {
4517        if (baseUrlPath.endsWith("/")) {
4518            if (additionalNodes.startsWith("/"))
4519                additionalNodes = additionalNodes.substring(1);
4520            return baseUrlPath + additionalNodes;
4521        }
4522        else {
4523            return additionalNodes.startsWith("/") ? baseUrlPath + additionalNodes : baseUrlPath + "/" + additionalNodes;
4524        }
4525    }
4526    function Nav_AjaxNavigate$isMDSURL(url) {
4527        var idxQuery = url.indexOf("?");
4528
4529        if (-1 == idxQuery) {
4530            idxQuery = url.length;
4531        }
4532        var idxHash = url.indexOf("#");
4533
4534        if (-1 == idxHash) {
4535            idxHash = url.length;
4536        }
4537        var idxMin = Math.min(idxQuery, idxHash);
4538
4539        url = url.substr(0, idxMin);
4540        return (url.toLowerCase()).endsWith("/_layouts/15/start.aspx");
4541    }
4542    function Nav_AjaxNavigate$convertRegularURLtoMDSURL(webUrl, fullPath) {
4543        if (Nav_AjaxNavigate$isMDSURL(fullPath))
4544            return fullPath;
4545        var mdsUrl = null;
4546
4547        if (webUrl != null && (fullPath.toLowerCase()).startsWith(webUrl.toLowerCase() + "/")) {
4548            var webRelativeUrl = fullPath.substring(webUrl.length + 1);
4549
4550            if (webRelativeUrl == null || webRelativeUrl == "") {
4551                webRelativeUrl = "/";
4552            }
4553            else if ('/' != webRelativeUrl[0]) {
4554                webRelativeUrl = "/" + webRelativeUrl;
4555            }
4556            mdsUrl = Nav_AjaxNavigate$combineURL(webUrl, "/_layouts/15/start.aspx" + "#" + webRelativeUrl);
4557        }
4558        else {
4559            var idxHttp = fullPath.indexOf("://");
4560
4561            if (idxHttp != -1) {
4562                var idxServerPath = fullPath.indexOf("/", idxHttp + 3);
4563
4564                if (idxServerPath != -1) {
4565                    var serverPath = fullPath.substring(0, idxServerPath);
4566                    var serverRelativeUrl = fullPath.substring(idxServerPath);
4567
4568                    if (serverRelativeUrl == null || serverRelativeUrl == "") {
4569                        serverRelativeUrl = "/";
4570                    }
4571                    else if ('/' != serverRelativeUrl[0]) {
4572                        serverRelativeUrl = "/" + serverRelativeUrl;
4573                    }
4574                    mdsUrl = Nav_AjaxNavigate$combineURL(serverPath, "/_layouts/15/start.aspx" + "#/" + serverRelativeUrl);
4575                }
4576            }
4577        }
4578        return mdsUrl;
4579    }
4580    var Nav_ajaxNavigate = new AjaxNavigate;
4581
4582    Nav.ajaxNavigate = Nav_ajaxNavigate;
4583    Nav.combineUrl = Nav_AjaxNavigate$combineURL;
4584    Nav.convertRegularURLtoMDSURL = Nav_AjaxNavigate$convertRegularURLtoMDSURL;
4585    Nav.isMDSUrl = Nav_AjaxNavigate$isMDSURL;
4586    Nav.isPageUrlValid = Nav_IsSTSPageUrlValid;
4587    Nav.isPortalTemplatePage = Nav_isPortalTemplatePage;
4588    Nav.getAjaxLocationWindow = Nav_AjaxNavigate$_getAjaxLocationWindow;
4589    Nav.getSource = Nav_GetSource;
4590    Nav.getUrlKeyValue = Nav_GetUrlKeyValue;
4591    Nav.getWindowLocationNoHash = Nav_AjaxNavigate$_GetWindowLocationNoHash;
4592    Nav.goToHistoryLink = Nav_GoToHistoryLink;
4593    Nav.getGoToLinkUrl = Nav_GetGotoLinkUrl;
4594    Nav.goToLink = Nav_GoToLink;
4595    Nav.goToLinkOrDialogNewWindow = Nav_GoToLinkOrDialogNewWindow;
4596    Nav.goToDiscussion = Nav_GoToDiscussion;
4597    Nav.onClickHook = Nav_AjaxNavigate$OnClickHook;
4598    Nav.pageUrlValidation = Nav_PageUrlValidation;
4599    Nav.parseHash = Nav_AjaxNavigate$parseHash;
4600    Nav.navigate = Nav_STSNavigate;
4601    Nav.removeMDSQueryParametersFromUrl = Nav_RemoveMDSQueryParametersFromUrl;
4602    Nav.urlFromHashBag = Nav_AjaxNavigate$_UrlFromHashBag;
4603    Nav.wantsNewTab = Nav_AjaxNavigate$WantsNewTab;
4604    function Nav_STSNavigate(Url) {
4605        Url = URI.getAbsolute(Url);
4606        if ((Nav.ajaxNavigate.get_search()).indexOf("IsDlg=1") != -1) {
4607            if (Url.indexOf("?") != -1) {
4608                if (String(Url.match(RegExp("&$"))) != "&") {
4609                    Url = Url + "&IsDlg=1";
4610                }
4611                else {
4612                    Url = Url + "IsDlg=1";
4613                }
4614            }
4615            else {
4616                Url = Url + "?IsDlg=1";
4617            }
4618        }
4619        if (window.frameElement != null || typeof SPUpdatePage === 'undefined' || typeof SPUpdatePage !== 'undefined' && SPUpdatePage(Url)) {
4620            if (shouldOpenInTopFrame(Url))
4621                window.top.location.href = Nav.pageUrlValidation(Url);
4622            else
4623                window.location.href = Nav.pageUrlValidation(Url);
4624        }
4625    }
4626    function shouldOpenInTopFrame(Url) {
4627        return Nav_GetUrlKeyValue("OpenInTopFrame") == "1" || Nav_isPortalTemplatePage(Url);
4628    }
4629    function Nav_isPortalTemplatePage(Url) {
4630        if (Nav.getUrlKeyValue("PortalTemplate") == "1" || Nav.getUrlKeyValue("PortalTemplate", Boolean(Url)) == "1" || typeof currentCtx != "undefined" && currentCtx != null && typeof currentCtx.isPortalTemplate != "undefined" && Boolean(currentCtx.isPortalTemplate))
4631            return true;
4632        else
4633            return false;
4634    }
4635    function Nav_GetUrlKeyValue(keyName, bNoDecode, url, bCaseInsensitive) {
4636        var keyValue = "";
4637
4638        if (url == null)
4639            url = Nav.ajaxNavigate.get_href() + "";
4640        var ndx;
4641
4642        ndx = url.indexOf("#");
4643        if (ndx >= 0) {
4644            url = url.substr(0, ndx);
4645        }
4646        var urlToSearchKeyIn;
4647
4648        if (bCaseInsensitive) {
4649            keyName = keyName.toLowerCase();
4650            urlToSearchKeyIn = url.toLowerCase();
4651        }
4652        else {
4653            urlToSearchKeyIn = url;
4654        }
4655        ndx = urlToSearchKeyIn.indexOf("&" + keyName + "=");
4656        if (ndx == -1)
4657            ndx = urlToSearchKeyIn.indexOf("?" + keyName + "=");
4658        if (ndx != -1) {
4659            var ndx2 = url.indexOf("&", ndx + 1);
4660
4661            if (ndx2 == -1)
4662                ndx2 = url.length;
4663            keyValue = url.substring(ndx + keyName.length + 2, ndx2);
4664        }
4665        if (bNoDecode)
4666            return keyValue;
4667        else
4668            return URI.decodeURIComponent(keyValue);
4669    }
4670    function Nav_IsSTSPageUrlValid(url) {
4671        return url.substr(0, 4) == "http" || url.substr(0, 1) == "/" || url.indexOf(":") == -1;
4672    }
4673    function Nav_PageUrlValidation(url, alertString) {
4674        if (Nav_IsSTSPageUrlValid(url)) {
4675            return url;
4676        }
4677        else {
4678            if (Boolean(alertString)) {
4679                alert(alertString);
4680            }
4681            return "";
4682        }
4683    }
4684    function Nav_GoToHistoryLink(elm, strVersion) {
4685        if (elm.href == null)
4686            return;
4687        var targetUrl = elm.href;
4688        var ch = elm.href.indexOf("?") >= 0 ? "&" : "?";
4689        var srcUrl = ch + "VersionNo=" + strVersion;
4690        var srcSourceUrl = Nav.getSource();
4691
4692        if (srcSourceUrl != null && srcSourceUrl != "")
4693            srcSourceUrl = "&" + "Source=" + srcSourceUrl;
4694        targetUrl = elm.href + srcUrl + srcSourceUrl;
4695        if (shouldOpenInTopFrame(targetUrl))
4696            window.top.location.href = Nav.pageUrlValidation(targetUrl);
4697        else
4698            window.location.href = Nav.pageUrlValidation(targetUrl);
4699    }
4700    function Nav_GetGotoLinkUrl(elm) {
4701        if (elm.href == null)
4702            return null;
4703        var ch = elm.href.indexOf("?") >= 0 ? "&" : "?";
4704        var srcUrl = Nav.getSource();
4705
4706        if (srcUrl != null && srcUrl != "")
4707            srcUrl = ch + "Source=" + srcUrl;
4708        var targetUrl = elm.href + srcUrl;
4709
4710        return targetUrl;
4711    }
4712    function Nav_GoToLink(elm) {
4713        var targetUrl = Nav_GetGotoLinkUrl(elm);
4714
4715        if (targetUrl == null)
4716            return;
4717        if (elm.target === "_blank") {
4718            window.open(targetUrl, "_blank");
4719            return;
4720        }
4721        var fNavigate = true;
4722
4723        if (typeof window.top.SPUpdatePage !== 'undefined') {
4724            fNavigate = window.top.SPUpdatePage(targetUrl);
4725        }
4726        if (fNavigate) {
4727            if (shouldOpenInTopFrame(targetUrl))
4728                window.top.location.href = Nav.pageUrlValidation(targetUrl);
4729            else
4730                window.location.href = Nav.pageUrlValidation(targetUrl);
4731        }
4732    }
4733    function Nav_GoToLinkOrDialogNewWindow(elm) {
4734        if (elm.href == null)
4735            return;
4736        if (Boolean((Nav.ajaxNavigate.get_search()).match(RegExp("[?&]IsDlg=1"))))
4737            window.open(elm.href);
4738        else
4739            Nav_GoToLink(elm);
4740    }
4741    function Nav_GoToDiscussion(url) {
4742        var ch = url.indexOf("?") >= 0 ? "&" : "?";
4743        var srcUrl = Nav.getSource();
4744
4745        if (srcUrl != null && srcUrl != "")
4746            url += ch + "TopicsView=" + srcUrl;
4747        Nav.navigate(url);
4748    }
4749    function Nav_GetSource(defaultSource) {
4750        if (typeof GetSource2 == "function") {
4751            return URI_Encoding.encodeURIComponent(GetSource2(defaultSource, null));
4752        }
4753        var source = Nav.getUrlKeyValue("Source");
4754
4755        if (source == "") {
4756            if (defaultSource != null && defaultSource != "")
4757                source = defaultSource;
4758            else
4759                source = Nav.ajaxNavigate.get_href();
4760        }
4761        return URI_Encoding.encodeURIComponent(Nav.pageUrlValidation(source));
4762    }
4763}
4764var ajaxNavigate;
4765var STSNavigate;
4766var GetUrlKeyValue;
4767var STSPageUrlValidation;
4768var PageUrlValidation;
4769var AjaxNavigate$isMDSURL;
4770var isPortalTemplatePage;
4771var GoToHistoryLink;
4772var GetGotoLinkUrl;
4773var GoToLink;
4774var GoToLinkOrDialogNewWindow;
4775var GoToDiscussion;
4776var GetSource;
4777var RemoveMDSQueryParametersFromUrl;
4778var AjaxNavigate$_GetWindowLocationNoHash;
4779var AjaxNavigate$WantsNewTab;
4780var AjaxNavigate$parseHash;
4781var AjaxNavigate$_UrlFromHashBag;
4782var AjaxNavigate$_getAjaxLocationWindow;
4783var IsSTSPageUrlValid;
4784var AjaxNavigate$OnClickHook;
4785var AjaxNavigate$convertRegularURLtoMDSURL;
4786var AjaxNavigate$convertMDSURLtoRegularURL;
4787var ProfileCache;
4788
4789function ProfileCache_module_def() {
4790    ProfileCache.GetCachedProfile = ProfileCache_GetCachedProfile;
4791    function ProfileCache_GetCachedProfile() {
4792        var objProfile = null;
4793        var ls = BrowserStorage.local;
4794
4795        if (ls != null) {
4796            var strProfileData = ls.getItem(ProfileCache_UserProfileLocalStoreKey());
4797
4798            if (Boolean(strProfileData)) {
4799                objProfile = JSON.parse(strProfileData);
4800            }
4801        }
4802        return objProfile;
4803    }
4804    ProfileCache.UserProfileLocalStoreKey = ProfileCache_UserProfileLocalStoreKey;
4805    function ProfileCache_UserProfileLocalStoreKey() {
4806        var retVal = "UserProfileStorage";
4807
4808        if (window["_spPageContextInfo"] != null) {
4809            retVal += _spPageContextInfo.webServerRelativeUrl;
4810        }
4811        return retVal;
4812    }
4813}
4814var ListModule;
4815
4816function ListModule_module_def() {
4817    ListModule.BasePermissions = function() {
4818    };
4819    ListModule.BasePermissions.prototype = {
4820        ManageLists: undefined,
4821        OpenItems: undefined
4822    };
4823    ListModule.Context = List_ContextInfo;
4824    ListModule.Context.prototype = {
4825        AllowGridMode: undefined,
4826        BasePermissions: undefined,
4827        BaseViewID: undefined,
4828        CascadeDeleteWarningMessage: undefined,
4829        ContentTypesEnabled: undefined,
4830        CurrentSelectedItems: undefined,
4831        CurrentUserId: undefined,
4832        EnableMinorVersions: undefined,
4833        ExternalDataList: undefined,
4834        HasRelatedCascadeLists: undefined,
4835        HttpPath: undefined,
4836        HttpRoot: undefined,
4837        RealHttpRoot: undefined,
4838        NoScriptEnabled: undefined,
4839        LastSelectableRowIdx: undefined,
4840        LastSelectedItemIID: undefined,
4841        LastRowIndexSelected: und
4841efined,
4842        RowFocusTimerID: undefined,
4843        ListData: undefined,
4844        ListSchema: undefined,
4845        ModerationStatus: undefined,
4846        mountPointUrl: undefined,
4847        PortalUrl: undefined,
4848        RecycleBinEnabled: undefined,
4849        SelectAllCbx: undefined,
4850        SendToLocationName: undefined,
4851        SendToLocationUrl: undefined,
4852        StateInitDone: undefined,
4853        TableCbxFocusHandler: undefined,
4854        TableMouseoverHandler: undefined,
4855        TotalListItems: undefined,
4856        WorkflowsAssociated: undefined,
4857        clvp: undefined,
4858        ctxId: undefined,
4859        ctxType: undefined,
4860        dictSel: undefined,
4861        displayFormUrl: undefined,
4862        editFormUrl: undefined,
4863        imagesPath: undefined,
4864        inGridMode: undefined,
4865        inGridFullRender: undefined,
4866        isForceCheckout: undefined,
4867        isModerated: undefined,
4868        isPortalTemplate: undefined,
4869        isVersions: undefined,
4870        isWebEditorPreview: undefined,
4871        leavingGridMode: false,
4872        loadingAsyncData: false,
4873        listBaseType: undefined,
4874        listName: undefined,
4875        listTemplate: undefined,
4876        listUrlDir: undefined,
4877        newFormUrl: undefined,
4878        onRefreshFailed: undefined,
4879        overrideDeleteConfirmation: undefined,
4880        overrideFilterQstring: undefined,
4881        overrideScope: undefined,
4882        searchTerm: undefined,
4883        recursiveView: undefined,
4884        rootFolderForDisplay: undefined,
4885        serverUrl: undefined,
4886        verEnabled: undefined,
4887        view: undefined,
4888        queryString: undefined,
4889        IsClientRendering: undefined,
4890        wpq: undefined,
4891        rootFolder: undefined,
4892        hasRootFolder: undefined,
4893        IsAppWeb: undefined,
4894        NewWOPIDocumentEnabled: undefined,
4895        NewWOPIDocumentUrl: undefined,
4896        NewWOPIDocumentTypes: undefined,
4897        AllowCreateFolder: undefined,
4898        CanShareLinkForNewDocument: undefined,
4899        VisioDrawingCreationEnabled: undefined,
4900        noGroupCollapse: undefined,
4901        SiteTemplateId: undefined,
4902        RealSiteTemplateId: undefined,
4903        ExcludeFromOfflineClient: false,
4904        onItemSelectionChangedHandlers: undefined,
4905        bNoDelete: false,
4906        qcb: undefined
4907    };
4908    ListModule.Context.Type = {
4909        EditMenu: 0,
4910        ViewSelector: 1
4911    };
4912    function List_ContextInfo() {
4913        this.listBaseType = null;
4914        this.listTemplate = null;
4915        this.listName = null;
4916        this.view = null;
4917        this.listUrlDir = null;
4918        this.HttpPath = null;
4919        this.HttpRoot = null;
4920        this.serverUrl = null;
4921        this.imagesPath = null;
4922        this.PortalUrl = null;
4923        this.RecycleBinEnabled = null;
4924        this.enteringGridMode = false;
4925        this.inGridMode = false;
4926        this.isWebEditorPreview = null;
4927        this.rootFolderForDisplay = null;
4928        this.isPortalTemplate = null;
4929        this.isModerated = false;
4930        this.recursiveView = false;
4931        this.displayFormUrl = null;
4932        this.editFormUrl = null;
4933        this.newFormUrl = null;
4934        this.ctxId = null;
4935        this.CurrentUserId = null;
4936        this.isForceCheckout = false;
4937        this.EnableMinorVersions = false;
4938        this.ModerationStatus = 0;
4939        this.verEnabled = 0;
4940        this.isVersions = 0;
4941        this.WorkflowsAssociated = false;
4942        this.ExternalDataList = false;
4943        this.HasRelatedCascadeLists = 0;
4944        this.CascadeDeleteWarningMessage = null;
4945        this.ContentTypesEnabled = false;
4946        this.SendToLocationName = "";
4947        this.SendToLocationUrl = "";
4948        this.StateInitDone = false;
4949        this.TotalListItems = null;
4950        this.CurrentSelectedItems = null;
4951        this.LastSelectableRowIdx = null;
4952        this.SelectAllCbx = null;
4953        this.TableCbxFocusHandler = null;
4954        this.TableMouseoverHandler = null;
4955        this.onItemSelectionChangedHandlers = [];
4956    }
4957    ListModule.Settings = {
4958        SupportsCallouts: false,
4959        SupportsDragDrop: false,
4960        SupportsRibbon: false,
4961        SupportsQCB: false,
4962        SupportsUpload: false,
4963        SupportsInplHash: false,
4964        SupportsAnimation: false,
4965        SupportsGrouping: false,
4966        SupportsNonCSR: false,
4967        SupportsInPlaceEdit: false,
4968        SupportsItemDelete: false,
4969        SupportsCheckout: false,
4970        SupportsPopup: false,
4971        SupportsErrorDlg: false,
4972        SupportsFileAttach: false,
4973        SupportsCopies: false,
4974        SupportsModeration: false,
4975        SupportsMQuery: false,
4976        SupportsRest: false,
4977        SupportsDatapipes: false,
4978        SupportsAddToOneDrive: false,
4979        SupportsAddToOneDriveQCB: false,
4980        SupportsTaskListEditMode: false,
4981        SupportsPeopleHoverCard: false,
4982        SupportsMaintainUserChrome: false,
4983        SupportsInfiniteScroll: false,
4984        SupportsDragDropAttract: false,
4985        SupportsDragDropAttractB: false,
4986        SupportsDoclibAccessibility: false,
4987        SupportsDoclibQCB: false,
4988        SupportsOldDesktopMenus: false,
4989        SupportsPolicyTips: false,
4990        SupportsRightClickECB: false,
4991        SupportsShortcutLink: false,
4992        SupportsFileExtensionDefinition: false,
4993        SupportsFileExtensionControls: false,
4994        SupportsFileHandlerForAllNonOfficeFiles: false,
4995        SupportsFileExtensionDataPipe: false,
4996        SupportsFileHandlerAddInPicker: false,
4997        SupportsFileHandlerFileCreation: false
4998    };
4999}
5000var BasePermissions;
5001var ContextInfo;
5002var CTXTYPE_EDITMENU;
5003var CTXTYPE_VIEWSELECTOR;
5004var List_Util;
5005
5006function List_Util_module_def() {
5007    ListModule.Util = {};
5008    ListModule.Util.createViewEditUrl = List_createViewEditUrl;
5009    ListModule.Util.createItemPropertiesTitleUrl = List_CreateItemPropertiesTitleUrl;
5010    ListModule.Util.clearSelectedItemsDict = List_ClearSelectedItemsDict;
5011    ListModule.Util.ctxInitItemState = List_ctxInitItemState;
5012    ListModule.Util.getAttributeFromItemTable = List_GetAttributeFromItemTable;
5013    ListModule.Util.getSelectedItemsDict = List_GetSelectedItemsDict;
5014    ListModule.Util.removeOnlyPagingArgs = List_RemoveOnlyPagingArgs;
5015    ListModule.Util.removePagingArgs = List_RemovePagingArgs;
5016    ListModule.Util.showAttachmentRows = List_ShowAttachmentRows;
5017    ListModule.Util.canUploadFile = List_CanUploadFile;
5018    ListModule.Util.addWPQtoId = List_addWPQtoId;
5019    ListModule.Util.isDefinedAndNotNullOrEmpty = List_IsDefinedAndNotNullOrEmpty;
5020    ListModule.Util.hasEditPermission = List_HasEditPermission;
5021    ListModule.Util.makeMountedFolderQueryStrParams = List_MakeMountedFolderQueryStrParams;
5022    ListModule.Util.tryAppendMountedFolderQueryStrParams = List_TryAppendMountedFolderQueryStrParams;
5023    ListModule.Util.getHostUrl = List_GetHostUrl;
5024    ListModule.Util.reconcileQstringFilters = List_ReconcileQstringFilters;
5025    ListModule.Util.Qstring = List_QstringStruct;
5026    function List_RemoveOnlyPagingArgs(strUrl) {
5027        var rePagedFlag = /&*Paged=TRUE/gi;
5028
5029        strUrl = strUrl.replace(rePagedFlag, "");
5030        var rePagedPrevFlag = /&*PagedPrev=TRUE/gi;
5031
5032        strUrl = strUrl.replace(rePagedPrevFlag, "");
5033        var rePagedArgs = /&p_[^&]*/gi;
5034
5035        strUrl = strUrl.replace(rePagedArgs, "");
5036        var rePagedRow = /&PageFirstRow=[^&]*/gi;
5037
5038        strUrl = strUrl.replace(rePagedRow, "");
5039        var rePagedLastRow = /&PageLastRow=[^&]*/gi;
5040
5041        strUrl = strUrl.replace(rePagedLastRow, "");
5042        return strUrl;
5043    }
5044    function List_RemovePagingArgs(strUrl) {
5045        strUrl = List_RemoveOnlyPagingArgs(strUrl);
5046        var reFilter1 = /\?Filter=1&*/gi;
5047
5048        strUrl = strUrl.replace(reFilter1, "?");
5049        var reFilter2 = /&Filter=1/gi;
5050
5051        strUrl = strUrl.replace(reFilter2, "");
5052        var reOrphanedQMark = /\?$/;
5053
5054        strUrl = strUrl.replace(reOrphanedQMark, "");
5055        return strUrl;
5056    }
5057    function List_GetAttributeFromItemTable(itemTableParam, strAttributeName, strAttributeOldName) {
5058        var attrValue = itemTableParam != null ? itemTableParam.getAttribute(strAttributeName) : null;
5059
5060        if (attrValue == null && itemTableParam != null && strAttributeOldName != null)
5061            attrValue = itemTableParam.getAttribute(strAttributeOldName);
5062        return attrValue;
5063    }
5064    function List_ctxInitItemState(ctxCur) {
5065        ctxCur.TotalListItems = 0;
5066        ctxCur.CurrentSelectedItems = 0;
5067        ctxCur.LastSelectableRowIdx = 0;
5068        ctxCur.StateInitDone = true;
5069    }
5070    function List_ClearSelectedItemsDict(context) {
5071        if (context != null)
5072            context.dictSel = [];
5073    }
5074    function List_ShowAttachmentRows() {
5075        var elm = document.getElementById('idAttachmentsTable');
5076        var elmAttachmentRow = document.getElementById('idAttachmentsRow');
5077
5078        if (elmAttachmentRow != null) {
5079            var uri = new URI(Nav.ajaxNavigate.get_href());
5080            var OnlyIncludeOneField = uri.getQueryParameter('OnlyIncludeOneField');
5081
5082            if (elm == null || elm.rows.length == 0 || Boolean(OnlyIncludeOneField))
5083                elmAttachmentRow.style.display = 'none';
5084            else
5085                elmAttachmentRow.style.display = 'table-row';
5086        }
5087    }
5088    function List_GetSelectedItemsDict(ctxParam) {
5089        if (ctxParam != null && ctxParam.dictSel != null) {
5090            return ctxParam.dictSel;
5091        }
5092        return null;
5093    }
5094    function List_createViewEditUrl(renderCtx, listItem, useEditFormUrl, appendSource) {
5095        var titleUrl = [];
5096
5097        if (useEditFormUrl)
5098            titleUrl.push(renderCtx.editFormUrl);
5099        else
5100            titleUrl.push(renderCtx.displayFormUrl);
5101        titleUrl.push("&ID=");
5102        titleUrl.push(listItem.ID);
5103        titleUrl.push("&ContentTypeID=");
5104        titleUrl.push(listItem.ContentTypeId);
5105        if (appendSource) {
5106            titleUrl.push("&Source=");
5107            titleUrl.push(Nav.getSource());
5108        }
5109        return titleUrl.join('');
5110    }
5111    function List_CreateItemPropertiesTitleUrl(renderCtx, listItem) {
5112        if (renderCtx.inGridMode) {
5113            return List_createViewEditUrl(renderCtx, listItem, true, false);
5114        }
5115        return List_createViewEditUrl(renderCtx, listItem, false, false);
5116    }
5117    function List_CanUploadFile(renderCtx) {
5118        if (typeof SupportsFileUpload == "function" && SupportsFileUpload()) {
5119            var listSchema = renderCtx.ListSchema;
5120
5121            return Boolean(listSchema) && Boolean(listSchema.IsDocLib) && !BrowserDetection.userAgent.ipad && !BrowserDetection.userAgent.windowsphone;
5122        }
5123        else {
5124            return false;
5125        }
5126    }
5127    function List_addWPQtoId(id, wpq) {
5128        if (Boolean(id) && Boolean(wpq)) {
5129            if (id.lastIndexOf('-') == id.length - 1)
5130                return id + wpq;
5131            else
5132                return id + '-' + wpq;
5133        }
5134        else
5135            return id;
5136    }
5137    function List_IsDefinedAndNotNullOrEmpty(obj) {
5138        return typeof obj !== 'undefined' && obj !== null && obj !== '';
5139    }
5140    function List_HasEditPermission(listItem) {
5141        var permMask = String(listItem.PermMask);
5142
5143        return (parseInt("0x" + permMask.substring(permMask.length - 1)) & 0x4) != 0;
5144    }
5145    function List_GetMountedFolderQueryStrKeyValues(includeRemoteFolderId, includeMPPrefix) {
5146        var uri = new URI(Nav.ajaxNavigate.get_href());
5147        var remoteSiteId = uri.getQueryParameter('RemoteSiteId');
5148        var ret = [];
5149
5150        if (Boolean(remoteSiteId)) {
5151            var remoteWebId = uri.getQueryParameter('RemoteWebId');
5152
5153            if (Boolean(remoteWebId)) {
5154                var remoteFolderId = null;
5155
5156                if (includeRemoteFolderId) {
5157                    remoteFolderId = uri.getQueryParameter('RemoteFolderId');
5158                }
5159                if (StringUtil.IsGuid(remoteSiteId) && StringUtil.IsGuid(remoteWebId) && (!includeRemoteFolderId || Boolean(remoteFolderId) && StringUtil.IsGuid(remoteFolderId))) {
5160                    ret.push({
5161                        k: "RemoteSiteId",
5162                        v: remoteSiteId
5163                    });
5164                    ret.push({
5165                        k: "RemoteWebId",
5166                        v: remoteWebId
5167                    });
5168                    if (includeRemoteFolderId) {
5169                        ret.push({
5170                            k: "RemoteFolderId",
5171                            v: remoteFolderId
5172                        });
5173                    }
5174                }
5175            }
5176        }
5177        else {
5178            var groupSiteUrl = uri.getQueryParameter('GroupSiteUrl');
5179
5180            if (Boolean(groupSiteUrl)) {
5181                var groupId = uri.getQueryParameter('GroupId');
5182
5183                if (Boolean(groupId) && StringUtil.IsGuid(groupId)) {
5184                    ret.push({
5185                        k: "GroupSiteUrl",
5186                        v: groupSiteUrl
5187                    });
5188                    ret.push({
5189                        k: "GroupId",
5190                        v: groupId
5191                    });
5192                }
5193            }
5194        }
5195        if (ret.length > 0) {
5196            if (includeMPPrefix) {
5197                var mpPrefix = uri.getQueryParameter('MPPrefix');
5198
5199                if (Boolean(mpPrefix)) {
5200                    ret.push({
5201                        k: "MPPrefix",
5202                        v: mpPrefix
5203                    });
5204                    ret.push("&MPPrefix=");
5205                    ret.push(URI_Encoding.encodeURIComponent(mpPrefix));
5206                }
5207            }
5208            return ret;
5209        }
5210        return null;
5211    }
5212    function List_MakeMountedFolderQueryStrParams(includeRemoteFolderId, includeMPPrefix) {
5213        var keyValues = List_GetMountedFolderQueryStrKeyValues(includeRemoteFolderId, includeMPPrefix);
5214
5215        if (keyValues == null) {
5216            return null;
5217        }
5218        var ret = [];
5219
5220        for (var i = 0; i < keyValues.length; i++) {
5221            ret.push("&");
5222            ret.push(keyValues[i].k);
5223            ret.push("=");
5224            ret.push(URI_Encoding.encodeURIComponent(String(keyValues[i].v)));
5225        }
5226        return ret.join("");
5227    }
5228    function List_TryAppendMountedFolderQueryStrParams(url, includeRemoteFolderId, includeMPPrefix) {
5229        var keyValues = List_GetMountedFolderQueryStrKeyValues(includeRemoteFolderId, includeMPPrefix);
5230
5231        if (keyValues == null) {
5232            return null;
5233        }
5234        var uri = new URI(url);
5235
5236        for (var i = 0; i < keyValues.length; i++) {
5237            uri.setQueryParameter(String(keyValues[i].k), String(keyValues[i].v));
5238        }
5239        return uri.getString();
5240    }
5241    function List_GetHostUrl(httpRoot) {
5242        var hostUrl = httpRoot;
5243
5244        if (hostUrl.lastIndexOf('/') > hostUrl.indexOf('//') + 1) {
5245            hostUrl = hostUrl.substring(0, hostUrl.indexOf('/', hostUrl.indexOf('//') + 2));
5246        }
5247        return hostUrl;
5248    }
5249    function List_QstringStruct(strQuery) {
5250        if (strQuery == null) {
5251            strQuery = "";
5252        }
5253        if (strQuery.indexOf("?") == 0) {
5254            strQuery = strQuery.substring(1);
5255        }
5256        this.nonFilterParams = {};
5257        this.filterParams = {};
5258        var params = strQuery.split("&");
5259        var i;
5260
5261        for (i = 0; i < params.length; i++) {
5262            var param = params[i];
5263            var keyval = param.split("=");
5264
5265            if (keyval.length == 2) {
5266                if (keyval[0].search("^Filter") != -1) {
5267                    var fieldNumber = keyval[0].match(new RegExp("[0-9]*$"));
5268                    var filter;
5269
5270                    if (typeof this.filterParams[fieldNumber] != "undefined") {
5271                        filter = this.filterParams[fieldNumber];
5272                    }
5273                    else {
5274                        filter = new Object();
5275                        this.filterParams[fieldNumber] = filter;
5276                    }
5277                    var fieldName = keyval[0].match(new RegExp("^Filter[^0-9]*"));
5278
5279                    filter[fieldName] = keyval[1];
5280                }
5281                else {
5282                    this.nonFilterParams[keyval[0]] = keyval[1];
5283                }
5284            }
5285        }
5286    }
5287    List_QstringStruct.prototype.filterParams = {};
5288    List_QstringStruct.prototype.nonFilterParams = {};
5289    List_QstringStruct.prototype.toArray = List_QstringStructToArray;
5290    function List_QstringStructToArray() {
5291        var output = [];
5292        var key;
5293        var keyValuePair;
5294        var filterIdx = 1;
5295        var filterParams = this.filterParams;
5296        var filterParams_length = typeof filterParams.length == "number" ? filterParams.length : 0;
5297
5298        for (key in this.filterParams) {
5299            var filter = this.filterParams[key];
5300
5301            for (key in filter) {
5302                keyValuePair = [];
5303                keyValuePair.push(key);
5304                keyValuePair.push(filterIdx);
5305                keyValuePair.push("=");
5306                keyValuePair.push(filter[key]);
5307                output.push(keyValuePair.join(""));
5308            }
5309            filterIdx++;
5310        }
5311        for (key in this.nonFilterParams) {
5312            keyValuePair = [];
5313            keyValuePair.push(key);
5314            keyValuePair.push("=");
5315            keyValuePair.push(this.nonFilterParams[key]);
5316            output.push(keyValuePair.join(""));
5317        }
5318        return output;
5319    }
5320    List_QstringStruct.prototype.toString = List_QstringStructToString;
5321    function List_QstringStructToString() {
5322        var output = this.toArray();
5323
5324        return "?" + output.join("&");
5325    }
5326    function Diff() {
5327    }
5328    Diff.prototype = {
5329        left: [],
5330        right: []
5331    };
5332    List_QstringStruct.Diff = function(strLeft, strRight) {
5333        var rgLeft = (new List_QstringStruct(strLeft)).toArray();
5334        var rgRight = (new List_QstringStruct(strRight)).toArray();
5335        var temp = {};
5336        var ret = new Diff;
5337        var i;
5338
5339        for (i = 0; i < rgLeft.length; i++) {
5340            temp[rgLeft[i]] |= 1;
5341        }
5342        for (i = 0; i < rgRight.length; i++) {
5343            temp[rgRight[i]] |= 2;
5344        }
5345        for (var key in temp) {
5346            if (temp[key] == 1) {
5347                ret.left.push(key);
5348            }
5349            else if (temp[key] == 2) {
5350                ret.right.push(key);
5351            }
5352        }
5353        return ret;
5354    };
5355    function List_ReconcileQstringFilters(strUrl1, strUrl2) {
5356        var qUrls = [];
5357
5358        qUrls.push(new List_QstringStruct(strUrl1));
5359        qUrls.push(new List_QstringStruct(strUrl2));
5360        var output = [];
5361        var i, j;
5362        var key;
5363        var keyValuePair;
5364
5365        for (i = 0; i < qUrls.length; i++) {
5366            for (key in qUrls[i].nonFilterParams) {
5367                if (i == 0 || typeof qUrls[0].nonFilterParams[key] == 'undefined' && i == 1) {
5368                    keyValuePair = [];
5369                    keyValuePair.push(key);
5370                    keyValuePair.push("=");
5371                    keyValuePair.push(qUrls[i].nonFilterParams[key]);
5372                    output.push(keyValuePair.join(""));
5373                }
5374            }
5375        }
5376        var filterIdx = 1;
5377        var trackEachFilterFieldName = new Object();
5378
5379        for (i = 0; i < qUrls.length; i++) {
5380            for (j in qUrls[i].filterParams) {
5381                var filter = qUrls[i].filterParams[j];
5382                var filter_FilterField = typeof filter.FilterField == "string" ? filter.FilterField : null;
5383
5384                if (filter_FilterField == null)
5385                    filter_FilterField = typeof filter.FilterFields == "string" ? filter.FilterFields : null;
5386                if (filter_FilterField != null && typeof trackEachFilterFieldName[filter_FilterField] == 'undefined') {
5387                    for (key in filter) {
5388                        keyValuePair = [];
5389                        keyValuePair.push(key);
5390                        keyValuePair.push(filterIdx);
5391                        keyValuePair.push("=");
5392                        keyValuePair.push(filter[key]);
5393                        output.push(keyValuePair.join(""));
5394                    }
5395                    filterIdx++;
5396                    trackEachFilterFieldName[filter.FilterField] = filter;
5397                }
5398            }
5399        }
5400        return output.join("&");
5401    }
5402}
5403var ctxInitItemState;
5404var ClearSelectedItemsDict;
5405var CreateItemPropertiesTitleUrl;
5406var GetAttributeFromItemTable;
5407var GetSelectedItemsDict;
5408var RemoveOnlyPagingArgs;
5409var RemovePagingArgs;
5410var ShowAttachmentRows;
5411var CanUploadFile;
5412var addWPQtoId;
5413var isDefinedAndNotNullOrEmpty;
5414var HasEditPermission;
5415var getHostUrl;
5416var ReconcileQstringFilters;
5417var QstringStruct;
5418var SuiteNavCommon;
5419
5420function SuiteNavCommon_module_def() {
5421    ;
5422    ;
5423    ;
5424    var c_strUndefined = "undefined";
5425    var key_Date = "SPSuiteLinksDate";
5426    var key_Language = "SPSuiteLinksLanguage";
5427    var key_LinksJson = "SPSuiteLinksJson";
5428    var key_MySiteClientTag = "SPSuiteLinksMySiteClientTag";
5429    var key_MySiteLinks = "SPMySiteLinks";
5430    var key_SuiteNavHeight = "SPSuiteNavHeight";
5431    var key_UserKey = "SPSuiteLinksUserKey";
5432    var key_WorkloadsProvisioning = "SPSuiteLinksWorkProv";
5433    var key_LinksCached = "SPSuiteLinksCached";
5434
5435    function GetPageContextInfoValueOrNull(infoKey) {
5436        var retVal = null;
5437        var pci;
5438
5439        if (typeof _spPageContextInfo !== c_strUndefined && Boolean(pci = _spPageContextInfo) && typeof pci[infoKey] !== c_strUndefined) {
5440            retVal = String(pci[infoKey]);
5441        }
5442        return retVal;
5443    }
5444    function GetCurrentSiteClientTag() {
5445        var numSiteClientTag = parseInt(GetPageContextInfoValueOrNull("siteClientTag"));
5446
5447        return numSiteClientTag;
5448    }
5449    if (typeof GetCurrentUserKey == c_strUndefined) {
5450        GetCurrentUserKey = function() {
5451            return GetPageContextInfoValueOrNull("systemUserKey");
5452        };
5453    }
5454    if (typeof GetCurrentUICultureOrNone == c_strUndefined) {
5455        GetCurrentUICultureOrNone = function() {
5456            var currentLanguage = GetPageContextInfoValueOrNull("currentUICultureName");
5457
5458            if (!Boolean(currentLanguage))
5459                currentLanguage = "none";
5460            return currentLanguage;
5461        };
5462    }
5463    var c_mySitePersonalWebTemplate = 21;
5464
5465    function OnOwnMySite() {
5466        var isOwnMySite = false;
5467        var isPersonalSiteTemplate = parseInt(GetPageContextInfoValueOrNull("webTemplate")) == c_mySitePersonalWebTemplate;
5468
5469        if (isPersonalSiteTemplate) {
5470            var strMySiteLinks;
5471            var userProfile = ProfileCache.GetCachedProfile();
5472
5473            if (userProfile != null) {
5474                isOwnMySite = Boolean(userProfile.isSelf);
5475            }
5476            else if (Boolean(strMySiteLinks = BrowserStorage.local.getItem(key_MySiteLinks))) {
5477                try {
5478                    var objMySiteLinks = JSON.parse(strMySiteLinks);
5479                    var currentWebUrl = GetPageContextInfoValueOrNull("webAbsoluteUrl");
5480                    var docsUrl;
5481
5482                    isOwnMySite = Boolean(currentWebUrl) && objMySiteLinks != null && Boolean(docsUrl = objMySiteLinks.Docs) && docsUrl.indexOf(currentWebUrl) == 0;
5483                }
5484                catch (exParseMySiteLinks) { }
5485            }
5486        }
5487        return isOwnMySite;
5488    }
5489    function GetCachedJsonIfValid() {
5490        var linksJson = null;
5491        var ls = BrowserStorage.local;
5492
5493        if (GetCurrentUserKey() == ls.getItem(key_UserKey) && GetCurrentUICultureOrNone() == ls.getItem(key_L
5493anguage) && (!OnOwnMySite() || GetCurrentSiteClientTag() == parseInt(ls.getItem(key_MySiteClientTag)))) {
5494            var cachedLinksJson = ls.getItem(key_LinksJson);
5495
5496            if (typeof cachedLinksJson == 'string') {
5497                linksJson = cachedLinksJson;
5498            }
5499        }
5500        return linksJson;
5501    }
5502    if (typeof ExtractSuiteMetadata == c_strUndefined) {
5503        ExtractSuiteMetadata = function(navBarDataJson) {
5504            var suiteData = navBarDataJson;
5505
5506            try {
5507                if (typeof suiteData == "string") {
5508                    suiteData = JSON.parse(navBarDataJson);
5509                }
5510            }
5511            catch (ex) {
5512                suiteData = null;
5513            }
5514            return suiteData;
5515        };
5516    }
5517    if (typeof ExtractSuiteProperty == c_strUndefined) {
5518        ExtractSuiteProperty = function(navBarDataJson, jsonPropName) {
5519            try {
5520                var suiteData = JSON.parse(navBarDataJson);
5521
5522                if (suiteData != null) {
5523                    return suiteData[jsonPropName];
5524                }
5525            }
5526            catch (ex) { }
5527            return undefined;
5528        };
5529    }
5530    if (typeof ExtractSuiteVersion == c_strUndefined) {
5531        ExtractSuiteVersion = function(navBarDataJson) {
5532            var suiteVersion = ExtractSuiteProperty(navBarDataJson, "SPSuiteVersion");
5533
5534            if (typeof suiteVersion == "number") {
5535                return suiteVersion;
5536            }
5537            return -1;
5538        };
5539    }
5540    if (typeof ExtractIsMobile == c_strUndefined) {
5541        ExtractIsMobile = function(navBarDataJson) {
5542            var isMobile = ExtractSuiteProperty(navBarDataJson, "SPIsMobile");
5543
5544            if (typeof isMobile == "boolean") {
5545                return isMobile;
5546            }
5547            return false;
5548        };
5549    }
5550    if (typeof ExtractSuiteLinks == c_strUndefined) {
5551        ExtractSuiteLinks = function(navBarDataJson) {
5552            var suiteVersion = ExtractSuiteVersion(navBarDataJson);
5553
5554            if (suiteVersion != -1) {
5555                var navBarData = ExtractSuiteProperty(navBarDataJson, "NavBarData");
5556
5557                return typeof navBarData == "string" ? String(navBarData) : JSON.stringify(navBarData);
5558            }
5559            return navBarDataJson;
5560        };
5561    }
5562    if (typeof ExtractSuiteNavBarData == c_strUndefined) {
5563        ExtractSuiteNavBarData = function(suiteDataObject) {
5564            if (suiteDataObject != null) {
5565                var suiteMetadata = ExtractSuiteMetadata(suiteDataObject);
5566
5567                return suiteMetadata.NavBarData;
5568            }
5569            return null;
5570        };
5571    }
5572    function ExtractNavBarDataFromObject(suiteNavData) {
5573        var navBarData = null;
5574
5575        if (suiteNavData != null) {
5576            navBarData = suiteNavData.NavBarData != null ? suiteNavData.NavBarData : suiteNavData;
5577        }
5578        return navBarData;
5579    }
5580    if (typeof GetSuiteLinks == c_strUndefined) {
5581        GetSuiteLinks = function(callBackToRetrieveData, callBackToProcessData, suiteVersion, isMobile, forceRetrieveData) {
5582            if (typeof suiteVersion != "number")
5583                suiteVersion = 1;
5584            var bIncludeMetadata = suiteVersion > 1;
5585            var linksCacheKey = null;
5586            var linksJson = !forceRetrieveData ? GetCachedJsonIfValid() : null;
5587            var linksJsonIsStale = false;
5588
5589            if (linksJson != null) {
5590                var linksDate = Date.parse(String(BrowserStorage.local.getItem(key_Date)));
5591                var msUntilDataStale = 24 * 60 * 60 * 1000;
5592                var numProvisioning = Number(BrowserStorage.local.getItem(key_WorkloadsProvisioning));
5593
5594                if (numProvisioning > 0) {
5595                    msUntilDataStale = 10 * 1000;
5596                }
5597                linksJsonIsStale = !(linksDate > 0) || (new Date()).getTime() - linksDate > msUntilDataStale;
5598                if (suiteVersion > 1 && typeof BrowserStorage.session.getItem(key_LinksCached) != 'string') {
5599                    linksJsonIsStale = true;
5600                }
5601            }
5602            if (typeof SP !== c_strUndefined && typeof SP._yam !== c_strUndefined) {
5603                if (!linksJsonIsStale && Boolean(linksJson) && linksJson.indexOf(Boolean(SP._yam) ? "ShellNewsfeed" : "ShellYammer") !== -1) {
5604                    linksJsonIsStale = true;
5605                }
5606            }
5607            if (linksJson == null) {
5608                if (callBackToRetrieveData != null) {
5609                    callBackToRetrieveData(function(data) {
5610                        CacheSuiteLinks(data);
5611                        if (callBackToProcessData != null)
5612                            callBackToProcessData(bIncludeMetadata ? data : ExtractSuiteLinks(data));
5613                    });
5614                }
5615                else {
5616                    if (callBackToProcessData != null)
5617                        callBackToProcessData(null);
5618                }
5619                return;
5620            }
5621            if (suiteVersion != ExtractSuiteVersion(linksJson) || Boolean(isMobile) != ExtractIsMobile(linksJson)) {
5622                if (Boolean(callBackToRetrieveData) && (typeof CacheSuiteLinks == c_strUndefined || typeof CacheSuiteLinks._reloadingData != "boolean" || Boolean(CacheSuiteLinks._reloadingData))) {
5623                    CacheSuiteLinks._reloadingData = true;
5624                    ClearSuiteLinksCache();
5625                    GetSuiteLinks(callBackToRetrieveData, callBackToProcessData, suiteVersion, isMobile);
5626                    return;
5627                }
5628            }
5629            if (linksJsonIsStale) {
5630                if (callBackToRetrieveData != null) {
5631                    callBackToRetrieveData(function(data) {
5632                        if (CacheSuiteLinks(data)) {
5633                            linksJson = data;
5634                        }
5635                        if (callBackToProcessData != null && suiteVersion > 1)
5636                            callBackToProcessData(bIncludeMetadata ? data : ExtractSuiteLinks(data));
5637                    });
5638                }
5639            }
5640            if (callBackToProcessData != null)
5641                callBackToProcessData(bIncludeMetadata ? linksJson : ExtractSuiteLinks(l
5641inksJson));
5642        };
5643    }
5644    function CountWorkloadsProvisioning(linksData) {
5645        var numProvisioning = 0;
5646        var navBarData = ExtractNavBarDataFromObject(linksData);
5647
5648        if (navBarData == null) {
5649            return numProvisioning;
5650        }
5651        var workloadLinks = navBarData.WorkloadLinks;
5652        var numWorkloadLinks = workloadLinks != null ? workloadLinks.length : 0;
5653
5654        for (var iLink = 0; iLink < numWorkloadLinks; iLink++) {
5655            var wLink = workloadLinks[iLink];
5656
5657            if (wLink != null && wLink.Url == null)
5658                numProvisioning++;
5659        }
5660        return numProvisioning;
5661    }
5662    if (typeof CacheSuiteLinks == c_strUndefined) {
5663        CacheSuiteLinks = function(linksJson) {
5664            var numWorkloadsProvisioning = 0;
5665
5666            CacheSuiteLinks._reloadingData = false;
5667            try {
5668                var linksData = JSON.parse(linksJson);
5669
5670                if (linksData != null && linksData.NavBarData != null && linksData.NavBarData.Dimensions != null) {
5671                    var topHeight = Number(linksData.NavBarData.Dimensions.Top);
5672
5673                    if (topHeight > 0)
5674                        BrowserStorage.local.setItem(key_SuiteNavHeight, String(topHeight) + "px");
5675                }
5676                if (linksData != null && linksData.DoNotCache === true) {
5677                    return false;
5678                }
5679                numWorkloadsProvisioning = CountWorkloadsProvisioning(linksData);
5680            }
5681            catch (ex) {
5682                return false;
5683            }
5684            var currentLanguage = GetCurrentUICultureOrNone();
5685            var ls = BrowserStorage.local;
5686
5687            ls.setItem(key_LinksJson, linksJson);
5688            ls.setItem(key_Language, currentLanguage);
5689            ls.setItem(key_Date, new Date());
5690            ls.setItem(key_UserKey, GetCurrentUserKey());
5691            ls.setItem(key_WorkloadsProvisioning, numWorkloadsProvisioning);
5692            if (numWorkloadsProvisioning < 1) {
5693                ls.removeItem(key_WorkloadsProvisioning);
5694            }
5695            BrowserStorage.session.setItem(key_LinksCached, true);
5696            if (OnOwnMySite()) {
5697                ls.setItem(key_MySiteClientTag, GetCurrentSiteClientTag());
5698            }
5699            return true;
5700        };
5701    }
5702    if (typeof ClearSuiteLinksCache == c_strUndefined) {
5703        ClearSuiteLinksCache = function(bPreserveMySiteLinks) {
5704            var lsKeys = [key_LinksJson, key_Language, key_Date, key_UserKey, key_MySiteClientTag, key_SuiteNavHeight];
5705
5706            if (!bPreserveMySiteLinks)
5707                lsKeys.push(key_MySiteLinks);
5708            for (var i = 0; i < lsKeys.length; i++) {
5709                BrowserStorage.local.removeItem(lsKeys[i]);
5710            }
5711            BrowserStorage.session.removeItem(key_LinksCached);
5712        };
5713    }
5714    SuiteNavCommon.GetCurrentUserKey = GetCurrentUserKey;
5715    SuiteNavCommon.GetCurrentUICultureOrNone = GetCurrentUICultureOrNone;
5716    SuiteNavCommon.ExtractSuiteMetadata = ExtractSuiteMetadata;
5717    SuiteNavCommon.ExtractSuiteProperty = ExtractSuiteProperty;
5718    SuiteNavCommon.ExtractSuiteVersion = ExtractSuiteVersion;
5719    SuiteNavCommon.ExtractIsMobile = ExtractIsMobile;
5720    SuiteNavCommon.ExtractSuiteLinks = ExtractSuiteLinks;
5721    SuiteNavCommon.ExtractSuiteNavBarData = ExtractSuiteNavBarData;
5722    SuiteNavCommon.GetSuiteLinks = GetSuiteLinks;
5723    SuiteNavCommon.CacheSuiteLinks = CacheSuiteLinks;
5724    SuiteNavCommon.ClearSuiteLinksCache = ClearSuiteLinksCache;
5725}
5726var OnePageUtil;
5727
5728function OnePageUtil_module_def() {
5729    OnePageUtil.overrideAddEventListener = function OnePageUtil_overrideAddEventListener(eventTarget) {
5730        if (typeof eventTarget.addEventListener != 'undefined' && !eventTarget.onePageOverrideAddEventListenerDone) {
5731            if (!Boolean(eventTarget.eventListenerStore)) {
5732                eventTarget.eventListenerStore = {};
5733            }
5734            var store = eventTarget.eventListenerStore;
5735
5736            eventTarget.addEventListenerBase = eventTarget.addEventListener;
5737            eventTarget.addEventListener = function(type, listener, useCapture) {
5738                eventTarget.addEventListenerBase.apply(this, arguments);
5739                if (!Boolean(store[type])) {
5740                    store[type] = [];
5741                }
5742                var _eventList = store[type];
5743
5744                for (var index = 0; index != _eventList.length; index++) {
5745                    if (_eventList[index] === listener) {
5746                        return;
5747                    }
5748                }
5749                _eventList.push(listener);
5750            };
5751            eventTarget.onePageOverrideAddEventListenerDone = true;
5752        }
5753    };
5754    OnePageUtil.overrideRemoveEventListener = function OnePageUtil_overrideRemoveEventListener(eventTarget) {
5755        if (typeof eventTarget.removeEventListener != 'undefined' && !eventTarget.onePageOverrideRemoveEventListenerDone) {
5756            if (!Boolean(eventTarget.eventListenerStore)) {
5757                eventTarget.eventListenerStore = {};
5758            }
5759            var store = eventTarget.eventListenerStore;
5760            var _eventList = [];
5761
5762            eventTarget.removeEventListenerBase = eventTarget.removeEventListener;
5763            eventTarget.removeEventListener = function(type, handler, useCapture) {
5764                if (handler instanceof Function) {
5765                    eventTarget.removeEventListenerBase.apply(this, arguments);
5766                }
5767                if (Boolean(type) && Boolean(store[type])) {
5768                    _eventList = store[type];
5769                    for (var index = 0; index < _eventList.length; index++) {
5770                        var _handler = _eventList[index];
5771
5772                        if (!Boolean(handler)) {
5773                            eventTarget.removeEventListenerBase(type, _handler);
5774                        }
5775                        else if (_handler === handler) {
5776                            _eventList.splice(index, 1);
5777                            break;
5778                        }
5779                    }
5780                    if (_eventList.length == 0 || !Boolean(handler)) {
5781                        delete store[type];
5782                    }
5783                }
5784                else if (!Boolean(type)) {
5785                    for (var etype in store) {
5786                        _eventList = store[etype];
5787                        for (var idx = 0; idx < _eventList.length; idx++) {
5788                            eventTarget.removeEventListenerBase(etype, _eventList[idx]);
5789                        }
5790                        delete store[etype];
5791                    }
5792                }
5793            };
5794            eventTarget.onePageOverrideRemoveEventListenerDone = true;
5795        }
5796    };
5797    OnePageUtil.overrideEventListenerFunctions = function OnePageUtil_overrideEventListenerFunctions(eventTarget) {
5798        OnePageUtil.overrideAddEventListener(eventTarget);
5799        OnePageUtil.overrideRemoveEventListener(eventTarget);
5800    };
5801    OnePageUtil.undoOverrideEventListenerFunctions = function OnePageUtil_undoOverrideEventListenerFunctions(eventTarget) {
5802        eventTarget.addEventListener = eventTarget.addEventListenerBase;
5803        delete eventTarget.addEventListenerBase;
5804        eventTarget.removeEventListener = eventTarget.removeEventListenerBase;
5805        delete eventTarget.removeEventListenerBase;
5806        delete eventTarget.eventListenerStore;
5807        delete eventTarget.onePageOverrideRemoveEventListenerDone;
5808    };
5809    OnePageUtil.timerManagerClass = function timerManagerClass() {
5810        var intervals = [];
5811        var timeouts = [];
5812        var setIntervalBase;
5813        var clearIntervalBase;
5814        var setTimeoutBase;
5815        var clearTimeoutBase;
5816        var timerOverrideDone = false;
5817        var arrayIndexOf = function(targetArray, item) {
5818            if (typeof targetArray.indexOf != 'undefined') {
5819                return targetArray.indexOf(item);
5820            }
5821            if (typeof Array.indexOf != 'undefined') {
5822                return Array.indexOf(targetArray, item);
5823            }
5824            return undefined;
5825        };
5826
5827        this.overrideTimer = function() {
5828            if (!timerOverrideDone) {
5829                setIntervalBase = window.setInterval;
5830                clearIntervalBase = window.clearInterval;
5831                setTimeoutBase = window.setTimeout;
5832                clearTimeoutBase = window.clearTimeout;
5833                window.setInterval = function() {
5834                    var retVal;
5835
5836                    if ("function" == typeof setIntervalBase) {
5837                        retVal = setIntervalBase.apply(window, arguments);
5838                    }
5839                    else {
5840                        retVal = setIntervalBase(arguments[0], arguments[1]);
5841                    }
5842                    if ('undefined' != typeof retVal) {
5843                        intervals.push(retVal);
5844                    }
5845                    return retVal;
5846                };
5847                window.clearInterval = function() {
5848                    var id = arguments[0];
5849
5850                    if ("function" == typeof clearIntervalBase) {
5851                        clearIntervalBase.apply(window, arguments);
5852                    }
5853                    else {
5854                        clearIntervalBase(id);
5855                    }
5856                    if (typeof id != 'undefined') {
5857                        var idx = arrayIndexOf(intervals, id);
5858
5859                        if (-1 != idx) {
5860                            intervals.splice(idx, 1);
5861                        }
5862                    }
5863                };
5864                window.setTimeout = function() {
5865                    var retVal;
5866
5867                    if (arguments.length > 1 && 'function' == typeof arguments[0]) {
5868                        var fn = arguments[0];
5869
5870                        arguments[0] = function() {
5871                            var argumentsArray1 = [].slice.call(arguments);
5872
5873                            fn.apply(null, argumentsArray1);
5874                            if ('undefined' != typeof retVal) {
5875                                var idx = arrayIndexOf(timeouts, retVal);
5876
5877                                if (-1 != idx) {
5878                                    timeouts.splice(idx, 1);
5879                                }
5880                            }
5881                        };
5882                    }
5883                    if ('function' == typeof setTimeoutBase) {
5884                        var argumentsArray = [].slice.call(arguments);
5885
5886                        retVal = setTimeoutBase.apply(window, argumentsArray);
5887                    }
5888                    else {
5889                        retVal = setTimeoutBase(arguments[0], arguments[1]);
5890                    }
5891                    if ('undefined' != typeof retVal) {
5892                        timeouts.push(retVal);
5893                    }
5894                    return retVal;
5895                };
5896                window.clearTimeout = function() {
5897                    var id = arguments[0];
5898
5899                    if ('function' == typeof clearTimeoutBase) {
5900                        clearTimeoutBase.apply(window, arguments);
5901                    }
5902                    else {
5903                        clearTimeoutBase(id);
5904                    }
5905                    if (typeof id != 'undefined') {
5906                        var idx = arrayIndexOf(timeouts, id);
5907
5908                        if (-1 != idx) {
5909                            timeouts.splice(idx, 1);
5910                        }
5911                    }
5912                };
5913                timerOverrideDone = true;
5914            }
5915        };
5916        this.clearAllIntervals = function clearAllIntervals() {
5917            while (intervals.length > 0) {
5918                clearIntervalBase(intervals[0]);
5919                intervals.splice(0, 1);
5920            }
5921        };
5922        this.clearAllTimeouts = function clearAllTimeouts() {
5923            while (timeouts.length > 0) {
5924                clearTimeoutBase(timeouts[0]);
5925                timeouts.splice(0, 1);
5926            }
5927        };
5928        this.undoOverrideTimer = function undoOverrideTimer() {
5929            window.setInterval = setIntervalBase;
5930            window.clearInterval = clearIntervalBase;
5931            window.setTimeout = setTimeoutBase;
5932            window.clearTimeout = clearTimeoutBase;
5933        };
5934        if (!Boolean(arguments.callee['_singletonInstance'])) {
5935            arguments.callee._singletonInstance = this;
5936        }
5937        return arguments.callee._singletonInstance;
5938    };
5939    var _timerManager = null;
5940
5941    OnePageUtil.GetTimerManager = function() {
5942        if (null == _timerManager)
5943            _timerManager = new OnePageUtil.timerManagerClass();
5944        return _timerManager;
5945    };
5946}
5947var Flighting;
5948var currentCtx;
5949var ctx;
5950var itemTable;
5951var g_supportFiles;
5952var g_MDNav;
5953var ULS;
5954
5955function ULSObject() {
5956}
5957function ULSTrim(str) {
5958    str = str.replace(/^\s*/, "");
5959    str = str.replace(/\s*$/, "");
5960    return str;
5961}
5962function ULSEncodeXML(str) {
5963    str = String(str);
5964    str = str.replace(/&/g, "&amp;");
5965    str = str.replace(/</g, "&lt;");
5966    str = str.replace(/>/g, "&gt;");
5967    str = str.replace(/'/g, "&apos;");
5968    str = str.replace(/"/g, "&quot;");
5969    return str;
5970}
5971function ULSStripPII(url) {
5972    if (url.indexOf('?') != -1)
5973        url = url.substring(0, url.indexOf('?'));
5974    if (Boolean(window.location))
5975        url = url.replace(window.location.hostname, "[server]");
5976    return url;
5977}
5978function ULSGetFunction(fn, depth, topfn) {
5979    var sF = fn.toString();
5980    var sFnNm = ULSTrim(sF.substring(0, sF.indexOf("{")));
5981
5982    if (sFnNm.indexOf("function") == 0)
5983        sFnNm = ULSTrim(sFnNm.substring(8));
5984    var s = '<function ';
5985
5986    if (depth >= 0)
5987        s += 'depth="' + depth.toString() + '" ';
5988    s += 'signature="' + sFnNm + '">';
5989    if (depth == 0 || sFnNm.indexOf("anonymous") == 0 || sFnNm.indexOf("(") == 0)
5990        s += '\n<![CDATA[' + sF + ']]>\n';
5991    s += '</function>';
5992    return s;
5993}
5994function ULSGetMetadataFromFrame(oCS) {
5995    var sFunctionText = oCS.toString();
5996    var iOpeningBrace = sFunctionText.indexOf("{");
5997
5998    if (iOpeningBrace == -1)
5999        return false;
6000    sFunctionText = sFunctionText.substr(iOpeningBrace + 1);
6001    var iFirstStatement = sFunctionText.search(/[^\s]/);
6002
6003    if (iFirstStatement == -1)
6004        return false;
6005    var reMatch = sFunctionText.match(/ULS[^\s;]*:/);
6006
6007    if (reMatch == null || typeof reMatch.index != "undefined" && reMatch.index != iFirstStatement)
6008        return false;
6009    var sLabelName = reMatch[0];
6010
6011    sLabelName = sLabelName.substr(0, sLabelName.length - 1);
6012    try {
6013        var o = eval(sLabelName + "()");
6014
6015        if (typeof o == "undefined" || typeof o.ULSTeamName == "undefined" || typeof o.ULSFileName == "undefined")
6016            return false;
6017        ULS.teamName = o.ULSTeamName;
6018        ULS.originalFile = o.ULSFileName;
6019        return true;
6020    }
6021    catch (e) {
6022        return false;
6023    }
6024}
6025function ULSGetCallstack(callerArg) {
6026    var stack = "";
6027
6028    try {
6029        if (Boolean(callerArg)) {
6030            var fFoundMetadata = false;
6031            var oCS = callerArg;
6032            var depth = 0;
6033
6034            while (Boolean(oCS) && depth < 20) {
6035                if (!fFoundMetadata)
6036                    fFoundMetadata = ULSGetMetadataFromFrame(oCS);
6037                stack += ULSGetFunction(oCS, depth, callerArg) + '\n';
6038                oCS = oCS.caller;
6039                depth++;
6040            }
6041        }
6042    }
6043    catch (e) { }
6044    return stack;
6045}
6046function ULSGetClientInfo() {
6047    var client = "";
6048
6049    try {
6050        var lang = navigator.browserLanguage;
6051
6052        if (!Boolean(lang))
6053            lang = navigator.language;
6054        if (!Boolean(lang))
6055            lang = navigator.systemLanguage;
6056        var agt = navigator.userAgent.toLowerCase();
6057        var app = navigator.appName;
6058        var ver = parseFloat(navigator.appVersion);
6059
6060        if (agt.indexOf("msie ") != -1)
6061            ver = parseFloat(agt.substring(agt.indexOf("msie ") + 5));
6062        if (agt.indexOf("firefox/") != -1) {
6063            app = "Firefox";
6064            ver = parseFloat(agt.substring(agt.indexOf("firefox/") + 8));
6065        }
6066        client += '<browser name="' + ULSEncodeXML(app) + '" version="' + ULSEncodeXML(ver.toString()) + '" />\n';
6067        client += '<useragent>' + ULSEncodeXML(navigator.userAgent) + '</useragent>\n';
6068        if (Boolean(lang))
6069            client += '<language>' + ULSEncodeXML(lang) + '</language>\n';
6070        if (Boolean(document.referrer)) {
6071            var ref = ULSStripPII(document.referrer);
6072
6073            client += '<referrer>' + ULSEncodeXML(ref) + '</referrer>\n';
6074        }
6075        if (Boolean(window.location)) {
6076            var loc = ULSStripPII(window.location.toString());
6077
6078            client += '<location>' + ULSEncodeXML(loc) + '</location>\n';
6079        }
6080        if (Boolean(ULS.Correlation))
6081            client += '<correlation>' + ULSEncodeXML(ULS.Correlation) + '</correlation>\n';
6082    }
6083    catch (e) { }
6084    return client;
6085}
6086function ULSHandleWebServiceResponse() {
6087    var req = ULS.request;
6088
6089    if (req.readyState == 4 && req.status == 200) {
6090        ULSFinishErrorHandling();
6091    }
6092    if ((req.readyState == 0 || req.readyState == 4) && req.status > 200) {
6093        ULSFinishErrorHandling();
6094    }
6095}
6096function ULSFinishErrorHandling() {
6097    ULS.message = null;
6098}
6099function ULSGetWebServiceUrl() {
6100    var url = "";
6101    var idx1 = document.URL.indexOf('://');
6102
6103    if (idx1 > 0) {
6104        var idx2 = document.URL.indexOf('/', idx1 + 3);
6105
6106        if (idx2 > 0)
6107            url = document.URL.substring(0, idx2);
6108        else
6109            url = document.URL;
6110    }
6111    if (url.charAt(url.length - 1) != '/')
6112        url += '/';
6113    url += '_vti_bin/diagnostics.asmx';
6114    return url;
6115}
6116function ULSUploadReport(msg, correlation, url) {
6117    if (Boolean(ULS) && ULS.enable) {
6118        ULS.message = msg;
6119        if (url.indexOf('?') != -1)
6120            url = url.substr(0, url.indexOf('?'));
6121        ULS.file = url.substr(url.lastIndexOf('/') + 1);
6122        ULS.line = 0;
6123        ULS.WebServiceNS = "http://schemas.microsoft.com/sharepoint/diagnostics/";
6124        ULS.Correlation = correlation;
6125        ULS.teamName = '';
6126        ULS.originalFile = '';
6127        ULS.callStack = '';
6128        ULS.clientInfo = '<client>\n' + ULSGetClientInfo() + '</client>';
6129        ULSSendReport(false);
6130    }
6131}
6132function ULSSendReport(async) {
6133    ULS.request = new XMLHttpRequest();
6134    ULS.request.onreadystatechange = ULSHandleWebServiceResponse;
6135    ULS.request.open("POST", ULSGetWebServiceUrl(), async);
6136    ULS.request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
6137    ULS.request.setRequestHeader("SOAPAction", ULS.WebServiceNS + "SendClientScriptErrorReport");
6138    ULS.request.send('<?xml version="1.0" encoding="utf-8"?>' + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + '<soap:Body>' + '<SendClientScriptErrorReport xmlns="' + ULS.WebServiceNS + '">' + '<message>' + ULSEncodeXML(ULS.message) + '</message>' + '<file>' + ULSEncodeXML(ULS.file) + '</file>' + '<line>' + String(ULS.line) + '</line>' + '<stack>' + ULSEncodeXML(ULS.callStack) + '</stack>' + '<client>' + ULSEncodeXML(ULS.clientInfo) + '</client>' + '<team>' + ULSEncodeXML(ULS.teamName) + '</team>' + '<originalFile>' + ULSEncodeXML(ULS.originalFile) + '</originalFile>' + '</SendClientScriptErrorReport>' + '</soap:Body>' + '</soap:Envelope>');
6139}
6140function ULSSendExceptionImpl(msg, url, line, oCaller) {
6141    if (Boolean(ULS) && ULS.enable) {
6142        ULS.enable = false;
6143        window.onerror = ULS.OriginalOnError;
6144        ULS.WebServiceNS = "http://schemas.microsoft.com/sharepoint/diagnostics/";
6145        try {
6146            ULS.message = msg;
6147            if (url.indexOf('?') != -1)
6148                url = url.substr(0, url.indexOf('?'));
6149            ULS.file = url.substr(url.lastIndexOf('/') + 1);
6150            ULS.line = line;
6151            ULS.teamName = "";
6152            ULS.originalFile = "";
6153            ULS.callStack = '<stack>\n' + ULSGetCallstack(oCaller) + '</stack>';
6154            ULS.clientInfo = '<client>\n' + ULSGetClientInfo() + '</client>';
6155            ULSSendReport(true);
6156        }
6157        catch (e) { }
6158    }
6159    if (Boolean(ULS) && Boolean(ULS.OriginalOnError))
6160        return ULS.OriginalOnError(msg, url, String(line));
6161    else
6162        return false;
6163}
6164function ULSOnError(msg, url, line) {
6165    return ULSSendExceptionImpl(msg, url, line, ULSOnError.caller);
6166}
6167function ULSSendException(ex) {
6168    var message = ex.message;
6169
6170    if (typeof message == "undefined")
6171        message = ex.toString();
6172    ULSSendExceptionImpl(message, location.href, 0, ULSSendException.caller);
6173}
6174var ULSCat;
6175
6176function GetXMLHttpRequestObject() {
6177    return new XMLHttpRequest();
6178}
6179function insertAdjacentElement(obj, where, parsedNode) {
6180    if (typeof obj.insertAdjacentElement != "undefined" && Boolean(obj.insertAdjacentElement))
6181        return obj.insertAdjacentElement(where, parsedNode);
6182    switch (where) {
6183    case 'beforeBegin':
6184        return obj.parentNode.insertBefore(parsedNode, obj);
6185    case 'afterBegin':
6186        return obj.insertBefore(parsedNode, obj.firstChild);
6187    case 'beforeEnd':
6188        return obj.appendChild(parsedNode);
6189    case 'afterEnd':
6190        if (Boolean(obj.nextSibling))
6191            return obj.parentNode.insertBefore(parsedNode, obj.nextSibling);
6192        else
6193            return obj.parentNode.appendChild(parsedNode);
6194    }
6195    return null;
6196}
6197function insertAdjacentHTML(obj, where, htmlStr) {
6198    if (typeof obj.insertAdjacentHTML != "undefined" && Boolean(obj.insertAdjacentHTML))
6199        return obj.insertAdjacentHTML(where, htmlStr);
6200    if (typeof obj.ownerDocument.createRange != "undefined") {
6201        var r = obj.ownerDocument.createRange();
6202
6203        if (typeof r.setStartBefore != "undefined" && typeof r.createContextualFragment != "undefined") {
6204            r.setStartBefore(obj);
6205            var parsedHTML = r.createContextualFragment(htmlStr);
6206
6207            return insertAdjacentElement(obj, where, parsedHTML);
6208        }
6209    }
6210    return null;
6211}
6212function insertAdjacentText(obj, where, txtStr) {
6213    if (typeof obj.insertAdjacentText != "undefined" && Boolean(obj.insertAdjacentText))
6214        return obj.insertAdjacentText(where, txtStr);
6215    var parsedText = document.createTextNode(txtStr);
6216
6217    return insertAdjacentElement(obj, where, parsedText);
6218}
6219function contains(obj, elem) {
6220    var isParent = false;
6221
6222    do {
6223        isParent = obj == elem;
6224        if (isParent)
6225            break;
6226        elem = elem.parentNode;
6227    } while (elem != null);
6228    return isParent;
6229}
6230function getFirstElementByName(obj, name2) {
6231    return getFirstElementByProperty(obj, 'name', name2);
6232}
6233function getFirstElementByProperty(obj, propName, propValue) {
6234    if (propName == null || propValue == null || propName == '' || propValue == '')
6235        return null;
6236    if (obj[propName] == propValue)
6237        return obj;
6238    var Child = obj.firstChild;
6239
6240    while (Boolean(Child) && typeof Child != 'undefined') {
6241        var ret = getFirstElementByProperty(Child, propName, propValue);
6242
6243        if (Boolean(ret))
6244            return ret;
6245        Child = Child.nextSibling;
6246    }
6247    return null;
6248}
6249function documentGetElementsByName(name2) {
6250    if (!BrowserDetection.userAgent.ie && Boolean(document.getElementsByName))
6251        return document.getElementsByName(name2);
6252    var matched = [];
6253    var allEls = document.getElementsByTagName("*"), l = allEls.length;
6254
6255    for (var i = 0; i < l; i++) {
6256        var elem = allEls[i];
6257
6258        if (elem.name == name2 || typeof elem.getAttribute != "unknown" && Boolean(elem.getAttribute) && elem.getAttribute("name") == name2)
6259            matched.push(elem);
6260    }
6261    return matched;
6262}
6263function getFirstChild(el) {
6264    var node = el.firstChild;
6265
6266    while (Boolean(node) && node.nodeType == 3)
6267        node = node.nextSibling;
6268    return node;
6269}
6270function byid(id) {
6271    return document.getElementById(id);
6272}
6273function newE(tag) {
6274    return document.createElement(tag);
6275}
6276function wpf() {
6277    if (typeof window.MSOWebPartPageFormName != "undefined")
6278        return document.forms[window.MSOWebPartPageFormName];
6279    return null;
6280}
6281function startReplacement() {
6282}
6283function AttachEvent(eventName, eventFunc, el) {
6284    if (!el)
6285        el = window;
6286    if (eventName == 'domLoad') {
6287        eventName = typeof el.addEventListener != 'undefined' && el.addEventListener && BrowserDetection.userAgent.nav ? 'DOMContentLoaded' : 'load';
6288    }
6289    else if (eventName != 'undefined' && eventName != null && eventName.indexOf("touch") == 0 && BrowserDetection.userAgent.msTouch) {
6290        switch (eventName) {
6291        case "touchstart":
6292            eventName = "MSPointerDown";
6293            break;
6294        case "touchmove":
6295            eventName = "MSPointerMove";
6296            break;
6297        case "touchend":
6298            eventName = "MSPointerUp";
6299            break;
6300        }
6301    }
6302    if (typeof eventFunc == 'string')
6303        eventFunc = new Function(eventFunc);
6304    if (typeof el.addEventListener != 'undefined' && el.addEventListener)
6305        el.addEventListener(eventName, eventFunc, false);
6306    else if (typeof el.attachEvent != 'undefined')
6307        el.attachEvent('on' + eventName, eventFunc);
6308}
6309function DetachEvent(eventName, eventFunc, el) {
6310    if (!el)
6311        el = window;
6312    if (eventName == 'domLoad') {
6313        eventName = typeof el.removeEventListener != 'undefined' && el.removeEventListener && BrowserDetection.userAgent.nav ? 'DOMContentLoaded' : 'load';
6314    }
6315    if (typeof eventFunc == 'string')
6316        eventFunc = new Function(eventFunc);
6317    if (typeof el.removeEventListener != 'undefined' && el.removeEventListener)
6318        el.removeEventListener(eventName, eventFunc, false);
6319    else if (typeof el.detachEvent != 'undefined')
6320        el.detachEvent('on' + eventName, eventFunc);
6321}
6322function GetEventKeyCode(e) {
6323    if (BrowserDetection.userAgent.nav)
6324        return e.which;
6325    else
6326        return e.keyCode;
6327}
6328var g_cde;
6329
6330function GetCachedElement(id) {
6331    var ret = null;
6332
6333    if (!Boolean(ret = g_cde[id])) {
6334        ret = document.getElementById(id);
6335        g_cde[id] = ret;
6336    }
6337    return ret;
6338}
6339function $dg(x) {
6340    if (!(x in window))
6341        window[x] = undefined;
6342}
6343function SelectRibbonTab(tabId, force) {
6344    var rib;
6345
6346    try {
6347        rib = (SP.Ribbon.PageManager.get_instance()).get_ribbon();
6348    }
6349    catch (e) { }
6350    if (!Boolean(rib)) {
6351        if (typeof _ribbonStartInit != "undefined")
6352            _ribbonStartInit(tabId, false, null);
6353    }
6354    else if (force || rib.get_selectedTabId() == "Ribbon.Read") {
6355        rib.selectTabById(tabId);
6356    }
6357}
6358function FV4UI() {
6359    return typeof _fV4UI != "undefined" && _fV4UI;
6360}
6361function EEDecodeSpecialChars(str) {
6362    var decodedStr = str.replace(/&quot;/g, "\"");
6363
6364    decodedStr = decodedStr.replace(/&gt;/g, ">");
6365    decodedStr = decodedStr.replace(/&lt;/g, "<");
6366    decodedStr = decodedStr.replace(/&#39;/g, "'");
6367    decodedStr = decodedStr.replace(/&amp;/g, "&");
6368    return decodedStr;
6369}
6370function SP_JSONParse(jsonText) {
6371    var needsSecondPass = false;
6372    var retval = JSON.parse(jsonText, ReviveSerializedDate);
6373
6374    if (needsSecondPass) {
6375        traverse(retval, ReviveSerializedDate);
6376    }
6377    return retval;
6378    function traverse(obj, func) {
6379        if (obj !== null && typeof obj === 'object') {
6380            for (var key in obj) {
6381                if (obj.hasOwnProperty(key)) {
6382                    traverse(obj[key], func);
6383                    obj[key] = func(key, obj[key]);
6384                }
6385            }
6386        }
6387    }
6388    function ReviveSerializedDate(key, value) {
6389        DetectJSONParseReviverBug(key, value);
6390        if (typeof value === 'string') {
6391            var regExResult = /^\/Date\((-?\d+\))\/$/g.exec(value);
6392
6393            if (regExResult !== null) {
6394                var ticks = parseInt(regExResult[1]);
6395
6396                return new Date(ticks);
6397            }
6398        }
6399        return value;
6400    }
6401    function DetectJSONParseReviverBug(key, value) {
6402        needsSecondPass = needsSecondPass || value === void 0 && /^\d+$/.test(key);
6403    }
6404}
6405function DeferCall() {
6406    if (arguments.length == 0)
6407        return null;
6408    var args = arguments;
6409    var fn = null;
6410
6411    if (browseris.ie5up || browseris.nav6up) {
6412        eval("if (typeof(" + args[0] + ") == 'function') { fn = " + args[0] + "; }");
6413    }
6414    if (fn == null)
6415        return null;
6416    if (args.length == 1)
6417        return fn();
6418    else if (args.length == 2)
6419        return fn(args[1]);
6420    else if (args.length == 3)
6421        return fn(args[1], args[2]);
6422    else if (args.length == 4)
6423        return fn(args[1], args[2], args[3]);
6424    else if (args.length == 5)
6425        return fn(args[1], args[2], args[3], args[4]);
6426    else if (args.length == 6)
6427        return fn(args[1], args[2], args[3], args[4], args[5]);
6428    else if (args.length == 7)
6429        return fn(args[1], args[2], args[3], args[4], args[5], args[6]);
6430    else if (args.length == 8)
6431        return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
6432    else if (args.length == 9)
6433        return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
6434    else if (args.length == 10)
6435        return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
6436    else {
6437        alert(Strings.STS.L_TooManyDefers_Text);
6438    }
6439    return null;
6440}
6441function CollectRUMNonMDS() {
6442    var registerFunc = function() {
6443        var rWsa = GetRUMWSA();
6444
6445        if (IsNullOrUndefined(rWsa))
6446            return;
6447        rWsa.CollectRUMDataForNonMDS();
6448    };
6449    var rumSod = _v_dictSod['sp.core.js'];
6450
6451    if (IsNullOrUndefined(rumSod)) {
6452        return;
6453    }
6454    EnsureScriptFunc('SP.core.js', "SP.RUMLogger", registerFunc);
6455    EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
6456        var perfLogger = IsNullOrUndefined(PerformanceLogger) ? null : PerformanceLogger.GetLogger();
6457
6458        if (!IsNullOrUndefined(perfLogger)) {
6459            perfLogger.CollectW3CPerfTimings();
6460            var pageTransitionType = 0;
6461
6462            if (SP.ScriptUtility.isNullOrEmptyString(document.referrer)) {
6463                pageTransitionType = SP.PageTransitionType.nonMdsToNonMds;
6464            }
6465            else {
6466                if (document.referrer.indexOf('/start.aspx') !== -1) {
6467                    pageTransitionType = SP.PageTransitionType.mdsToNonMds;
6468                }
6469                else {
6470                    pageTransitionType = SP.PageTransitionType.nonMdsToNonMds;
6471                }
6472            }
6473            perfLogger.WritePageTransitionType(pageTransitionType);
6474            if (typeof g_duration != "undefined" && typeof g_iisLatency != "undefined") {
6475                perfLogger.WriteServerSideLatency(g_duration, g_iisLatency);
6476            }
6477        }
6478    });
6479}
6480var LegalUrlChars;
6481var poundIndex;
6482var percentIndex;
6483
6484function SupportPound() {
6485    return typeof _spPageContextInfo != 'undefined' && typeof _spPageContextInfo.supportPoundStorePath == 'boolean' && Boolean(_spPageContextInfo.supportPoundStorePath);
6486}
6487function SupportPercent() {
6488    return typeof _spPageContextInfo != 'undefined' && typeof _spPageContextInfo.supportPercentStorePath == 'boolean' && Boolean(_spPageContextInfo.supportPercentStorePath);
6489}
6490function AdmBuildParam(stPattern) {
6491    var re;
6492    var i;
6493
6494    for (i = 1; i < arguments.length; i++) {
6495        re = new RegExp("\\^" + String(i));
6496        stPattern = stPattern.replace(re, arguments[i]);
6497    }
6498    return stPattern;
6499}
6500function IndexOfIllegalCharInUrlLeafName(strLeafName, noPoundPercent) {
6501    var supportPound = SupportPound() && !noPoundPercent;
6502    var supportPercent = SupportPercent() && !noPoundPercent;
6503
6504    for (var i = 0; i < strLeafName.length; i++) {
6505        var ch = strLeafName.charCodeAt(i);
6506
6507        if (strLeafName.charAt(i) == '.' && i == strLeafName.length - 1)
6508            return i;
6509        if (ch < 160 && (strLeafName.charAt(i) == '/' || !LegalUrlChars[ch] && !(ch == poundIndex && supportPound) && !(ch == percentIndex && supportPercent)))
6510            return i;
6511    }
6512    return -1;
6513}
6514function IndexOfIllegalCharInUrlPath(strPath) {
6515    var supportPound = SupportPound();
6516    var supportPercent = SupportPercent();
6517
6518    for (var i = 0; i < strPath.length; i++) {
6519        var ch = strPath.charCodeAt(i);
6520
6521        if (ch < 160 && (!LegalUrlChars[ch] && !(ch == poundIndex && supportPound) && !(ch == percentIndex && supportPercent)))
6522            return i;
6523    }
6524    return -1;
6525}
6526function UrlContainsIllegalStrings(strPath) {
6527    if (strPath.indexOf("//") >= 0 || strPath.indexOf("./") >= 0 || strPath.lastIndexOf(".") == strPath.length - 1) {
6528        return true;
6529    }
6530    return false;
6531}
6532function UrlLeafNameValidate(source, args) {
6533    var strMessagePrefix = "";
6534
6535    if (typeof source.MessagePrefix == "string") {
6536        strMessagePrefix = source.MessagePrefix;
6537    }
6538    else {
6539        strMessagePrefix = source.id;
6540    }
6541    var i = IndexOfIllegalCharInUrlLeafName(args.Value);
6542
6543    if (i >= 0) {
6544        if (typeof source.errormessage == "string") {
6545            source.errormessage = AdmBuildParam(Strings.STS.L_ContainIllegalChar_Text, strMessagePrefix, args.Value.charAt(i));
6546        }
6547        args.IsValid = false;
6548    }
6549    else if (UrlContainsIllegalStrings(args.Value)) {
6550        if (typeof source.errormessage == "string") {
6551            source.errormessage = AdmBuildParam(Strings.STS.L_ContainIllegalString_Text, strMessagePrefix);
6552        }
6553        args.IsValid = false;
6554    }
6555    else {
6556        args.IsValid = true;
6557    }
6558}
6559function UrlPathValidate(source, args) {
6560    var strMessagePrefix = "";
6561
6562    if (typeof source.MessagePrefix == "string") {
6563        strMessagePrefix = source.MessagePrefix;
6564    }
6565    else {
6566        strMessagePrefix = source.id;
6567    }
6568    var i = IndexOfIllegalCharInUrlPath(args.Value);
6569
6570    if (i >= 0) {
6571        if (typeof source.errormessage == "string") {
6572            source.errormessage = AdmBuildParam(Strings.STS.L_ContainIllegalChar_Text, strMessagePrefix, args.Value.charAt(i));
6573        }
6574        args.IsValid = false;
6575    }
6576    else if (UrlContainsIllegalStrings(args.Value)) {
6577        if (typeof source.errormessage == "string") {
6578            source.errormessage = AdmBuildParam(Strings.STS.L_ContainIllegalString_Text, strMessagePrefix);
6579        }
6580        args.IsValid = false;
6581    }
6582    else {
6583        args.IsValid = true;
6584    }
6585}
6586function IsCheckBoxListSelected(checkboxlist) {
6587    if (checkboxlist == null)
6588        return false;
6589    var len = checkboxlist.length;
6590
6591    if (len == null) {
6592        return checkboxlist.checked;
6593    }
6594    else {
6595        for (var i = 0; i < len; i++) {
6596            var cb = checkboxlist[i];
6597
6598            if (cb.checked) {
6599                return true;
6600            }
6601        }
6602    }
6603    return false;
6604}
6605function STSValidatorEnable(val, bEnable, bSilent) {
6606    var objVal = document.getElementById(val);
6607
6608    if (objVal == null)
6609        return;
6610    if (bSilent || Boolean(objVal.getAttribute("AlwaysEnableSilent"))) {
6611        objVal.enabled = bEnable == true;
6612    }
6613    else {
6614        if (typeof ValidatorEnable == "function")
6615            ValidatorEnable(objVal, bEnable);
6616    }
6617}
6618var recycleBinEnabled;
6619var cascadeDeleteWarningMessage;
6620var bIsFileDialogView;
6621var g_ViewIdToViewCounterMap;
6622var g_ctxDict;
6623
6624function NotifyBrowserOfAsyncUpdate(container) {
6625    var iframeName = '__spAjaxIframe';
6626    var iframe = document.getElementById(iframeName);
6627
6628    if (iframe == null) {
6629        iframe = document.createElement('IFRAME');
6630        iframe.name = (iframe.id = iframeName);
6631        iframe.width = (iframe.height = "0");
6632        iframe.src = 'about:blank';
6633        iframe.style.display = 'none';
6634        document.body.appendChild(iframe);
6635    }
6636    iframe.contentWindow.location.replace('/_layouts/15/images/blank.gif');
6637}
6638function IsSafeHrefAlert(href, fAllowRelativeLinks) {
6639    if (href.match(new RegExp("^[^?]{" + (640 + 1).toString() + "}")) != null) {
6640        alert(Strings.STS.L_UrlTooLongError_Text);
6641        return false;
6642    }
6643    else if (IsSafeHref(href)) {
6644        return true;
6645    }
6646    else {
6647        if (href.match(new RegExp("^[a-zA-Z]*:")) != null) {
6648            alert(Strings.STS.L_UnknownProtocolUrlError_Text);
6649            return false;
6650        }
6651        else if (true == fAllowRelativeLinks) {
6652            return true;
6653        }
6654        else {
6655            alert(Strings.STS.L_UnknownProtocolUrlError_Text);
6656            return false;
6657        }
6658    }
6659}
6660function UpdateAccessibilityUI() {
6661    var t1 = document.getElementById("TurnOnAccessibility");
6662    var t2 = document.getElementById("TurnOffAccessibility");
6663
6664    if (IsAccessibilityFeatureEnabled()) {
6665        if (t1 != null)
6666            t1.style.display = "none";
6667        if (t2 != null)
6668            t2.style.display = "";
6669    }
6670    else {
6671        if (t1 != null)
6672            t1.style.display = "";
6673        if (t2 != null)
6674            t2.style.display = "none";
6675    }
6676}
6677var browserUpdatedWithServerRedirectedUrl;
6678
6679function UpdateUrlWhenServerRedirects() {
6680    var pageContextInfo = window['_spPageContextInfo'];
6681
6682    if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(708) && !(window["OffSwitch"] == null || OffSwitch.IsActive("90329B12-2C48-4DBE-A1B9-08BC2BBA2C26")) && (window["OffSwitch"] == null || OffSwitch.IsActive("DC0DFB52-4F4C-479D-9D07-43DE94F3123F")) && (window["OffSwitch"] == null || OffSwitch.IsActive("3EDB0B41-115A-410E-9C6B-9390F1D1AD94") || !browserUpdatedWithServerRedirectedUrl) && Boolean(pageContextInfo) && Boolean(pageContextInfo.serverRedirectedUrl)) {
6683        var serverRedirectedUrl = pageContextInfo.serverRedirectedUrl;
6684
6685        if (!(window["OffSwitch"] == null || OffSwitch.IsActive("F1754AB4-0FF5-4169-A2E1-7665F6FF4E9F")) && Boolean(pageContextInfo.isSPO) && window.location.protocol.toLowerCase() === 'https:') {
6686            serverRedirectedUrl = serverRedirectedUrl.replace(/^http:\/\//i, 'https://');
6687        }
6688        if (Boolean(window.history) && Boolean(window.history.replaceState)) {
6689            window.history.replaceState({
6690                reason: "SPServerRedirect"
6691            }, "SPServerRedirect", serverRedirectedUrl);
6692            browserUpdatedWithServerRedirectedUrl = true;
6693        }
6694        else {
6695            window.location.href = serverRedirectedUrl;
6696        }
6697    }
6698}
6699function OnePageNavigationHandler(evt) {
6700    var registerFunc = function registerOnePageNavigationFunc() {
6701        performModernOnePageNavigationForFasterOnePage(evt);
6702    };
6703
6704    EnsureScriptFunc('SP.core.js', "performModernOnePageNavigationForFasterOnePage", registerFunc);
6705}
6706function isBrowserSupportedModernApp() {
6707    var browserSupported = true;
6708
6709    try {
6710        var a = navigator.userAgent.toLowerCase();
6711        var i = a.indexOf("msie");
6712
6713        if (-1 !== i) {
6714            var v = parseInt(a.substring(i + 5));
6715            var supportedMode = !(window["OffSwitch"] == null || OffSwitch.IsActive("68B2E51A-1AC2-4ABF-924A-DFB7CD5C18E1")) ? 11 : 10;
6716
6717            if (v < supportedMode && Boolean(document.documentMode) && document.documentMode < supportedMode) {
6718                browserSupported = false;
6719            }
6720        }
6721    }
6722    catch (e) { }
6723    return browserSupported;
6724}
6725function UserHasPermissionHigh(permissionLevel) {
6726    var pageContextInfo = window['_spPageContextInfo'];
6727    var webPermMasks = pageContextInfo['webPermMasks'];
6728    var webPermMasksHigh = webPermMasks != null ? Number(webPermMasks["High"]) : 0;
6729    var hasPerm = (webPermMasksHigh & permissionLevel) == permissionLevel;
6730
6731    return hasPerm;
6732}
6733function ModernUXOptOutCookieIsOn() {
6734    return GetCookie('splnu') === '0';
6735}
6736function PrepareForModernOnePageNavigation() {
6737    var SPBasePermissions_UseRemoteAPIs = 0x20;
6738
6739    if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(1) && !(window["OffSwitch"] == null || OffSwitch.IsActive("79D8320F-D4AA-45D1-A83F-9B7AF522EE5C")) && isBrowserSupportedModernApp() && (window["OffSwitch"] == null || OffSwitch.IsActive("32012162-C12F-453D-A7EF-E00E74140C44") || UserHasPermissionHigh(SPBasePermissions_UseRemoteAPIs) && !ModernUXOptOutCookieIsOn())) {
6740        var docLibLinks = document.querySelectorAll('[onepagenavigationaction="1"]');
6741
6742        for (var index = 0; index < docLibLinks.length; index++) {
6743            var link = docLibLinks[index];
6744
6745            if (!!link.addEventListener) {
6746                link.addEventListener('click', OnePageNavigationHandler, false);
6747            }
6748            else if (!!link.attachEvent) {
6749                link.attachEvent('onclick', OnePageNavigationHandler);
6750            }
6751        }
6752        var registerFunc = function registerOnePageNavigationFunc() {
6753            setTimeout(preloadModernApp, 1000);
6754        };
6755
6756        EnsureScriptFunc('SP.core.js', "preloadModernApp", registerFunc);
6757    }
6758}
6759function SetIsAccessibilityFeatureEnabled(f) {
6760    if (f)
6761        document.cookie = "WSS_AccessibilityFeature=true;path=/;";
6762    else
6763        document.cookie = "WSS_AccessibilityFeature=false;path=/;";
6764    var hiddenAnchor = document.getElementById("HiddenAnchor");
6765    var evt;
6766
6767    if (browseris.ie)
6768        evt = {
6769            "srcElement": hiddenAnchor,
6770            "fakeEvent": 1,
6771            "enableStatus": f
6772        };
6773    else
6774        evt = {
6775            "target": hiddenAnchor,
6776            "fakeEvent": 1,
6777            "enableStatus": f
6778        };
6779    if (hiddenAnchor == null || typeof hiddenAnchor.onclick == 'undefined' || hiddenAnchor.onclick == null)
6780        return;
6781    hiddenAnchor.onclick(evt);
6782}
6783function DeleteCookie(sName) {
6784    document.cookie = sName + "=; expires=Thu, 01-Jan-70 00:00:01 GMT";
6785}
6786function GetCookie(sName) {
6787    return GetCookieEx(sName, window);
6788}
6789function GetCookieEx(sName, wnd) {
6790    var aCookie = wnd.document.cookie.split("; ");
6791
6792    for (var i = 0; i < aCookie.length; i++) {
6793        var aCrumbStr = aCookie[i];
6794        var aCrumb = aCrumbStr.split("=");
6795
6796        if (sName == aCrumb[0]) {
6797            if (aCrumb.length > 1)
6798                return unescapeProperly(aCrumb[1]);
6799            else
6800                return null;
6801        }
6802    }
6803    return null;
6804}
6805function SetCookie(sName, value) {
6806    SetCookieEx(sName, value, false, window);
6807}
6808function SetCookieEx(sName, value, isGlobal, wnd) {
6809    var c = sName + (value ? "=true" : "=false");
6810    var p = isGlobal ? ";path=/" : "";
6811    var sec = wnd.location.protocol === "https:" ? ";secure" : "";
6812
6813    wnd.document.cookie = c + p + sec;
6814}
6815function IsAccessibilityFeatureEnabled() {
6816    return GetCookie("WSS_AccessibilityFeature") == "true";
6817}
6818function escapeForSync(str) {
6819    var strOut = "";
6820    var ix = 0;
6821    var bDoingUnicode = false;
6822    var strSyncEscaped = "\\&|[]";
6823
6824    for (ix = 0; ix < str.length; ix++) {
6825        var charCode = str.charCodeAt(ix);
6826        var curChar = str.charAt(ix);
6827
6828        if (bDoingUnicode && charCode <= 0x7f) {
6829            strOut += "]";
6830            bDoingUnicode = false;
6831        }
6832        if (!bDoingUnicode && charCode > 0x7f) {
6833            strOut += "[";
6834            bDoingUnicode = true;
6835        }
6836        if (strSyncEscaped.indexOf(curChar) >= 0)
6837            strOut += "|";
6838        if (charCode >= 97 && charCode <= 122 || charCode >= 65 && charCode <= 90 || charCode >= 48 && charCode <= 57) {
6839            strOut += curChar;
6840        }
6841        else if (charCode <= 0x0f) {
6842            strOut += "%0" + (charCode.toString(16)).toUpperCase();
6843        }
6844        else if (charCode <= 0x7f) {
6845            strOut += "%" + (charCode.toString(16)).toUpperCase();
6846        }
6847        else if (charCode <= 0x00ff) {
6848            strOut += "00" + (charCode.toString(16)).toUpperCase();
6849        }
6850        else if (charCode <= 0x0fff) {
6851            strOut += "0" + (charCode.toString(16)).toUpperCase();
6852        }
6853        else {
6854            strOut += (charCode.toString(16)).toUpperCase();
6855        }
6856    }
6857    if (bDoingUnicode)
6858        strOut += "]";
6859    return strOut;
6860}
6861function navigateMailToLink(strBody) {
6862    window.location.href = 'mailto:?body=' + escapeProperly(strBody);
6863}
6864function navigateMailToLinkWithMessage(strTo, strBody) {
6865    window.location.href = 'mailto:' + escapeProperly(strTo) + '?body=' + escapeProperly(escapeProperlyCoreCore(strBody, false, false, true));
6866}
6867function newBlogPostOnClient(strProviderId, strBlogUrl, strBlogName) {
6868    var stsOpen;
6869    var fRet;
6870
6871    stsOpen = StsOpenEnsureEx2("SharePoint.OpenDocuments.3");
6872    if (stsOpen == null) {
6873        alert(Strings.STS.L_NewBlogPost_Text);
6874        return;
6875    }
6876    try {
6877        if (typeof stsOpen.NewBlogPost != "undefined")
6878            fRet = stsOpen.NewBlogPost(strProviderId, strBlogUrl, strBlogName);
6879    }
6880    catch (e) {
6881        alert(Strings.STS.L_NewBlogPostFailed_Text);
6882    }
6883}
6884function GetUrlFromWebUrlAndWebRelativeUrl(webUrl, webRelativeUrl) {
6885    var retUrl = webUrl == null || webUrl.length <= 0 ? "/" : webUrl;
6886
6887    if (retUrl.charAt(retUrl.length - 1) != "/") {
6888        retUrl += "/";
6889    }
6890    retUrl += webRelativeUrl;
6891    return retUrl;
6892}
6893function UpdateFormDigest(serverRelativeWebUrl, updateInterval) {
6894    try {
6895        var pageContextInfo = window['_spPageContextInfo'];
6896
6897        if (pageContextInfo == null || pageContextInfo.updateFormDigestPageLoaded == null) {
6898            return;
6899        }
6900        var now = new Date();
6901
6902        if (now.getTime() - pageContextInfo.updateFormDigestPageLoaded.getTime() < updateInterval) {
6903            return;
6904        }
6905        if (serverRelativeWebUrl == null || serverRelativeWebUrl.length <= 0) {
6906            return;
6907        }
6908        var formDigestElement = (document.getElementsByName("__REQUESTDIGEST"))[0];
6909
6910        if (formDigestElement == null || formDigestElement.tagName.toLowerCase() != "input" || formDigestElement.type.toLowerCase() != "hidden" || formDigestElement.value == null || formDigestElement.value.length <= 0) {
6911            return;
6912        }
6913        var request = new XMLHttpRequest();
6914
6915        if (request == null) {
6916            return;
6917        }
6918        request.open("POST", GetUrlFromWebUrlAndWebRelativeUrl(serverRelativeWebUrl, "_vti_bin/sites.asmx"), false);
6919        request.setRequestHeader("Content-Type", "text/xml");
6920        request.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetUpdatedFormDigest");
6921        request.send("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + "  <soap:Body>" + "    <GetUpdatedFormDigest xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\" />" + "  </soap:Body>" + "</soap:Envelope>");
6922        var responseText = request.responseText;
6923
6924        if (responseText == null || responseText.length <= 0) {
6925            return;
6926        }
6927        var startTag = '<GetUpdatedFormDigestResult>';
6928        var endTag = '</GetUpdatedFormDigestResult>';
6929        var startTagIndex = responseText.indexOf(startTag);
6930        var endTagIndex = responseText.indexOf(endTag, startTagIndex + startTag.length);
6931        var newFormDigest = null;
6932
6933        if (startTagIndex >= 0 && endTagIndex > startTagIndex) {
6934            newFormDigest = responseText.substring(startTagIndex + startTag.length, endTagIndex);
6935        }
6936        if (newFormDigest == null || newFormDigest.length <= 0) {
6937            return;
6938        }
6939        var oldValue = formDigestElement.value;
6940
6941        formDigestElement.value = newFormDigest;
6942        pageContextInfo.updateFormDigestPageLoaded = new Date();
6943    }
6944    catch (ex) { }
6945}
6946function IsSupportedFirefoxOnWin() {
6947    return browseris.win && browseris.firefox3up;
6948}
6949function IsSupportedChromeOnWin() {
6950    return browseris.win && browseris.chrome;
6951}
6952function IsSupportedNPApiBrowserOnWin() {
6953    return IsSupportedChromeOnWin() || IsSupportedFirefoxOnWin();
6954}
6955function IsNPAPIOnWinPluginInstalled(strMimeType) {
6956    return Boolean(navigator.mimeTypes) && navigator.mimeTypes[strMimeType] && navigator.mimeTypes[strMimeType].enabledPlugin;
6957}
6958function CreateNPApiOnWindowsPlugin(strMimeType) {
6959    var plugin = null;
6960
6961    if (IsSupportedNPApiBrowserOnWin()) {
6962        try {
6963            plugin = document.getElementById(strMimeType);
6964            if (!Boolean(plugin) && IsNPAPIOnWinPluginInstalled(strMimeType)) {
6965                var pluginNode = document.createElement("object");
6966
6967                pluginNode.id = strMimeType;
6968                pluginNode.type = strMimeType;
6969                pluginNode.width = "0";
6970                pluginNode.height = "0";
6971                pluginNode.style.setProperty("visibility", "hidden", "");
6972                document.body.appendChild(pluginNode);
6973                plugin = document.getElementById(strMimeType);
6974            }
6975        }
6976        catch (e) {
6977            plugin = null;
6978        }
6979    }
6980    return plugin;
6981}
6982function IsSupportedMacBrowser() {
6983    return browseris.mac && (browseris.firefox3up || browseris.safari3up || browseris.chrome);
6984}
6985function IsBrowserPluginInstalled(mimeType) {
6986    var hasMimeType = Boolean(navigator.mimeTypes) && navigator.mimeTypes[mimeType];
6987
6988    if (hasMimeType) {
6989        var type = navigator.mimeTypes[mimeType];
6990
6991        return !!type.enabledPlugin;
6992    }
6993    return false;
6994}
6995function IsMacPluginInstalled() {
6996    var webkitPluginInstalled = IsBrowserPluginInstalled("application/x-sharepoint-webkit");
6997    var npapiPluginInstalled = IsBrowserPluginInstalled("application/x-sharepoint");
6998
6999    if (browseris.safari3up && webkitPluginInstalled)
7000        return true;
7001    return npapiPluginInstalled;
7002}
7003function CreateMacPlugin() {
7004    var plugin = null;
7005
7006    if (IsSupportedMacBrowser() && !browseris.chrome) {
7007        plugin = document.getElementById("macSharePointPlugin");
7008        if (plugin == null && IsMacPluginInstalled()) {
7009            var pluginMimeType = null;
7010
7011            if (browseris.safari3up && IsBrowserPluginInstalled("application/x-sharepoint-webkit"))
7012                pluginMimeType = "application/x-sharepoint-webkit";
7013            else
7014                pluginMimeType = "application/x-sharepoint";
7015            var pluginNode = document.createElement("object");
7016
7017            pluginNode.id = "macSharePointPlugin";
7018            pluginNode.type = pluginMimeType;
7019            pluginNode.width = "0";
7020            pluginNode.height = "0";
7021            pluginNode.style.visibility = "hidden";
7022            document.body.appendChild(pluginNode);
7023            plugin = document.getElementById("macSharePointPlugin");
7024        }
7025    }
7026    return plugin;
7027}
7028var g_objStssync;
7029
7030function GetStssyncHandler(szVersion) {
7031    if (!IsSupportedMacBrowser()) {
7032        try {
7033            g_objStssync = new ActiveXObject("SharePoint.StssyncHandler" + szVersion);
7034        }
7035        catch (e) {
7036            g_objStssync = null;
7037        }
7038    }
7039    else {
7040        g_objStssync = CreateMacPlugin();
7041    }
7042}
7043function GetStssyncData(strType, strTextDefault, strImgPathDefault, strPrefix) {
7044    var stsSyncData = null;
7045    var _sec = window.location.protocol === "https:" ? ";secure" : "";
7046
7047    if (document.cookie.indexOf("stsSyncAppName") == -1 && document.cookie.indexOf("stsSyncIconPath") == -1) {
7048        if (IsSupportedMacBrowser()) {
7049            var plugin = GetStssyncHandler("");
7050
7051            if (plugin == null || typeof plugin.StssyncEnabled == 'undefined' || !plugin.StssyncEnabled) {
7052                document.cookie = "stsSyncAppName=0" + _sec;
7053                document.cookie = "stsSyncIconPath=0" + _sec;
7054                return stsSyncData;
7055            }
7056        }
7057        if (browseris.ie5up && browseris.win32 || IsSupportedMacBrowser()) {
7058            var strAppName;
7059            var strIconName;
7060
7061            try {
7062                if (strType != "")
7063                    GetStssyncHandler(".3");
7064                if (!g_objStssync) {
7065                    if (strType != "" && strType != "calendar" && strType != "contacts") {
7066                        document.cookie = "stsSyncAppName=0" + _sec;
7067                        document.cookie = "stsSyncIconPath=0" + _sec;
7068                        return stsSyncData;
7069                    }
7070                    GetStssyncHandler(".2");
7071                    if (!g_objStssync || typeof g_objStssync.GetStssyncAppName == 'undefined' || !Boolean(strAppName = g_objStssync.GetStssyncAppName())) {
7072                        document.cookie = "stsSyncAppName=0" + _sec;
7073                        document.cookie = "stsSyncIconPath=0" + _sec;
7074                        return stsSyncData;
7075                    }
7076                }
7077                else {
7078                    if (typeof g_objStssync.GetStssyncAppNameForType == 'undefined' || !Boolean(strAppName = g_objStssync.GetStssyncAppNameForType(strType))) {
7079                        document.cookie = "stsSyncAppName=0" + _sec;
7080                        document.cookie = "stsSyncIconPath=0" + _sec;
7081                        return stsSyncData;
7082                    }
7083                }
7084            }
7085            catch (e) {
7086                SP.DebugLogger.Write("FailureGetStssync", SP.DebugLogger.LoggingLevel.Interesting, "Failed to access stssync ActiveX");
7087                document.cookie = "stsSyncAppName=0" + _sec;
7088                document.cookie = "stsSyncIconPath=0" + _sec;
7089                return stsSyncData;
7090            }
7091            document.cookie = "stsSyncAppName=" + escapeProperly(strAppName) + _sec;
7092            try {
7093                if (typeof g_objStssync.GetStssyncIconName == 'undefined')
7094                    throw 0;
7095                strIconName = g_objStssync.GetStssyncIconName();
7096                strIconName = strPrefix + strIconName;
7097                document.cookie = "stsSyncIconPath=" + escapeProperly(strIconName) + _sec;
7098            }
7099            catch (e) {
7100                document.cookie = "stsSyncIconPath=0" + _sec;
7101                strIconName = strImgPathDefault;
7102            }
7103        }
7104        else {
7105            strAppName = strTextDefault;
7106            strIconName = strImgPathDefault;
7107            document.cookie = "stsSyncAppName=" + escapeProperly(strTextDefault) + _sec;
7108            document.cookie = "stsSyncIconPath=" + escapeProperly(strImgPathDefault) + _sec;
7109        }
7110    }
7111    else {
7112        strAppName = GetCookie("stsSyncAppName");
7113        strIconName = GetCookie("stsSyncIconPath");
7114        if (strAppName == '0') {
7115            return stsSyncData;
7116        }
7117    }
7118    strAppName = Strings.STS.L_LinkToBefore_Text + strAppName;
7119    stsSyncData = new Object();
7120    stsSyncData.BtnText = strAppName;
7121    stsSyncData.BtnImagePath = strIconName;
7122    return stsSyncData;
7123}
7124function GetStssyncAppName(strDefault) {
7125    var stsSyncData = GetStssyncData("", strDefault, "", "");
7126
7127    return stsSyncData.BtnText;
7128}
7129function makeAbsUrl(strUrl) {
7130    if (strUrl.length > 0 && "/" == strUrl.substr(0, 1)) {
7131        strUrl = window.location.protocol + "//" + window.location.host + strUrl;
7132    }
7133    return strUrl;
7134}
7135function ExportHailStorm(type, weburl, guid, webname, listname, viewurl, passport, listrooturl, folderurl, folderid) {
7136    var strAppName = GetCookie("stsSyncAppName");
7137    var strIconName = GetCookie("stsSyncIconPath");
7138
7139    if (strAppName != null && strAppName != '0') {
7140        var maxLinkLength = 500;
7141        var maxNameLength = 20;
7142        var link = "stssync://sts/?ver=1.1" + "&type=" + escapeProperly(type) + "&cmd=add-folder" + "&base-url=" + escapeForSync(weburl) + "&list-url=" + escapeForSync("/" + (makeAbsUrl(viewurl)).substr(weburl.length + 1) + "/") + "&guid=" + escapeProperly(guid);
7143
7144        if (typeof offlineBtnUser != "undefined")
7145            link += "&user-id=" + offlineBtnUser;
7146        var names = "&site-name=" + escapeForSync(webname) + "&list-name=" + escapeForSync(listname);
7147        var context = "";
7148
7149        if (Boolean(folderurl))
7150            context += "&folder-url=" + escapeForSync("/" + folderurl.substr(listrooturl.length + 1));
7151        if (Boolean(folderid))
7152            context += "&folder-id=" + folderid;
7153        if (link.length + names.length + context.length > maxLinkLength && (webname.length > maxNameLength || listname.length > maxNameLength)) {
7154            if (webname.length > maxNameLength)
7155                webname = safeTruncateString(webname, maxNameLength - 1) + "...";
7156            if (listname.length > maxNameLength)
7157                listname = safeTruncateString(listname, maxNameLength - 1) + "...";
7158            names = "&site-name=" + escapeForSync(webname) + "&list-name=" + escapeForSync(listname);
7159        }
7160        link = link + names + context;
7161        if (link.length > maxLinkLength)
7162            alert(Strings.STS.L_StssyncTooLong_Text);
7163        else {
7164            try {
7165                window.locatio
7165n.href = link;
7166            }
7167            catch (e) { }
7168        }
7169    }
7170}
7171var g_objDiagramLaunch;
7172
7173function GetDiagramLaunchInstalled() {
7174    var strAppName = '';
7175
7176    if (document.cookie.indexOf("digInstalled") == -1) {
7177        try {
7178            g_objDiagramLaunch = new ActiveXObject("DiagramLaunch.DiagramLauncher");
7179            if (typeof g_objDiagramLaunch.EnsureDiagramApplication != "undefined")
7180                strAppName = g_objDiagramLaunch.EnsureDiagramApplication();
7181            document.cookie = "digInstalled=" + escapeProperly(strAppName) + ";";
7182        }
7183        catch (e) {
7184            g_objDiagramLaunch = null;
7185            document.cookie = "digInstalled=0;";
7186        }
7187    }
7188    else {
7189        strAppName = GetCookie("digInstalled");
7190        if (strAppName == '0')
7191            strAppName = '';
7192    }
7193    return strAppName;
7194}
7195var g_objProjectTaskLaunch;
7196
7197function GetProjectTaskLaunchInstalled() {
7198    if (document.cookie.indexOf("projInstalled") == -1) {
7199        var strAppName = '';
7200
7201        try {
7202            g_objProjectTaskLaunch = new ActiveXObject("WinProj.Activator");
7203            if (typeof g_objProjectTaskLaunch.EnsureTaskApplication != 'undefined')
7204                strAppName = g_objProjectTaskLaunch.EnsureTaskApplication();
7205            document.cookie = "projInstalled=" + escapeProperly(strAppName) + ";";
7206        }
7207        catch (e) {
7208            document.cookie = "projInstalled=0;";
7209            g_objProjectTaskLaunch = null;
7210        }
7211    }
7212    else {
7213        strAppName = GetCookie("projInstalled");
7214        if (strAppName == '0')
7215            strAppName = '';
7216    }
7217    return strAppName;
7218}
7219var g_expDatabase;
7220
7221function GetDataBaseInstalled() {
7222    var databaseBtnText = '';
7223    var databaseBtnDesc = '';
7224
7225    if (document.cookie.indexOf("databaseBtnText") == -1 || document.cookie.indexOf("databaseBtnDesc") == -1) {
7226        try {
7227            g_expDatabase = new ActiveXObject('SharePoint.ExportDatabase');
7228            if (Boolean(g_expDatabase) && typeof g_expDatabase.IsDBProgramInstalled != "undefined" && g_expDatabase.IsDBProgramInstalled()) {
7229                if (typeof g_expDatabase.MenuTitle != 'undefined')
7230                    document.cookie = "databaseBtnText=" + escapeProperly(g_expDatabase.MenuTitle) + ";";
7231                if (typeof g_expDatabase.MenuDescription != 'undefined')
7232                    document.cookie = "databaseBtnDesc=" + escapeProperly(g_expDatabase.MenuDescription) + ";";
7233            }
7234            else {
7235                document.cookie = "databaseBtnText=" + '0' + ";";
7236                document.cookie = "databaseBtnDesc=" + '0' + ";";
7237                g_expDatabase = null;
7238            }
7239        }
7240        catch (e) {
7241            document.cookie = "databaseBtnText=" + '0' + ";";
7242            document.cookie = "databaseBtnDesc=" + '0' + ";";
7243            g_expDatabase = null;
7244        }
7245    }
7246    else {
7247        databaseBtnText = GetCookie("databaseBtnText");
7248        databaseBtnDesc = GetCookie("databaseBtnDesc");
7249        if (databaseBtnText != '0' && databaseBtnText != '0') {
7250            var dummyExpDatabase = new Object();
7251
7252            dummyExpDatabase.MenuTitle = databaseBtnText;
7253            dummyExpDatabase.MenuDescription = databaseBtnDesc;
7254            return dummyExpDatabase;
7255        }
7256        else {
7257            g_expDatabase = null;
7258        }
7259    }
7260    return g_expDatabase;
7261}
7262var g_ssImporterObj;
7263var g_fSSImporter;
7264
7265function EnsureSSImportInner() {
7266    if (browseris.ie5up && browseris.win32) {
7267        try {
7268            g_ssImporterObj = new ActiveXObject("SharePoint.SpreadsheetLauncher.2");
7269            if (g_ssImporterObj)
7270                g_fSSImporter = true;
7271        }
7272        catch (e) {
7273            try {
7274                g_ssImporterObj = new ActiveXObject("SharePoint.SpreadsheetLauncher.1");
7275                if (g_ssImporterObj)
7276                    g_fSSImporter = true;
7277            }
7278            catch (e) {
7279                g_fSSImporter = false;
7280            }
7281        }
7282    }
7283    else if (IsSupportedMacBrowser()) {
7284        g_ssImporterObj = CreateMacPlugin();
7285        if (g_ssImporterObj)
7286            g_fSSImporter = true;
7287        else
7288            g_fSSImporter = false;
7289    }
7290}
7291function EnsureSSImporter(byPassCookies) {
7292    byPassCookies = typeof byPassCookies == undefined ? false : byPassCookies;
7293    if (document.cookie.indexOf("EnsureSSImporter") == -1 || byPassCookies) {
7294        EnsureSSImportInner();
7295        document.cookie = "EnsureSSImporter=" + String(g_fSSImporter) + ";";
7296    }
7297    else {
7298        g_fSSImporter = GetCookie("EnsureSSImporter") == "true" ? true : false;
7299    }
7300    return g_fSSImporter;
7301}
7302function GetThemedImageUrl(FileName) {
7303    return GetThemedImageUrl_Core(FileName, '/_layouts/15/images/');
7304}
7305function GetThemedLocalizedImageUrl(FileName) {
7306    var localizedImagePath = "/_layouts/15/" + Strings.STS.L_Language_Text + "/images/";
7307
7308    return GetThemedImageUrl_Core(FileName, localizedImagePath);
7309}
7310function GetThemedImageUrl_Core(FileName, FallbackImagePath) {
7311    var themedImageUrl;
7312    var imageUrl = FallbackImagePath + FileName;
7313    var useClientSideTheming = SPThemeUtils.UseClientSideTheming();
7314    var pageContextInfo = window['_spPageContextInfo'];
7315
7316    if (pageContextInfo != null && !useClientSideTheming) {
7317        var themedCssFolderUrl = pageContextInfo['themedCssFolderUrl'];
7318        var themedImageFileNames = pageContextInfo['themedImageFileNames'];
7319        var themedImageFileName = null;
7320
7321        if (themedImageFileNames != null) {
7322            themedImageFileName = themedImageFileNames[FileName];
7323        }
7324        if (themedCssFolderUrl != null && themedCssFolderUrl.length > 0 && themedImageFileName != null) {
7325            imageUrl = themedCssFolderUrl + '/' + themedImageFileName;
7326        }
7327    }
7328    themedImageUrl = GetImageUrlWithRevision(imageUrl);
7329    if (useClientSideTheming) {
7330        (Theming.GetPageManager()).RegisterAllImages();
7331        themedImageUrl += "#ThemeKey=";
7332        themedImageUrl = (Theming.GetPageManager()).GetThemedImageSrc(themedImageUrl);
7333    }
7334    return themedImageUrl;
7335}
7336function GetImageUrlWithRevision(imageUrl) {
7337    return imageUrl.search(/[?]/) > -1 ? imageUrl : imageUrl + "?" + "rev=43";
7338}
7339function ShowHideSection(sectionid, imgid) {
7340    var group = document.getElementById(sectionid);
7341    var img = document.getElementById(imgid);
7342
7343    if (group == null)
7344        return;
7345    if (group.style.display != "none") {
7346        group.style.display = "none";
7347        img.src = GetThemedImageUrl("commentexpand12.png");
7348    }
7349    else {
7350        group.style.display = "";
7351        img.src = GetThemedImageUrl("commentcollapse12.png");
7352    }
7353}
7354function ShowSection(sectionid, imgid) {
7355    var group = document.getElementById(sectionid);
7356    var img = document.getElementById(imgid);
7357
7358    if (group == null)
7359        return;
7360    if (group.style.display == "none") {
7361        group.style.display = "";
7362        img.src = GetThemedImageUrl("commentcollapse12.png");
7363    }
7364}
7365function ShowHideInputFormSection(sectionid, bShow) {
7366    var e = document.getElementById(sectionid);
7367
7368    if (e != null)
7369        e.style.display = bShow ? "" : "none";
7370    for (var i = 1; i < 3; i++) {
7371        e = document.getElementById(sectionid + "_tablerow" + String(i));
7372        if (e != null)
7373            e.style.display = bShow ? "" : "none";
7374    }
7375}
7376function ShowHideInputFormControl(id, bHide, bDisableValidators, b
7376Silent) {
7377    var displaySetting = "";
7378
7379    if (bHide == true) {
7380        displaySetting = "none";
7381    }
7382    var validators = eval(id + '_validators');
7383    var i = 0;
7384
7385    if (validators != null) {
7386        for (i = 0; i < validators.length; i++) {
7387            STSValidatorEnable(validators[i], !bDisableValidators, bSilent);
7388        }
7389    }
7390    for (i = 1; i <= 5; i++) {
7391        var rowId = id + "_tablerow" + String(i);
7392        var row = document.getElementById(rowId);
7393
7394        if (row != null && !browseris.mac) {
7395            row.style.display = displaySetting;
7396        }
7397    }
7398}
7399function HideMenuControl(menuControlId) {
7400    if (typeof menuControlId == "undefined" || menuControlId == null)
7401        return;
7402    var menu = document.getElementById(menuControlId);
7403
7404    if (typeof menu == "undefined" || menu == null)
7405        return;
7406    var menuItems = menu.getElementsByTagName("ie:menuitem");
7407
7408    if (typeof menuItems == "undefined" || menuItems == null)
7409        return;
7410    for (var i = 0; i < menuItems.length; i++) {
7411        var menuItem = menuItems[i];
7412        var hiddenScript = menuItem.getAttribute("hidden");
7413
7414        if (typeof hiddenScript == "undefined" || hiddenScript == null || !eval(hiddenScript))
7415            return;
7416    }
7417    menu.style.display = 'none';
7418}
7419function SetControlDisabledStatus(obj, disabledStatus) {
7420    try {
7421        if (Boolean(obj.setAttribute))
7422            obj.setAttribute('disabled', String(disabledStatus));
7423        if (!disabledStatus && Boolean(obj.removeAttribute))
7424            obj.removeAttribute('disabled');
7425    }
7426    catch (e) { }
7427}
7428function SetControlDisabledStatusRecursively(obj, disabledStatus) {
7429    if (obj == null)
7430        return;
7431    SetControlDisabledStatus(obj, disabledStatus);
7432    var objChildren = obj.childNodes;
7433
7434    for (var i = 0; objChildren.length > i; i++) {
7435        SetControlDisabledStatusRecursively(objChildren[i], disabledStatus);
7436    }
7437}
7438function SetChildControlsDisabledStatus(obj, disabledStatus) {
7439    var objChildren = obj.childNodes;
7440
7441    for (var i = 0; i < objChildren.length; i++) {
7442        SetControlDisabledStatusRecursively(objChildren[i], disabledStatus);
7443    }
7444}
7445var g_PNGImageIds;
7446var g_PNGImageSources;
7447
7448function displayPNGImage(id, src, width, height, alt) {
7449    if (g_PNGImageIds == null)
7450        g_PNGImageIds = [];
7451    if (g_PNGImageSources == null)
7452        g_PNGImageSources = [];
7453    var style = null;
7454
7455    document.write("<IMG id='" + id + "' ");
7456    if (Boolean(width) && width > 0)
7457        document.write("width='" + String(width) + "' ");
7458    if (Boolean(height) && height > 0)
7459        document.write("height='" + String(height) + "' ");
7460    document.write("alt='" + alt + "' ");
7461    if (Boolean(style))
7462        document.write("style='" + style + "' ");
7463    document.write(" src='" + src + "' />");
7464    g_PNGImageIds.push(id);
7465    g_PNGImageSources.push(src);
7466}
7467function ProcessPNGImages() {
7468    var useFilter = browseris.ie && browseris.ie55up && browseris.verIEFull < 7.0;
7469
7470    if (g_PNGImageIds != null && useFilter) {
7471        for (var i = 0; i < g_PNGImageIds.length; i++) {
7472            var img = document.getElementById(g_PNGImageIds[i]);
7473
7474            if (img != null && g_PNGImageSources[i] != null) {
7475                img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + g_PNGImageSources[i] + "),sizingMethod=scale);";
7476                img.src = "/_layouts/15/images/blank.gif?rev=43";
7477            }
7478        }
7479    }
7480}
7481function CtxSetIsWebEditorPreview(num) {
7482    ctx.isWebEditorPreview = num;
7483}
7484function CtxSetCurrentUserId(strUserId) {
7485    ctx.CurrentUserId = strUserId;
7486}
7487function CtxSetIsForceCheckout(fForce) {
7488    ctx.isForceCheckout = fForce;
7489}
7490function LoginAsAnother(url, bUseSource) {
7491    document.cookie = "loginAsDifferentAttemptCount=0";
7492    if (bUseSource == "1") {
7493        GoToPage(url);
7494    }
7495    else {
7496        var ch = url.indexOf("?") >= 0 ? "&" : "?";
7497
7498        url += ch + "Source=" + escapeProperly(window.location.href);
7499        Nav.navigate(url);
7500    }
7501}
7502function CLVPFromEvent(evt) {
7503    return DeferCall('CLVPFromEventReal', evt);
7504}
7505function STSNavigateToView(evt, url) {
7506    Nav.navigate(url);
7507}
7508function STSNavigate2(evt, url) {
7509    Nav.navigate(url);
7510}
7511function STSNavigateTop(navigateToUri) {
7512    var fNavigate = true;
7513
7514    if (typeof window.top.SPUpdatePage !== 'undefined') {
7515        fNavigate = window.top.SPUpdatePage(navigateToUri);
7516    }
7517    if (fNavigate) {
7518        window.top.location.href = STSPageUrlValidation(navigateToUri);
7519    }
7520}
7521function GoToPage(url, fOnlyUseExistingSource) {
7522    var ch = url.indexOf("?") >= 0 ? "&" : "?";
7523
7524    if ((GetUrlKeyValue("Source", true, url)).length == 0) {
7525        var srcUrl = fOnlyUseExistingSource ? GetUrlKeyValue("Source") : GetSource();
7526
7527        if (srcUrl != null && srcUrl != "") {
7528            if (fOnlyUseExistingSource)
7529                srcUrl = escapeProperly(STSPageUrlValidation(srcUrl));
7530            if (url.length + srcUrl.length <= 1950) {
7531                url += ch + "Source=" + srcUrl;
7532            }
7533        }
7534    }
7535    Nav.navigate(url);
7536}
7537function TrimSpaces(str) {
7538    var st;
7539    var end;
7540
7541    str = str.toString();
7542    var len = str.length;
7543
7544    for (st = 0; st < len; st++) {
7545        if (str.charAt(st) != ' ')
7546            break;
7547    }
7548    if (st == len)
7549        return "";
7550    for (end = len - 1; end > st; end--) {
7551        if (str.charAt(end) != ' ')
7552            break;
7553    }
7554    end++;
7555    return str.substring(st, end);
7556}
7557function TrimWhiteSpaces(str) {
7558    var st;
7559    var end;
7560
7561    str = str.toString();
7562    var len = str.length;
7563    var ch;
7564
7565    for (st = 0; st < len; st++) {
7566        ch = str.charAt(st);
7567        if (ch != ' ' && ch != '\t' && ch != '\n' && ch != '\r' && ch != '\f')
7568            break;
7569    }
7570    if (st == len)
7571        return "";
7572    for (end = len - 1; end > st; end--) {
7573        ch = str.charAt(end);
7574        if (ch != ' ' && ch != '\t' && ch != '\n' && ch != '\r' && ch != '\f')
7575            break;
7576    }
7577    end++;
7578    return str.substring(st, end);
7579}
7580function ShowMtgNavigatorPane() {
7581    (document.getElementById("MeetingNavigatorPane")).style.display = "block";
7582}
7583function HideMtgNavigatorPane() {
7584    (document.getElementById("MeetingNavigatorPane")).style.display = "none";
7585}
7586function HideMtgDesc() {
7587    (document.getElementById("MeetingDescription")).style.display = "none";
7588}
7589function GetMultipleUploadEnabled() {
7590    try {
7591        if (browseris.ie5up && !browseris.mac && new ActiveXObject('STSUpld.UploadCtl'))
7592            return true;
7593    }
7594    catch (e) { }
7595    return false;
7596}
7597function SetUploadPageTitle() {
7598    if (Number(GetUrlKeyValue("Type")) == 1) {
7599        document.title = Strings.STS.L_NewFormClickOnce1_Text;
7600        if (browseris.ie || browseris.nav6up) {
7601            var titleElt = document.getElementById("onetidTextTitle");
7602
7603            if (titleElt != null)
7604                titleElt.innerHTML = Strings.STS.L_NewFormClickOnce1_Text;
7605        }
7606        if (typeof SP != "undefined" && SP != null && SP.QoS != null)
7607            SP.QoS.WriteUserEngagement("CreateFolder_Old");
7608    }
7609}
7610function GetSelectedValue(frmElem) {
7611    if (Boolean(frmElem) && frmElem.selectedIndex > -1) {
7612        var option = frmElem.options[frmElem.selectedIndex];
7613
7614        return option.value;
7615    }
7616    else
7617        return "";
7618}
7619function GetSelectedText(frmElem) {
7620    if (Boolean(frmElem) && frmElem.selectedIndex > -1) {
7621        var option = frmElem.options[frmElem.selectedIndex];
7622
7623        return option.text;
7624    }
7625    else
7626        return "";
7627}
7628function MtgShowTimeZone() {
7629    if (GetCookie("MtgTimeZone") == "1") {
7630        EnsureScriptParams("core.js", "MtgToggleTimeZone");
7631    }
7632}
7633function FormatDate(sDate, sTime, eDate, eTime) {
7634    var DateSeparator = Strings.STS.L_DateSeparator_Text;
7635
7636    if (browseris.win32 && sDate == eDate)
7637        DateSeparator = Strings.STS.L_DateSeparatorEx_Text;
7638    if (sDate == eDate) {
7639        document.write(Strings.STS.L_Date_Text + " " + sDate);
7640        if (sTime != eTime)
7641            document.write(" " + Strings.STS.L_TimeLong_Text + " " + sTime + DateSeparator + eTime);
7642        else
7643            document.write(" " + Strings.STS.L_TimeLong_Text + " " + sTime);
7644    }
7645    else {
7646        document.write(Strings.STS.L_TimeLong_Text + " " + sDate + " (" + sTime + ")" + DateSeparator + eDate + " (" + eTime + ")");
7647    }
7648}
7649function GetAlertText(isDetached) {
7650    var howOrphaned = isDetached & 0x10 - 1;
7651    var howDetached = isDetached - howOrphaned;
7652
7653    if (Boolean(howOrphaned)) {
7654        switch (howOrphaned) {
7655        case 1:
7656            return typeof g_meetingCount != "undefined" && g_meetingCount == 1 ? Strings.STS.L_DETACHEDSINGLEEXCEPT_Text : Strings.STS.L_DETACHEDCANCELLEDEXCEPT_Text;
7657        case 2:
7658            return Strings.STS.L_DETACHEDCANCELLEDSERIES_Text;
7659        case 3:
7660            return Strings.STS.L_DETACHEDCANCELLEDEXCEPT_Text;
7661        case 4:
7662            return typeof g_meetingCount != "undefined" && g_meetingCount == 1 ? Strings.STS.L_DETACHEDSINGLEEXCEPT_Text : Strings.STS.L_DETACHEDUNLINKEDSINGLE_Text;
7663        case 5:
7664            return Strings.STS.L_DETACHEDUNLINKEDSERIES_Text;
7665        case 6:
7666            return Strings.STS.L_DETACHEDSERIESNOWSINGLE_Text;
7667        case 7:
7668            return Strings.STS.L_DETACHEDSINGLENOWSERIES_Text;
7669        case 8:
7670            return Strings.STS.L_DETACHEDPASTEXCPMODIFIED_Text;
7671        }
7672    }
7673    else if (Boolean(howDetached)) {
7674        switch (howDetached) {
7675        case 16:
7676            return Strings.STS.L_DETACHEDNONGREGORIANCAL_Text;
7677        }
7678    }
7679    return null;
7680}
7681function retrieveCurrentThemeLink() {
7682    var cssLink;
7683    var links = document.getElementsByTagName("link");
7684
7685    for (var i = 0; i < links.length; i++) {
7686        var link = links[i];
7687
7688        if (link.type == "text/css" && link.id == "onetidThemeCSS")
7689            cssLink = link;
7690    }
7691    if (Boolean(cssLink)) {
7692        var re = /(\.\.\/)+/;
7693        var relativeURL = cssLink.href;
7694        var newURL = relativeURL.replace(re, "/");
7695
7696        return newURL;
7697    }
7698    return null;
7699}
7700var JSRequest;
7701var ExpGroupWPListName;
7702var ExpGroupCookiePrefix;
7703var ExpGroupCookieDelimiter;
7704var ExpGroupMaxWP;
7705var ExpGroupMaxCookieLength;
7706var g_ExpGroupCAMLQueue;
7707var g_ExpGroupXSLTQueue;
7708var g_ExpGroupInProgress;
7709var g_ExpInitializing;
7710var g_ExpGroupTable;
7711var g_ExpGroupNeedsState;
7712var g_ExpGroupParseStage;
7713
7714function ExpCollGroup(groupName, imgName, evt, noAjax) {
7715    if (evt != null)
7716        g_ExpGroupNeedsState = true;
7717    if (document.getElementById("titl" + groupName) == null)
7718        return;
7719    var viewTable = (document.getElementById("titl" + groupName)).parentNode;
7720
7721    if (viewTable == null)
7722        return;
7723    var ctxNum = groupName.substr(0, groupName.indexOf("-"));
7724    var ctxCur = window["ctx" + ctxNum];
7725
7726    if (!Boolean(ctxCur))
7727        return;
7728    if (!ctxCur.StateInitDone)
7729        ctxInitItemState(ctxCur);
7730    if (ctxCur.SelectAllCbx == null)
7731        ctxCur.SelectAllCbx = getSelectAllCbxFromTable(viewTable);
7732    var tbodyTags = viewTable.getElementsByTagName("TBODY");
7733    var numElts = tbodyTags.length;
7734    var len = groupName.length;
7735    var img = document.getElementById(imgName);
7736
7737    if (img == null)
7738        return;
7739    var srcPath = img.src;
7740    var imgSrc = img.getAttribute('src');
7741    var index = srcPath.lastIndexOf("/");
7742    var commonClusterSrcPath = GetThemedImageUrl("spcommon.png");
7743    var collapseImgClass = fRightToLeft ? "ms-commentcollapsertl-icon" : "ms-commentcollapse-icon";
7744    var collapseSpanClass = fRightToLeft ? "ms-commentcollapsertl-iconouter" : "ms-commentcollapse-iconouter";
7745    var expandImgClass = fRightToLeft ? "ms-commentexpandrtl-icon" : "ms-commentexpand-icon";
7746    var expandSpanClass = fRightToLeft ? "ms-commentexpandrtl-iconouter" : "ms-commentexpand-iconouter";
7747    var oldExpandSrcPath = '/_layouts/15/images/plus.gif';
7748    var oldCollapseSrcPath = '/_layouts/15/images/minus.gif';
7749    var fOpen = false;
7750    var displayStr;
7751    var bUpdateImgAltText = true;
7752
7753    if (imgSrc == oldExpandSrcPath || imgSrc == commonClusterSrcPath && img.className == expandImgClass || g_ExpInitializing) {
7754        fOpen = true;
7755        displayStr = "";
7756        img.alt = Strings.STS.L_SPCollapse;
7757        if (imgSrc == commonClusterSrcPath) {
7758            img.className = collapseImgClass;
7759            img.parentNode.className = collapseSpanClass;
7760        }
7761        else
7762            img.src = oldCollapseSrcPath;
7763    }
7764    else {
7765        fOpen = false;
7766        displayStr = "none";
7767        if (bUpdateImgAltText)
7768            img.alt = Strings.STS.L_SPExpand;
7769        if (imgSrc == commonClusterSrcPath) {
7770            img.className = expandImgClass;
7771            img.parentNode.className = expandSpanClass;
7772        }
7773        else
7774            img.src = oldExpandSrcPath;
7775    }
7776    var j = 0;
7777
7778    for (var i = 0; i < numElts; i++) {
7779        var childObj = tbodyTags[i];
7780
7781        if (childObj.id != null && childObj.id.length > len + 4 && groupName == (childObj.id.slice(4)).substr(0, len)) {
7782            if (fOpen) {
7783                index = childObj.id.indexOf("_", len + 4);
7784                if (index != -1) {
7785                    index = childObj.id.indexOf("_", index + 1);
7786                    if (index != -1)
7787                        continue;
7788                }
7789            }
7790            var previousDisplay = childObj.style.display;
7791
7792            childObj.style.display = displayStr;
7793            var itemCount = 0;
7794
7795            if (Boolean(childObj.getAttribute("selectableRows")))
7796                itemCount = Number(childObj.getAttribute("selectableRows"));
7797            if (typeof FV4UI != "undefined" && FV4UI() && Boolean(itemCount)) {
7798                if (!fOpen) {
7799                    if (previousDisplay != "none")
7800                        ctxCur.TotalListItems -= itemCount;
7801                    EnsureScriptParams("core.js", "DeselectCollapsedGroup", ctxCur, childObj);
7802                    EnsureScriptParams("core.js", "UpdateSelectAllCbx", ctxCur, true);
7803                }
7804                else {
7805                    ctxCur.TotalListItems += itemCount;
7806                    EnsureScriptParams("core.js", "UpdateSelectAllCbx", ctxCur, false);
7807                }
7808            }
7809            if (fOpen && childObj.id.substr(0, 4) == "titl") {
7810                var imgObj = document.getElementById("img_" + childObj.id.slice(4));
7811                var imgObjSrc = imgObj.getAttribute('src');
7812
7813                imgObj.alt = Strings.STS.L_SPExpand;
7814                if (imgObjSrc == commonClusterSrcPath) {
7815                    imgObj.className = expandImgClass;
7816                    imgObj.parentNode.className = expandSpanClass;
7817                }
7818                else {
7819                    imgObj.src = oldExpandSrcPath;
7820                }
7821            }
7822            var groupID = "tbod" + groupName;
7823            var child;
7824
7825            if (childObj.id.substr(0, groupID.length) == groupID) {
7826                if (noAjax) {
7827                    for (j = 0; j < childObj.childNodes.length; j++) {
7828                        child = childObj.childNodes[j];
7829                        child.style.display = displayStr;
7830                    }
7831                }
7832                if (childObj.childNodes.length == 0) {
7833                    var nextTBody = childObj.nextSibling;
7834
7835                    while (nextTBody != null) {
7836                        if (nextTBody.tagName == "TBODY" && nextTBody.id == "") {
7837                            for (j = 0; j < nextTBody.childNodes.length; j++) {
7838                                child = nextTBody.childNodes[j];
7839                                child.style.display = displayStr;
7840                                if (typeof FV4UI != "undefined" && FV4UI()) {
7841                                    HandleSingleGroupByRow(ctxCur, child, fOpen);
7842                                    UpdateSelectAllCbx(ctxCur, true);
7843                                }
7844                            }
7845                            break;
7846                        }
7847                        else
7848                            nextTBody = nextTBody.nextSibling;
7849                    }
7850                }
7851            }
7852        }
7853    }
7854    if (FV4UI())
7855        EnsureScriptParams("core.js", "UpdateCtxLastSelectableRow", ctxCur, viewTable);
7856    if (!noAjax && !g_ExpGroupParseStage) {
7857        if (g_ExpGroupNeedsState && ExpGroupFetchWebPartID(groupName) != null && !Boolean(ctxCur.noGroupCollapse)) {
7858            if (fOpen) {
7859                AddGroupToCookie(groupName);
7860            }
7861            else {
7862                RemoveGroupFromCookie(groupName);
7863            }
7864        }
7865        if (fOpen) {
7866            var tbody = document.getElementById("tbod" + groupName + "_");
7867
7868            if (tbody != null) {
7869                var isLoaded = tbody.getAttribute("isLoaded");
7870
7871                if (isLoaded == "false") {
7872                    ExpGroupFetchData(groupName, evt);
7873                }
7874            }
7875        }
7876    }
7877}
7878function ExpGroupFetchData(groupName, evt) {
7879    var loadString = "<tr><td colspan=\"100\" class=\"ms-gbload\">" + Strings.STS.L_Loading_Text + "</td></tr>";
7880
7881    ExpGroupRenderData(loadString, groupName, "false");
7882    if (!g_ExpGroupInProgress) {
7883        var groupString = ExpGroupFetchGroupString(groupName);
7884
7885        if (groupString == null) {
7886            loadString = "<tr><td></td><td class=\"ms-gbload\">" + Strings.STS.L_Loading_Error_Text + "</td></tr>";
7887            ExpGroupRenderData(loadString, groupName, "false");
7888            if (Boolean(evt) && g_ExpGroupXSLTQueue.length > 0) {
7889                ExpGroupFetchData(g_ExpGroupXSLTQueue.shift(), evt);
7890            }
7891            else if (!Boolean(evt) && g_ExpGroupCAMLQueue.length > 0) {
7892                ExpGroupFetchData(g_ExpGroupCAMLQueue.shift(), evt);
7893            }
7894            return;
7895        }
7896        if (typeof InitAllClvps == "undefined" && evt != null)
7897            g_ExpInitializing = true;
7898        else {
7899            g_ExpInitializing = false;
7900            g_ExpGroupInProgress = true;
7901        }
7902        ExpGroupCallServer(groupString, groupName, evt);
7903        if (g_ExpGroupCAMLQueue.length > 0 && evt == null) {
7904            ExpGroupFetchData(g_ExpGroupCAMLQueue.shift());
7905        }
7906    }
7907    else {
7908        if (Boolean(evt))
7909            g_ExpGroupXSLTQueue.push(groupName);
7910        else
7911            g_ExpGroupCAMLQueue.push(groupName);
7912    }
7913}
7914function ExpGroupCallServer(groupString, groupName, evt) {
7915    if (evt != null) {
7916        var obj = evt;
7917
7918        if (evt == "PageLoad") {
7919            obj = new Object();
7920            obj.fakeEvent = true;
7921        }
7922        EnsureScriptParams("inplview", "inplview.ExpGroup", obj, groupName);
7923    }
7924    else {
7925        var viewCounter = groupName.substring(0, groupName.indexOf("-"));
7926        var myCtx = window["ctx" + viewCounter];
7927        var webPartID = ExpGroupFetchWebPartID(groupName);
7928
7929        if (webPartID != null) {
7930            var functionName = "ExpGroupCallServer" + webPartID;
7931
7932            if (myCtx != null && myCtx.clvp != null) {
7933                var myClvp = myCtx.clvp;
7934                var strFilter = myClvp.FilterString();
7935
7936                if (strFilter != null) {
7937                    groupString += "|" + strFilter;
7938                }
7939            }
7940            var functionCall = functionName + "('" + groupString + "','" + groupName + "')";
7941
7942            eval(functionCall);
7943        }
7944    }
7945}
7946function DoPagingCallback(webPartID, pagingParam) {
7947    if (webPartID != null) {
7948        var functionName = "DoPagingCallback" + webPartID;
7949        var functionCall = functionName + "('" + pagingParam + "')";
7950
7951        eval(functionCall);
7952    }
7953}
7954function ExpGroupReceiveData(htmlToRender, groupName) {
7955    var ctxId = "ctx" + groupName.substring(0, groupName.indexOf("-"));
7956    var indexBeginCTXName = htmlToRender.indexOf("CTXName=\"");
7957
7958    if (indexBeginCTXName != -1) {
7959        if (ctxId != "ctx1") {
7960            htmlToRender = htmlToRender.replace(/ CTXName=\"ctx1\" /g, " CTXName=\"" + ctxId + "\" ");
7961        }
7962    }
7963    var needOuterWrap = false;
7964
7965    if (htmlToRender.length < 4) {
7966        needOuterWrap = true;
7967    }
7968    else if (htmlToRender.substring(0, 3) != "<tr") {
7969        needOuterWrap = true;
7970    }
7971    if (needOuterWrap) {
7972        htmlToRender = "<TR><TD>" + htmlToRender + "</TD></TR>";
7973    }
7974    ExpGroupRenderData(htmlToRender, groupName, "true");
7975    ProcessImn();
7976    g_ExpGroupInProgress = false;
7977    if (g_ExpGroupCAMLQueue.length > 0) {
7978        ExpGroupFetchData(g_ExpGroupCAMLQueue.shift());
7979    }
7980}
7981function ExpGroupRenderData(htmlToRender, groupName, isLoaded) {
7982    var tbody = document.getElementById("tbod" + groupName + "_");
7983    var wrapDiv = document.createElement("DIV");
7984    var rg = groupName.split("-");
7985
7986    wrapDiv.innerHTML = "<TABLE><TBODY id=\"tbod" + groupName + "_\" isLoaded=\"" + isLoaded + "\">" + htmlToRender + "</TBODY></TABLE>";
7987    tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild, tbody);
7988}
7989var titlTbody;
7990
7991function ExpGroupFetchGroupString(groupName) {
7992    titlTbody = document.getElementById("titl" + groupName);
7993    if (titlTbody == null) {
7994        return null;
7995    }
7996    else {
7997        var groupString = titlTbody.getAttribute("groupString");
7998
7999        return groupString;
8000    }
8001}
8002function ExpGroupFetchWebPartID(groupName) {
8003    var viewCounter = groupName.substring(0, groupName.indexOf("-"));
8004    var lookupEntry = document.getElementById("GroupByWebPartID" + viewCounter);
8005
8006    if (lookupEntry == null)
8007        return null;
8008    return lookupEntry.getAttribute("webPartID");
8009}
8010function RenderActiveX(str) {
8011    document.write(str);
8012}
8013function RenderActiveX2(s, id) {
8014    if (id == null)
8015        return;
8016    var oldObject = document.getElementById(id);
8017
8018    if (oldObject != null) {
8019        var objParent = oldObject.parentNode;
8020        var divHost = document.createElement('div');
8021
8022        divHost.innerHTML = s;
8023        var newObject = divHost.childNodes[0];
8024
8025        if (newObject != null)
8026            objParent.replaceChild(newObject, oldObject);
8027    }
8028}
8029function OnItem(elm) {
8030    DeferCall('OnItemDeferCall', elm);
8031}
8032function OnChildItem(elm) {
8033    var i;
8034
8035    for (i = 0; i < elm.childNodes.length; i++) {
8036        var child = elm.childNodes[i];
8037
8038        if (child.nodeType == 1 && child.tagName == "TABLE" && Boolean(child.getAttribute("NameOrTitle")))
8039            break;
8040        if (child.nodeType == 1 && child.tagName == "DIV" && child.style.display != "none" && child.style.visibility != "hidden") {
8041            OnItem(child);
8042            break;
8043        }
8044    }
8045}
8046function OnLink(elm) {
8047    DeferCall('OnLinkDeferCall', elm);
8048}
8049function MMU_PopMenuIfShowing(menuElement) {
8050    DeferCall('MMU_PopMenuIfShowingDeferCall', menuElement);
8051}
8052function OnMouseOverFilter(elm) {
8053    DeferCall('OnMouseOverFilterDeferCall', elm);
8054}
8055function OnChildColumn(elm) {
8056    var i;
8057
8058    for (i = 0; i < elm.childNodes.length; i++) {
8059        var child = elm.childNodes[i];
8060
8061        if (child.nodeType == 1 && child.tagName == "DIV" && child.getAttribute("CtxNum") != null) {
8062            OnMouseOverFilter(child);
8063            break;
8064        }
8065    }
8066}
8067function MMU_EcbTableMouseOverOut(ecbTable, fMouseOver) {
8068    DeferCall('MMU_EcbTableMouseOverOutDeferCall', ecbTable, fMouseOver);
8069}
8070function OnMouseOverAdHocFilter(elm, fieldStr) {
8071    DeferCall('OnMouseOverAdHocFilterDeferCall', elm, fieldStr);
8072}
8073function MMU_EcbLinkOnFocusBlur(menu, ecbLink, fOnFocus) {
8074    DeferCall('MMU_EcbLinkOnFocusBlurDeferCall', menu, ecbLink, fOnFocus);
8075}
8076function GetElementByClassName(elem, classname) {
8077    if (Boolean(elem.className) && typeof elem.className.indexOf != 'undefined') {
8078        if (elem.className.indexOf(classname) > -1)
8079            return elem;
8080    }
8081    var temp;
8082
8083    for (var i = 0; i < elem.childNodes.length; i++) {
8084        temp = GetElementByClassName(elem.childNodes[i], classname);
8085        if (temp != null)
8086            return temp;
8087    }
8088    return null;
8089}
8090function AddWhiteBG() {
8091    if (searcharea.className.indexOf(" " + whitebgclass) == -1) {
8092        var cn = searcharea.className.trim() + " " + whitebgclass;
8093
8094        cn = cn.trim();
8095        searcharea.className = cn;
8096    }
8097}
8098function RemoveWhiteBG() {
8099    if (locked)
8100        return;
8101    searcharea.className = searcharea.className.replace(RegExp(" " + whitebgclass), "");
8102}
8103var locked;
8104
8105function LockBG() {
8106    locked = !locked;
8107    if (locked)
8108        AddWhiteBG();
8109    else
8110        RemoveWhiteBG();
8111}
8112var searcharea;
8113var searchbox;
8114var searchimage;
8115var whitebgclass;
8116
8117function InitSearchBoxStyleEvents(sarea, sbox, simage_class, wbgclass) {
8118    searcharea = document.getElementById(sarea);
8119    searchbox = document.getElementById(sbox);
8120    searchimage = GetElementByClassName(searcharea, simage_class);
8121    whitebgclass = wbgclass;
8122    if (searchbox == null || searchimage == null)
8123        return;
8124    searchbox.onfocus = LockBG;
8125    searchbox.onmouseover = AddWhiteBG;
8126    searchbox.onblur = LockBG;
8127    searchbox.onmouseout = RemoveWhiteBG;
8128    searchimage.onmouseover = AddWhiteBG;
8129    searchimage.onmouseout = RemoveWhiteBG;
8130}
8131function IsFullNameDefined(fullName) {
8132    if (!Boolean(fullName)) {
8133        return false;
8134    }
8135    var names = fullName.split(".");
8136    var len = names.length;
8137    var obj = window;
8138
8139    for (var i = 0; i < len; i++) {
8140        obj = obj[names[i]];
8141        if (typeof obj == "undefined") {
8142            return false;
8143        }
8144    }
8145    return true;
8146}
8147function TypeofFullName(fullName) {
8148    if (!Boolean(fullName)) {
8149        return "undefined";
8150    }
8151    var names = fullName.split(".");
8152    var len = names.length;
8153    var obj = window;
8154
8155    for (var i = 0; i < len; i++) {
8156        obj = obj[names[i]];
8157        if (typeof obj == "undefined") {
8158            return "undefined";
8159        }
8160    }
8161    return typeof obj;
8162}
8163var _v_dictSod;
8164var _v_dictCss;
8165var Sods;
8166var _v_qsod;
8167var _v_sodctx;
8168
8169function Sod(url, key) {
8170    this.url = url;
8171    this.key = key;
8172    this.loaded = false;
8173    this.depkeys = null;
8174    this.state = 1;
8175    this.qfn = null;
8176}
8177function SodCallbackInfo(fn, errorFn, expectedTypeName) {
8178    this.success = fn;
8179    this.error = errorFn;
8180    this.expectedType = expectedTypeName;
8181}
8182function AreAllSodsLoaded() {
8183    var sod;
8184
8185    if (g_PendingLoadSodQueue != null) {
8186        for (var i = 0; i < g_PendingLoadSodQueue.length; i++) {
8187            var sodQueueEntry = g_PendingLoadSodQueue[i];
8188
8189            sod = sodQueueEntry.sod;
8190            if (Boolean(sod) && sod.state != Sods.loaded) {
8191                return false;
8192            }
8193        }
8194    }
8195    if (g_spPreFetchKeys != null) {
8196        for (var idx = 0; idx < g_spPreFetchKeys.length; idx++) {
8197            var key = g_spPreFetchKeys[idx];
8198
8199            sod = _v_dictSod[key];
8200            if (Boolean(sod) && sod.state != Sods.loaded) {
8201                return false;
8202            }
8203        }
8204    }
8205    for (var scriptKey in _v_dictSod) {
8206        sod = _v_dictSod[scriptKey];
8207        if (Boolean(sod) && (sod.state == Sods.loading || sod.state == Sods.pending || sod.state == Sods.error))
8208            return false;
8209    }
8210    return true;
8211}
8212function UrlToSod(url) {
8213    for (var i in _v_dictSod) {
8214        var sod = _v_dictSod[i];
8215
8216        if (sod.url == url) {
8217            return sod;
8218        }
8219    }
8220    return null;
8221}
8222function ResetSodState() {
8223    for (var i in _v_dictSod) {
8224        var sod = _v_dictSod[i];
8225
8226        if (sod.state == Sods.loaded && sod.url != null) {
8227            sod.reset = true;
8228        }
8229        sod.qfn = null;
8230    }
8231}
8232function RegisterOnDemandCss(key, url) {
8233    _v_dictCss[key] = new Sod(url, key);
8234}
8235function LoadCssOnDemand(key, callback) {
8236    var sod = _v_dictCss[key];
8237
8238    if (sod != null)
8239        _ensureCssLink(sod.url, callback);
8240    else if (callback != null)
8241        callback();
8242}
8243function RegisterSod(key, url) {
8244    key = NormalizeSodKey(key);
8245    var sod = _v_dictSod[key];
8246
8247    if (sod != null) {
8248        if ("undefined" != typeof sod.url && sod.url == null && url != null) {
8249            sod.url = url;
8250            if (AjaxNavigate$isMDSURL(window.location.href)) {
8251                sod.reset = true;
8252            }
8253        }
8254        return;
8255    }
8256    sod = new Sod(url, key);
8257    _v_dictSod[key] = sod;
8258}
8259function NormalizeListViewSodKey(inputJS) {
8260    var isLoadingListViewJS = typeof _spPageContextInfo !== "undefined" && typeof _spPageContextInfo.isSLV !== "undefined" && Boolean(_spPageContextInfo) && Boolean(_spPageContextInfo.isSLV);
8261
8262    if (isLoadingListViewJS) {
8263        var script = inputJS.toLowerCase();
8264        var isInplview = script == "inplview" || script == "inplview.js";
8265        var isClienttemplates = script == "clienttemplates" || script == "clienttemplates.js";
8266        var isClientrenderer = script == "clientrenderer" || script == "clientrenderer.js";
8267
8268        if (isInplview || isClienttemplates || isClientrenderer) {
8269            return "listview.js";
8270        }
8271    }
8272    return inputJS;
8273}
8274function ResetListViewSods(bReset) {
8275    ResetSod("inplview", bReset);
8276    ResetSod("inplview.js", bReset);
8277    ResetSod("clienttemplates", bReset);
8278    ResetSod("clienttemplates.js", bReset);
8279    ResetSod("clientrenderer", bReset);
8280    ResetSod("clientrenderer.js", bReset);
8281}
8282function ResetSod(sodkey, bReset) {
8283    var sod = _v_dictSod[sodkey];
8284
8285    if (Boolean(sod)) {
8286        sod.reset = bReset;
8287    }
8288}
8289function RegisterSodDep(key, dep) {
8290    key = NormalizeSodKey(key);
8291    dep = NormalizeSodKey(dep);
8292    var sod = _v_dictSod[key];
8293
8294    if (sod == null)
8295        return;
8296    if (sod.depkeys == null)
8297        sod.depkeys = [];
8298    if (-1 == ArrayIndexOf(sod.depkeys, dep)) {
8299        sod.depkeys.push(dep);
8300    }
8301}
8302function LoadSodByKey(key, fn, bSync, errorFn, expectedTypeName) {
8303    key = NormalizeSodKey(key);
8304    key = NormalizeListViewSodKey(key);
8305    var sod = _v_dictSod[key];
8306
8307    if (fn != null && sod != null) {
8308        if (sod.qfn == null)
8309            sod.qfn = [];
8310        sod.qfn.push(new SodCallbackInfo(fn, errorFn, expectedTypeName));
8311    }
8312    return LoadSod(sod, bSync);
8313}
8314function LoadSodByKeySync(key) {
8315    return LoadSodByKey(key, null, true);
8316}
8317function LoadMultipleSods(keys, fn, bSync) {
8318    var total = keys.length;
8319    var keysDict = new Object;
8320
8321    for (var j = 0; j < total; j++) {
8322        keysDict[keys[j]] = false;
8323    }
8324    var count = 0;
8325    var callback = function() {
8326        count++;
8327        if (count == total) {
8328            fn();
8329        }
8330    };
8331
8332    for (var i = 0; i < total; i++) {
8333        var sodCallback = (function(key) {
8334            return function() {
8335                if (!Boolean(keysDict[key])) {
8336                    keysDict[key] = true;
8337                    callback();
8338                }
8339            };
8340        })(keys[i]);
8341        var result = LoadSodByKey(keys[i], sodCallback, bSync);
8342
8343        if (result == Sods.loaded && !Boolean(keysDict[keys[i]])) {
8344            keysDict[keys[i]] = true;
8345            callback();
8346        }
8347    }
8348}
8349var g_PendingLoadSodQueue;
8350
8351function IsSodLoaded(sod) {
8352    return sod.state == Sods.loaded && !Boolean(sod.reset);
8353}
8354function LoadSod(sod, bSync) {
8355    if (!bSync && typeof g_mdsReady != "undefined" && Boolean(g_mdsReady) && typeof g_MDSPageLoaded != "undefined" && !Boolean(g_MDSPageLoaded)) {
8356        if (g_PendingLoadSodQueue == null)
8357            g_PendingLoadSodQueue = [];
8358        var sodQueueEntry = {
8359            "sod": sod
8360        };
8361
8362        g_PendingLoadSodQueue.push(sodQueueEntry);
8363        return Sods.pending;
8364    }
8365    else {
8366        return LoadSodInternal(sod, bSync);
8367    }
8368}
8369function LoadPendingSods() {
8370    if (g_PendingLoadSodQueue != null) {
8371        var len = g_PendingLoadSodQueue.length;
8372
8373        for (var i = 0; i < len; i++) {
8374            var sodQueueEntry = g_PendingLoadSodQueue[i];
8375
8376            LoadSodInternal(sodQueueEntry.sod, false);
8377        }
8378        g_PendingLoadSodQueue = null;
8379    }
8380}
8381function LoadSodInternal(sod, bSync) {
8382    if (sod == null)
8383        return Sods.missing;
8384    if (IsSodLoaded(sod) || !bSync && sod.state == Sods.loading) {
8385        return sod.state;
8386    }
8387    if (sod.state == Sods.error) {
8388        NotifyOnLoad(sod);
8389        return sod.state;
8390    }
8391    sod.state = Sods.pending;
8392    var mll = [];
8393    var depkeys = sod.depkeys;
8394
8395    if (depkeys != null) {
8396        var i;
8397        var fDepLoaded = true;
8398        var am = depkeys.length;
8399        var sodDep;
8400
8401        for (i = 0; i < am; i++) {
8402            var dep = NormalizeListViewSodKey(depkeys[i]);
8403
8404            sodDep = _v_dictSod[dep];
8405            if (sodDep == null)
8406                continue;
8407            if (!IsSodLoaded(sodDep)) {
8408                fDepLoaded = false;
8409                mll.push(sodDep);
8410            }
8411        }
8412        if (!fDepLoaded) {
8413            _v_qsod.push(sod);
8414            am = mll.length;
8415            for (i = 0; i < am; i++) {
8416                sodDep = mll[i];
8417                if (!IsSodLoaded(sodDep) && (bSync || sodDep.state != Sods.loading && sodDep.state != Sods.error)) {
8418                    LoadSodInternal(sodDep, bSync);
8419                }
8420            }
8421            if (!bSync) {
8422                return sod.state;
8423            }
8424        }
8425    }
8426    if (sod.reset) {
8427        if (Boolean(sod.url) && (window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx") && "undefined" != typeof DeltaManager$_ScriptLoader$_loadTargetInternal) {
8428            DeltaManager$_ScriptLoader$_loadTargetInternal(sod.url, sod, sod.url != null);
8429        }
8430    }
8431    if (IsSodLoaded(sod) || !bSync && sod.state == Sods.loading) {
8432        return sod.state;
8433    }
8434    if (bSync) {
8435        var scriptToRun = "";
8436        var req;
8437
8438        if (browseris.ie9down) {
8439            var xdr = new XDomainRequest();
8440            var loadedXDR = false;
8441
8442            xdr.onerror = function() {
8443                loadedXDR = true;
8444            };
8445            xdr.ontimeout = function() {
8446                loadedXDR = true;
8447            };
8448            xdr.onload = function() {
8449                loadedXDR = true;
8450            };
8451            xdr.open('GET', sod.url);
8452            xdr.send();
8453            while (!loadedXDR) {
8454                req = new XMLHttpRequest;
8455                req.open('GET', "/_layouts/15/blank.htm", false);
8456                req.setRequestHeader("If-Modified-Since", (new Date()).toUTCString());
8457                req.send(null);
8458            }
8459            scriptToRun = xdr.responseText;
8460        }
8461        else {
8462            req = new XMLHttpRequest;
8463            req.open('GET', sod.url, false);
8464            req.send(null);
8465            scriptToRun = req.responseText;
8466        }
8467        var ds = document.createElement('script');
8468
8469        (document.getElementsByTagName('head'))[0].appendChild(ds);
8470        var wasLoading = sod.state == Sods.loading;
8471
8472        ds.text = scriptToRun;
8473        if (!browseris.ie || browseris.ie9standardUp) {
8474            ds.src = sod.url;
8475        }
8476        if (wasLoading && typeof sod.s != 'undefined') {
8477            var oldScriptElement = sod.s;
8478
8479            sod.s = undefined;
8480            oldScriptElement.parentNode.removeChild(oldScriptElement);
8481            oldScriptElement.onreadystatechange = null;
8482            oldScriptElement.onload = null;
8483        }
8484        sod.state = Sods.loaded;
8485        if (wasLoading) {
8486            NotifyOnLoad(sod);
8487        }
8488        return sod.state;
8489    }
8490    else {
8491        var fStaticLoad = false;
8492        var head = (document.getElementsByTagName('head'))[0];
8493        var scriptElements = head.getElementsByTagName('script');
8494        var nScriptElements = scriptElements.length;
8495        var dummyScript = document.createElement('script');
8496
8497        dummyScript.src = sod.url;
8498        var sourceUrl = dummyScript.src;
8499
8500        dummyScript = null;
8501        for (var iElement = 0; iElement < nScriptElements; iElement++) {
8502            var source = scriptElements[iElement].src;
8503
8504            if (null != source && source.length > 0) {
8505                if (sourceUrl == source) {
8506                    fStaticLoad = true;
8507                    break;
8508                }
8509            }
8510        }
8511        if (fStaticLoad) {
8512            if (sod.reset) {
8513                if (Boolean(sod.url) && (window.location.pathname.toLowerCase()).endsWith("/_layouts/15/start.aspx") && "undefined" != typeof DeltaManager$_ScriptLoader$_loadTargetInternal) {
8514                    DeltaManager$_ScriptLoader$_loadTargetInternal(sod.url, sod, sod.url != null);
8515                }
8516            }
8517            else {
8518                if (sod.state != Sods.error)
8519                    sod.state = Sods.loaded;
8520                NotifyOnLoad(sod);
8521            }
8522        }
8523        else {
8524            sod.state = Sods.loading;
8525            var fn = GetOnLoad(sod);
8526            var onErrorFn = GetOnLoad(sod, true);
8527            var s = Define.loadScript(sod.url, fn, onErrorFn);
8528
8529            sod.s = s;
8530        }
8531        return sod.state;
8532    }
8533}
8534function GetOnLoad(sod, asErrorHandler) {
8535    var fn = function() {
8536        if (asErrorHandler)
8537            sod.state = Sods.error;
8538        NotifyOnLoad(sod);
8539    };
8540
8541    return fn;
8542}
8543function NotifyOnLoad(sod) {
8544    function CallSodCallbacks() {
8545        if (sod.qfn != null) {
8546            var sodError = sod.state == Sods.error;
8547
8548            while (sod.qfn.length > 0) {
8549                var callbackInfo = sod.qfn.shift();
8550                var callError = Boolean(callbackInfo.error) && (sodError || Boolean(callbackInfo.expectedType) && !IsFullNameDefined(callbackInfo.expectedType));
8551
8552                if (callError) {
8553                    callbackInfo.error();
8554                }
8555                else if (!sodError) {
8556                    callbackInfo.success();
8557                }
8558            }
8559        }
8560    }
8561    var fn2 = function() {
8562        var sodError = sod.state == Sods.error;
8563
8564        sod.reset = false;
8565        if (sod.key == "listview.js") {
8566            ResetListViewSods(false);
8567        }
8568        if (!sodError) {
8569            sod.state = Sods.loaded;
8570            while (_v_qsod.length > 0) {
8571                var sodParent = _v_qsod.pop();
8572
8573                if (sodParent.state == Sods.pending) {
8574                    LoadSod(sodParent);
8575                    break;
8576                }
8577            }
8578        }
8579        CallSodCallbacks();
8580        if (_v_qsod.length == 0 && AreAllSodsLoaded() && !sodError) {
8581            var registerFunc = function() {
8582                var rWsa = GetRUMWSA();
8583
8584                if (IsNullOrUndefined(rWsa))
8585                    return;
8586                var isMDS = typeof g_mdsReady != "undefined" && Boolean(g_mdsReady);
8587
8588                if (isMDS && typeof g_MDSPageLoaded != "undefined" && Boolean(g_MDSPageLoaded)) {
8589                    if (!rWsa.get_IsMDSBlockCollected()) {
8590                        var adm = asyncDeltaManager;
8591
8592                        if (!IsNullOrUndefined(adm)) {
8593                            rWsa.AddMDSBlock(adm._admtt);
8594                        }
8595                    }
8596                    rWsa.AddTTLB();
8597                }
8598            };
8599
8600            if (!(typeof g_mdsReady != "undefined" && Boolean(g_mdsReady))) {
8601                var rumSod = _v_dictSod['sp.core.js'];
8602
8603                if (IsNullOrUndefined(rumSod)) {
8604                    return;
8605                }
8606            }
8607            EnsureScriptFunc('SP.core.js', "SP.RUMLogger", registerFunc);
8608        }
8609    };
8610
8611    if (browseris.ie8down) {
8612        setTimeout(fn2, 0);
8613    }
8614    else {
8615        fn2();
8616    }
8617}
8618function EnsureScript(key, typ, fn, bSync, errorFn, expectedTypeName) {
8619    if (Boolean(bSync) && Boolean(errorFn)) {
8620        throw new Error("bSync==true && errorFn");
8621    }
8622    var run = true;
8623    var nkey = NormalizeSodKey(key);
8624    var sod = _v_dictSod[nkey];
8625
8626    if (sod != null && sod.reset) {
8627        run = false;
8628    }
8629    if (typ != 'undefined' && run) {
8630        if (fn != null)
8631            fn();
8632        return true;
8633    }
8634    LoadSodByKey(key, fn, bSync, errorFn, expectedTypeName);
8635    if (run) {
8636        return true;
8637    }
8638    return false;
8639}
8640function EnsureScriptFunc(key, typ, fn, errorFn) {
8641    EnsureScript(key, TypeofFullName(typ), fn, false, errorFn, typ);
8642}
8643function EnsureScriptParams() {
8644    if (arguments.length < 2) {
8645        return;
8646    }
8647    var args = arguments;
8648    var key = Array.prototype.shift.call(args);
8649    var func = Array.prototype.shift.call(args);
8650    var fn = function() {
8651        var fParts = func.split(".");
8652        var dynFuncRef = window;
8653
8654        for (var i = 0, len = fParts.length; i < len; i++) {
8655            dynFuncRef = dynFuncRef[fParts[i]];
8656        }
8657        ;
8658        var funcRef = dynFuncRef;
8659
8660        funcRef.apply(null, args);
8661    };
8662
8663    EnsureScriptFunc(key, func, fn);
8664}
8665function NormalizeSodKey(key) {
8666    var lowerCaseKey = key.toLowerCase();
8667    var lckl = lowerCaseKey.length;
8668
8669    if (lckl >= 3 && ".js" == lowerCaseKey.substr(lckl - 3)) {
8670        key = lowerCaseKey;
8671    }
8672    else if (lowerCaseKey.indexOf(".resx") > 0) {
8673        var index = lowerCaseKey.indexOf(".resx");
8674
8675        key = (key.substr(0, index + 5)).toLowerCase() + key.substr(index + 5);
8676    }
8677    return key;
8678}
8679function ArrayIndexOf(array, item, startIdx) {
8680    if (typeof item === "undefined")
8681        return -1;
8682    var len = array.length;
8683
8684    if (len !== 0) {
8685        startIdx = startIdx - 0;
8686        if (isNaN(startIdx)) {
8687            startIdx = 0;
8688        }
8689        else {
8690            if (isFinite(startIdx)) {
8691                startIdx = startIdx - startIdx % 1;
8692            }
8693            if (startIdx < 0) {
8694                startIdx = Math.max(0, len + startIdx);
8695            }
8696        }
8697        for (var i = startIdx; i < len; i++) {
8698            if (typeof array[i] !== "undefined" && array[i] === item) {
8699                return i;
8700            }
8701        }
8702    }
8703    return -1;
8704}
8705function SodCloneEvent(evt) {
8706    var e;
8707
8708    if (browseris.ie) {
8709        e = document.createEventObject(evt);
8710    }
8711    else {
8712        e = document.createEvent("MouseEvents");
8713        e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
8714    }
8715    return e;
8716}
8717function SodDispatchEvent(key, typ, evt) {
8718    var e = SodCloneEvent(evt);
8719    var fn;
8720
8721    if (browseris.ie) {
8722        fn = function() {
8723            e.srcElement.fireEvent("onclick", e);
8724        };
8725    }
8726    else {
8727        var t = evt.target;
8728
8729        fn = function() {
8730            t.dispatchEvent(e);
8731        };
8732    }
8733    if (!EnsureScript(key, typ, fn)) {
8734        if (browseris.ie)
8735            evt.cancelBubble = true;
8736        else
8737            evt.stopPropagation();
8738    }
8739}
8740function AddTabHeadHandler(tid, fn) {
8741    var li = document.getElementById(tid);
8742
8743    if (li != null) {
8744        var a = (li.getElementsByTagName('A'))[0];
8745
8746        AddEvtHandler(a, 'onclick', fn);
8747    }
8748}
8749function LoadWPAdderOnDemand() {
8750    if (typeof loadWPAdderCallback == 'function') {
8751        EnsureScriptParams("WPAdderClass", "WPAdderClassLoad", loadWPAdderCallback);
8752    }
8753}
8754function showSaveConflictDialog(lastModifiedUserId, continueStatusHtml, mergeChangesUrl, mergeChangesStatusHtml, discardScript, overwriteScript) {
8755    EnsureScriptParams("ribbon", "ribbon.showSaveConflictDialog", lastModifiedUserId, continueStatusHtml, mergeChangesUrl, mergeChangesStatusHtml, discardScript, overwriteScript);
8756}
8757function ClkElmt(e) {
8758    if (browseris.ie)
8759        e.click();
8760    else
8761        FFClick(e);
8762}
8763function EnsureSelectionHandlerOnFocus(evt, cbx, ctxNum) {
8764    EnsureScriptFunc("core.js", "EnsureSelectionHandlerDeferred", function() {
8765        DeferCall("EnsureSelectionHandlerOnFocusDeferred", evt, cbx, ctxNum);
8766    });
8767}
8768function EnsureSelectionHandler(evt, tab, ctxNum) {
8769    EnsureScriptFunc("core.js", "EnsureSelectionHandlerDeferred", function() {
8770        DeferCall("EnsureSelectionHandlerDeferred", evt, tab, ctxNum);
8771    });
8772}
8773function StopEvt(evt) {
8774    if (!browseris.ie)
8775        evt.stopPropagation();
8776}
8777function AddEvtHandler(ele, strEvt, func, useCapture) {
8778    if (Boolean(ele.addEventListener)) {
8779        useCapture = typeof useCapture != "undefined" && useCapture != null ? useCapture : false;
8780        ele.addEventListener(strEvt.substr(2), func, useCapture);
8781    }
8782    else if (Boolean(ele.attachEvent)) {
8783        ele.attachEvent(strEvt, func);
8784    }
8785}
8786function RemoveEvtHandler(ele, strEvt, func, useCapture) {
8787    if (Boolean(ele.removeEventListener)) {
8788        useCapture = typeof useCapture != "undefined" && useCapture != null ? useCapture : false;
8789        ele.removeEventListener(strEvt.substr(2), func, useCapture);
8790    }
8791    else if (Boolean(ele.detachEvent)) {
8792        ele.detachEvent(strEvt, func);
8793    }
8794}
8795function HideListViewRows(sid) {
8796    var t = document.getElementById(sid);
8797
8798    if (t == null)
8799        return;
8800    resetSelectAllCbx(t);
8801    var inplviewHash = ajaxNavigate.getParam("InplviewHash");
8802
8803    if (null == inplviewHash)
8804        return;
8805    var strHash = inplviewHash.substr(0, 42);
8806
8807    strHash = strHash.replace(/--/g, "-");
8808    if (sid.length == 77)
8809        sid = sid.substr(39);
8810    else {
8811        var ctxId;
8812        var myCtx;
8813
8814        if (sid.indexOf("onetidDoclibViewTbl") != 0)
8815            return;
8816        sid = sid.substr(19);
8817        if (sid == '0') {
8818            if (t.className.indexOf("ms-emptyView") >= 0)
8819                return;
8820            for (ctxId in g_ctxDict) {
8821                myCtx = g_ctxDict[ctxId];
8822                sid = myCtx.view;
8823                break;
8824            }
8825        }
8826        else {
8827            myCtx = g_ctxDict['ctx' + sid];
8828            sid = myCtx.view;
8829        }
8830    }
8831    if (strHash != sid)
8832        return;
8833    EnsureScriptParams("core.js", "AddCssClassToElement", t, "s4-hide-tr");
8834}
8835function resetSelectAllCbx(tab) {
8836    var selectAllCbx = getSelectAllCbxFromTable(tab);
8837
8838    if (selectAllCbx != null)
8839        selectAllCbx.checked = false;
8840}
8841function getSelectAllCbxFromTable(tab) {
8842    if (tab == null)
8843        return null;
8844    var rows = tab.rows;
8845
8846    if (Boolean(rows) && rows.length > 0) {
8847        var headerRow = rows[0];
8848
8849        if (!Boolean(headerRow.className.indexOf("ms-viewheadertr"))) {
8850            var cells = headerRow.cells;
8851
8852            if (cells.length > 0) {
8853                var cbx = (cells[0].getElementsByTagName("INPUT"))[0];
8854
8855                if (cbx != null)
8856                    return cbx;
8857                cbx = cells[0].querySelector(".ms-selectall-span");
8858                if (cbx != null)
8859                    return cbx;
8860            }
8861        }
8862    }
8863    return null;
8864}
8865var g_pageIsDeRibboned;
8866
8867function WpClick(evt) {
8868    if (Boolean(g_pageIsDeRibboned))
8869        return;
8870    var s = GetEventSrcElement(evt);
8871    var p = s;
8872
8873    while (p != null && p.tagName != "BODY" && (p.className == null || p.className.indexOf == null || p.className.indexOf('s4-wpcell') < 0)) {
8874        if (p.tagName == 'A' && p.getAttribute('data-sp-continueWPSelect') == null)
8875            return;
8876        if (p.getAttribute('data-sp-cancelWPSelect') != null)
8877            return;
8878        if (p.tagName == 'DIV' && p.className != null && p.className.indexOf('s4-ctx') != -1)
8879            return;
8880        if (p.tagName == 'TH' && p.className != null && p.className.indexOf('ms-vh2') != -1)
8881            return;
8882        p = p.parentNode;
8883    }
8884    if (p != null && p.tagName != "BODY") {
8885        EnsureScriptParams("ribbon", "SelectWp", p);
8886    }
8887}
8888function WpKeyUp(evt) {
8889    var focusElt = GetEventSrcElement(evt);
8890
8891    if (evt.keyCode == 32 && Boolean(focusElt) && focusElt.tagName == "INPUT" && (HasCssClass(focusElt, "s4-selectAllCbx") || HasCssClass(focusElt, "s4-itm-cbx")))
8892        WpClick(evt);
8893}
8894function WzClick(evt, zid) {
8895    var s = GetEventSrcElement(evt);
8896    var p = s;
8897
8898    while (p != null) {
8899        var z = p.getAttribute("ZoneID");
8900
8901        if (z == zid)
8902            break;
8903        if (p.tagName == 'A')
8904            return;
8905        p = p.parentNode;
8906    }
8907    if (p != null) {
8908        EnsureScriptParams("ribbon", "SelectWz", p, zid);
8909    }
8910}
8911function WpCbxSelect(evt) {
8912    var cbx = GetEventSrcElement(evt);
8913    var currentlySelected = cbx.checked;
8914
8915    if (!currentlySelected)
8916        WpClick(evt);
8917    else
8918        EnsureScriptParams("ribbon", "DeselectWpWz");
8919    TrapMenuClick(evt);
8920    if (evt.type != "keyup")
8921        cbx.className = "ms-webpart-checkboxHide";
8922}
8923function WpCbxKeyHandler(evt) {
8924    var kCode;
8925
8926    if (browseris.ie)
8927        kCode = evt.keyCode;
8928    else
8929        kCode = evt.which;
8930    if (kCode == 13)
8931        WpCbxSelect(evt);
8932}
8933function PopoutMenuMaybeSwapImage(anchorId, iconId, src) {
8934    var anchor = document.getElementById(anchorId);
8935
8936    if (Boolean(anchor) && typeof anchor != 'undefined') {
8937        if (anchor.rel == '_spPopoutMenuIsOpen')
8938            return;
8939        SwapImage(iconId, src);
8940    }
8941}
8942function PopoutMenuMaybeSwapImageClustered(anchorId, iconId, src, x, y, height, width) {
8943    var anchor = document.getElementById(anchorId);
8944
8945    if (Boolean(anchor) && typeof anchor != 'undefined') {
8946        if (anchor.rel == '_spPopoutMenuIsOpen')
8947            return;
8948        var span = document.getElementById(iconId);
8949        var img = span.firstChild;
8950
8951        SwapImageInternal(img, src);
8952        span.style.height = height + "px";
8953        span.style.width = width + "px";
8954        img.style.top = "-" + y + "px";
8955        img.style.left = "-" + x + "px";
8956    }
8957}
8958function SwapImage(id, src) {
8959    var img = document.getElementById(id);
8960
8961    SwapImageInternal(img, src);
8962}
8963function SwapImageInternal(img, src) {
8964    if (Boolean(img) && typeof img != 'undefined')
8965        img.src = src;
8966}
8967function GetViewportHeight() {
8968    return document.documentElement.clientHeight;
8969}
8970function GetViewportWidth() {
8971    return document.documentElement.clientWidth;
8972}
8973var g_viewportHeight, g_viewportWidth, g_wpadderHeight, g_setWidth, g_setWidthInited, g_workspaceResizedHandlers, g_setScrollPos;
8974var g_frl;
8975
8976function FixRibbonAndWorkspaceDimensionsForResize() {
8977    if (g_frl)
8978        return;
8979    var vph = GetViewportHeight();
8980    var vpw = GetViewportWidth();
8981
8982    if (g_viewportHeight == vph && g_viewportWidth == vpw) {
8983        return;
8984    }
8985    g_viewportHeight = vph;
8986    g_viewportWidth = vpw;
8987    window.setTimeout(FixRibbonAndWorkspaceDimensions, 0);
8988}
8989function FixRibbonAndWorkspaceDimensions() {
8990    g_frl = true;
8991    var elmRibbon = GetCachedElement("s4-ribbonrow");
8992    var elmWorkspace = GetCachedElement("s4-workspace");
8993    var elmTitleArea = GetCachedElement("s4-titlerow");
8994    var elmBodyTable = GetCachedElement("s4-bodyContainer");
8995    var elmFooter = GetCachedElement("footer");
8996    var elmOverlay = GetCachedElement("ms-core-overlay");
8997    var elmGlobalNavBox = GetCachedElement("globalNavBox");
8998    var setWidth;
8999
9000    if (!Boolean(elmRibbon) || !Boolean(elmWorkspace) || !Boolean(elmBodyTable)) {
9001        CallWorkspaceResizedEventHandlers();
9002        return;
9003    }
9004    if (!g_setWidthInited) {
9005        setWidth = true;
9006        if (elmWorkspace.className.indexOf("s4-nosetwidth") > -1)
9007            setWidth = false;
9008        g_setWidth = setWidth;
9009        g_setWidthInited = true;
9010    }
9011    else {
9012        setWidth = g_setWidth;
9013    }
9014    var baseRibbonHeight = 0;
9015    var isDialog = Boolean((ajaxNavigate.get_search()).match(RegExp("[?&]IsDlg=1")));
9016
9017    if (Boolean(elmGlobalNavBox) && !isDialog) {
9018        baseRibbonHeight = RibbonIsMinimized() ? elmGlobalNavBox.offsetHeight : 126;
9019    }
9020    else {
9021        baseRibbonHeight = RibbonIsMinimized() ? 35 : 126;
9022    }
9023    var ribbonHeight = baseRibbonHeight + g_wpadderHeight;
9024
9025    if (GetCurrentEltStyle(elmRibbon, "visibility") == "hidden") {
9026        ribbonHeight = 0;
9027    }
9028    if (Boolean(elmTitleArea)) {
9029        if (RibbonIsMinimized()) {
9030            elmTitleArea.className = elmTitleArea.className.replace(RegExp("s4-titlerowhidetitle"), "");
9031            elmTitleArea.style.display = "block";
9032        }
9033        else {
9034            var cn = elmTitleArea.className;
9035
9036            if (cn.indexOf("s4-titlerowhidetitle") < 0)
9037                elmTitleArea.className = cn.concat("s4-titlerowhidetitle");
9038            elmTitleArea.style.display = "none";
9039        }
9040    }
9041    elmRibbon.style.height = String(ribbonHeight) + "px";
9042    var ribbonElement = GetCachedElement("s4-ribbonrow");
9043    var webPartAdderElement = ribbonElement.querySelector(".ms-core-webpartadder");
9044
9045    if (Boolean(webPartAdderElement) && GetCurrentEltStyle(webPartAdderElement, "position") == "absolute") {
9046        var wpaTop = ribbonHeight;
9047        var ribbonHeaderElement = document.getElementById("Ribbon");
9048
9049        if (Boolean(ribbonHeaderElement)) {
9050            var ribbonTabBodyElement = ribbonHeaderElement.querySelector(".ms-cui-tabContainer");
9051
9052            if (RibbonIsMinimized() || !Boolean(ribbonTabBodyElement))
9053                wpaTop = AbsTop(ribbonHeaderElement) + ribbonHeaderElement.offsetHeight;
9054            else
9055                wpaTop = AbsTop(ribbonTabBodyElement) + ribbonTabBodyElement.offsetHeight;
9056            wpaTop -= AbsTop(ribbonElement);
9057            webPartAdderElement.style.top = wpaTop.toString() + "px";
9058        }
9059        else {
9060            webPartAdderElement.style.top = baseRibbonHeight.toString() + "px";
9061        }
9062    }
9063    var vph = g_viewportHeight;
9064
9065    if (null === vph) {
9066        vph = GetViewportHeight();
9067        g_viewportHeight = vph;
9068    }
9069    var newWorkspaceHeight = vph - AbsTop(elmWorkspace);
9070
9071    if (newWorkspaceHeight < 0)
9072        newWorkspaceHeight = 0;
9073    if (!browseris.ipad || !isDialog)
9074        elmWorkspace.style.height = String(newWorkspaceHeight) + "px";
9075    if (Boolean(elmOverlay) && !isDialog) {
9076        var overlayHeight = newWorkspaceHeight;
9077
9078        if (overlayHeight < 0)
9079            overlayHeight = 0;
9080        elmOverlay.style.height = String(overlayHeight) + "px";
9081    }
9082    if (setWidth) {
9083        elmWorkspace.style.width = String(document.documentElement.clientWidth) + "px";
9084        if (elmBodyTable.offsetWidth < elmWorkspace.clientWidth)
9085            elmBodyTable.style.width = String(elmWorkspace.clientWidth) + "px";
9086    }
9087    var isIE7 = browseris.ie && browseris.iever == 7 && !browseris.ie8standard;
9088
9089    if (!g_setScrollPos) {
9090        if (browseris.firefox && browseris.firefox36up)
9091            window.scrollTo(0, 0);
9092        if (Boolean((ajaxNavigate.get_search()).match(RegExp("[?&]IsDlg=1")))) {
9093            if (!isIE7 || elmWorkspace.scrollHeight < elmWorkspace.clientHeight)
9094                elmWorkspace.style.overflowY = "auto";
9095        }
9096        var scrollElem = document.getElementById("_maintainWorkspaceScrollPosition");
9097
9098        if (scrollElem != null && scrollElem.value != null) {
9099            var scrollValue = Number(scrollElem.value);
9100            var blogList = GetElementByClassName(elmWorkspace, "ms-blog-postList");
9101
9102            if (blogList != null && scrollValue > 0) {
9103                var listTop = (blogList.getBoundingClientRect()).top;
9104
9105                elmWorkspace.scrollTop = (blogList.getBoundingClientRect()).top - (elmWorkspace.getBoundingClientRect()).top;
9106            }
9107            else {
9108                elmWorkspace.scrollTop = scrollValue;
9109            }
9110        }
9111        g_setScrollPos = true;
9112    }
9113    CallWorkspaceResizedEventHandlers();
9114    g_frl = false;
9115}
9116function CallWorkspaceResizedEventHandlers() {
9117    var handlers = [].concat(g_workspaceResizedHandlers);
9118
9119    for (var i = 0, wLen = handlers.length; i < wLen; i++) {
9120        handlers[i]();
9121    }
9122}
9123function RibbonIsMinimized() {
9124    if (g_spribbon.isInited) {
9125        return g_spribbon.isMinimized;
9126    }
9127    else {
9128        if (typeof _ribbon == "undefined" || null === _ribbon)
9129            return true;
9130        else
9131            return typeof _ribbon.buildMinimized == "undefined" ? undefined : _ribbon.buildMinimized;
9132    }
9133}
9134var g_spribbon;
9135
9136function OnRibbonMinimizedChanged(ribbonMinimized) {
9137    if ((ajaxNavigate.get_search()).indexOf("IsDlg=1") != -1)
9138        return;
9139    ExecuteOrDelayUntilScriptLoaded(function() {
9140        AnimateRibbonMinimizedChanged(ribbonMinimized);
9141    }, "core.js");
9142}
9143function PreRibbonTabSwitched(ribbonMinimized) {
9144    ExecuteOrDelayUntilScriptLoaded(function() {
9145        g_fSkipAnimation = false;
9146        PrepareRibbonForAnimation(ribbonMinimized, true);
9147    }, "core.js");
9148}
9149function CatchCreateError(strIgnore1, strIgnore2, strIgnore3) {
9150    return true;
9151}
9152function ExpandBody(guid, anchor) {
9153    if (typeof MSOWebPartPageFormName == "undefined")
9154        return false;
9155    var frm = document.forms[MSOWebPartPageFormName];
9156    var CAML_Expand = frm.elements['CAML_Expand'];
9157
9158    CAML_Expand.value = CAML_Expand.value.concat(guid);
9159    frm.action = frm.action.concat("#" + anchor);
9160    frm.submit();
9161    return false;
9162}
9163function CollapseBody(guid, anchor) {
9164    if (typeof MSOWebPartPageFormName == "undefined")
9165        return false;
9166    var frm = document.forms[MSOWebPartPageFormName];
9167    var reg = new RegExp("\{", "g");
9168
9169    guid = guid.replace(reg, "\\\{");
9170    reg = new RegExp("\}", "g");
9171    guid = guid.replace(reg, "\\\}");
9172    reg = new RegExp(guid, "g");
9173    var CAML_Expand = frm.elements['CAML_Expand'];
9174
9175    CAML_Expand.value = CAML_Expand.value.replace(reg, "");
9176    var CAML_ShowOriginalEmailBody = frm.elements['CAML_ShowOriginalEmailBody'];
9177
9178    CAML_ShowOriginalEmailBody.value = CAML_ShowOriginalEmailBody.value.replace(reg, "");
9179    frm.action = frm.action.concat("#" + anchor);
9180    frm.submit();
9181    return false;
9182}
9183function ShowQuotedText(guid, anchor) {
9184    if (typeof MSOWebPartPageFormName == "undefined")
9185        return false;
9186    var frm = document.forms[MSOWebPartPageFormName];
9187    var CAML_ShowOriginalEmailBody = frm.elements['CAML_ShowOriginalEmailBody'];
9188
9189    CAML_ShowOriginalEmailBody.value = CAML_ShowOriginalEmailBody.value.concat(guid);
9190    if (frm.action.indexOf("#") > 0) {
9191        frm.action = frm.action.substr(0, frm.action.indexOf("#"));
9192    }
9193    frm.action = frm.action.concat("#" + anchor);
9194    frm.submit();
9195    return false;
9196}
9197function HideQuotedText(guid, anchor) {
9198    if (typeof MSOWebPartPageFormName == "undefined")
9199        return false;
9200    var frm = document.forms[MSOWebPartPageFormName];
9201    var reg = new RegExp("\{", "g");
9202
9203    guid = guid.replace(reg, "\\\{");
9204    reg = new RegExp("\}", "g");
9205    guid = guid.replace(reg, "\\\}");
9206    reg = new RegExp(guid, "g");
9207    var CAML_ShowOriginalEmailBody = frm.elements['CAML_ShowOriginalEmailBody'];
9208
9209    CAML_ShowOriginalEmailBody.value = CAML_ShowOriginalEmailBody.value.replace(reg, "");
9210    if (frm.action.indexOf("#") > 0) {
9211        frm.action = frm.action.substr(0, frm.action.indexOf("#"));
9212    }
9213    frm.action = frm.action.concat("#" + anchor);
9214    frm.submit();
9215    return false;
9216}
9217var v_stsOpenDoc2;
9218var v_strStsOpenDoc2;
9219
9220function StsOpenEnsureEx2(szProgId) {
9221    if (v_stsOpenDoc2 == null || v_strStsOpenDoc2 != szProgId) {
9222        v_stsOpenDoc2 = null;
9223        v_strStsOpenDoc2 = null;
9224        var plugin;
9225
9226        if (Boolean(window.ActiveXObject)) {
9227            try {
9228                v_stsOpenDoc2 = new ActiveXObject(szProgId);
9229                v_strStsOpenDoc2 = szProgId;
9230            }
9231            catch (e) {
9232                v_stsOpenDoc2 = null;
9233                v_strStsOpenDoc2 = null;
9234            }
9235            ;
9236        }
9237        else if (IsSupportedMacBrowser() && szProgId.indexOf("SharePoint.OpenDocuments") >= 0) {
9238            plugin = CreateMacPlugin();
9239            if (plugin != null) {
9240                v_stsOpenDoc2 = plugin;
9241                v_strStsOpenDoc2 = "SharePoint.MacPlugin";
9242            }
9243        }
9244        else if (IsSupportedNPApiBrowserOnWin() && szProgId.indexOf("SharePoint.OpenDocuments") >= 0) {
9245            plugin = CreateNPApiOnWindowsPlugin("application/x-sharepoint");
9246            if (plugin != null) {
9247                v_stsOpenDoc2 = plugin;
9248                v_strStsOpenDoc2 = "SharePoint.FFWinPlugin";
9249            }
9250        }
9251    }
9252    return v_stsOpenDoc2;
9253}
9254function HasValidUrlPrefix(url) {
9255    var urlLower = url.toLowerCase();
9256
9257    if (-1 == urlLower.search(RegExp("^http://")) && -1 == urlLower.search(RegExp("^https://")))
9258        return false;
9259    return true;
9260}
9261function IsLeavingObject(ev, obj) {
9262    var to;
9263
9264    if (!Boolean(ev))
9265        ev = window.event;
9266    to = Boolean(ev.toElement) ? ev.toElement : ev.relatedTarget;
9267    if (null == to)
9268        return false;
9269    while (to != obj && to != null)
9270        to = to.parentNode;
9271    return to != obj;
9272}
9273var deleteInstance;
9274
9275function DeleteItemConfirmation() {
9276    var message = "";
9277
9278    if (typeof ItemIsCopy != "undefined")
9279        if (ItemIsCopy)
9280            message = Strings.STS.L_NotifyThisIsCopy_Text;
9281    if (cascadeDeleteWarningMessage != "") {
9282        message += cascadeDeleteWarningMessage;
9283    }
9284    if (recycleBinEnabled == 1 && deleteInstance != 1)
9285        message += Strings.STS.L_STSRecycleConfirm_Text;
9286    else
9287        message += Strings.STS.L_STSDelConfirm_Text;
9288    return confirm(message);
9289}
9290function DeleteInstanceConfirmation() {
9291    deleteInstance = 1;
9292    return DeleteItemConfirmation();
9293}
9294function CancelMultiPageConfirmation(redirectUrl) {
9295    var message = "";
9296
9297    if (recycleBinEnabled == 1)
9298        message = Strings.STS.L_DeletePartialResponse1_text;
9299    else
9300        message = Strings.STS.L_DeletePartialResponse2_text;
9301    if (confirm(message) == true)
9302        return true;
9303    else
9304        Nav.navigate(redirectUrl);
9305    return false;
9306}
9307function RestoreItemVersionConfirmation() {
9308    var message = Strings.STS.L_Version_Restore_Confirm_Text;
9309
9310    return confirm(message);
9311}
9312function DeleteItemVersionConfirmation(bRecycleBinEnabled) {
9313    if (bRecycleBinEnabled)
9314        return confirm(Strings.STS.L_Version_Recycle_Confirm_Text);
9315    else
9316        return confirm(Strings.STS.L_Version_Delete_Confirm_Text);
9317}
9318function DeleteUserInfoItemConfirmation() {
9319    var message = Strings.STS.L_User_Delete_Confirm_Text;
9320
9321    return confirm(message);
9322}
9323function UnlinkCopyConfirmation(strItemUrl) {
9324    return confirm(Strings.STS.L_ConfirmUnlinkCopy_Text);
9325}
9326function SupportsNavigateHttpFolder() {
9327    return browseris.ie5up;
9328}
9329function MtgDeletePageConfirm() {
9330    var text;
9331
9332    if ((document.getElementById("MtgTlPart_PageType")).value == 'MtgTlPart_LocalPage')
9333        text = Strings.STS.L_DeleteConfirm_Text;
9334    else
9335        text = Strings.STS.L_DeleteGlobalConfirm_Text + Strings.STS.L_DeleteConfirm_Text;
9336    return confirm(text);
9337}
9338function IsImgLibJssLoaded() {
9339    if (typeof fImglibJssLoaded != "undefined")
9340        return fImglibJssLoaded;
9341    return false;
9342}
9343function GetFirstChildElement(e) {
9344    for (var i = 0; i < e.childNodes.length; i++) {
9345        if (e.childNodes[i].nodeType == 1)
9346            return e.childNodes[i];
9347    }
9348    return null;
9349}
9350function TestGCObject(GCObject) {
9351    if (browseris.ie55up && typeof GCObject == "undefined" || GCObject == null || typeof GCObject.object == 'undefined' || GCObject.object == null)
9352        return false;
9353    return true;
9354}
9355function MMU_GetMenuFromClientId(clientId) {
9356    return document.getElementById(clientId);
9357}
9358function MMU_EcbLinkOnKeyDown(menu, ecbLink, e) {
9359    if (e == null) {
9360        e = window.event;
9361        if (e == null)
9362            return false;
9363    }
9364    var nKeyCode = GetEventKeyCode(e);
9365    var hasHref = ecbLink.href != null && ecbLink.href.length > 0;
9366
9367    if ((e.shiftKey || !hasHref) && nKeyCode == 13 || nKeyCode == 32 || e.altKey && nKeyCode == 40) {
9368        var image = byid(ecbLink.id + "_ti");
9369
9370        if (image == null) {
9371            var serverClientId = ecbLink.getAttribute("serverclientid");
9372
9373            if (serverClientId != null && serverClientId.length > 0) {
9374                image = byid(serverClientId + "_ti");
9375            }
9376        }
9377        if (image != null) {
9378            ClkElmt(image);
9379        }
9380        else {
9381            ClkElmt(ecbLink);
9382        }
9383        return false;
9384    }
9385    else {
9386        return true;
9387    }
9388}
9389var firstCalled;
9390var _callbackinitdelayed;
9391
9392function DeferWebFormInitCallback() {
9393    if (typeof WebForm_InitCallback == 'function' && "undefined" == typeof WebForm_InitCallback["deferred"] && typeof window['_WebForm_InitCallback'] == 'undefined')
9394        window['_WebForm_InitCallback'] = window['WebForm_InitCallback'];
9395    function funcInitCallback() {
9396        if (firstCalled) {
9397            firstCalled = false;
9398            _callbackinitdelayed = true;
9399            _spBodyOnLoadFunctionNames.push('WebForm_InitCallback');
9400        }
9401        else {
9402            _callbackinitdelayed = false;
9403            if (typeof window._WebForm_InitCallback == 'function')
9404                window._WebForm_InitCallback();
9405        }
9406    }
9407    ;
9408    funcInitCallback["deferred"] = true;
9409    window['WebForm_InitCallback'] = funcInitCallback;
9410    if (typeof WebForm_DoCallback == 'function' && "undefined" == typeof WebForm_DoCallback["deferred"] && typeof window['_WebForm_DoCallback'] == 'undefined')
9411        window['_WebForm_DoCallback'] = window['WebForm_DoCallback'];
9412    function funcDoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
9413        if (_callbackinitdelayed) {
9414            _callbackinitdelayed = false;
9415            if (_spBodyOnLoadFunctionNames != null) {
9416                var count = _spBodyOnLoadFunctionNames.length;
9417
9418                for (var i = 0; i < count; i++) {
9419                    if (_spBodyOnLoadFunctionNames[i] == "WebForm_InitCallback") {
9420                        _spBodyOnLoadFunctionNames.splice(i, 1);
9421                        break;
9422                    }
9423                }
9424            }
9425            if (typeof window._WebForm_InitCallback == 'function')
9426                window._WebForm_InitCallback();
9427        }
9428        window['_WebForm_DoCallback'](eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync);
9429    }
9430    ;
9431    funcDoCallback["deferred"] = true;
9432    window['WebForm_DoCallback'] = funcDoCallback;
9433}
9434function _ribbonShouldFixRtlHeaders(isRtl) {
9435    return browseris.ie && browseris.iever == 7 && !browseris.ie8standard && isRtl;
9436}
9437var g_spDragDropUpload;
9438
9439function WPQRegisterDragDropUpload() {
9440    var registerFunc = function() {
9441        for (var wpqKey in g_spDragDropUpload) {
9442            var uploadInfo = g_spDragDropUpload[wpqKey];
9443            var WPQDiv = document.getElementById(wpqKey);
9444
9445            if (WPQDiv != null && typeof WPQDiv != 'undefined') {
9446                registerDragUpload(WPQDiv, uploadInfo.serverUrl, uploadInfo.siteRelativeUrl, uploadInfo.listName, uploadInfo.rootFolder, uploadInfo.overwriteAll, uploadInfo.hideProgressBar, uploadInfo.refreshFunc, uploadInfo.preUploadFunc, uploadInfo.postUploadFunc, uploadInfo.checkPermissionFunc);
9447            }
9448        }
9449    };
9450
9451    EnsureScriptFunc('DragDrop.js', "registerDragUpload", registerFunc);
9452}
9453function SPDragUploadInfo(webPartId, serverUrl, siteRelativeUrl, listName, rootFolder, overwriteAll, hideProgressBar, refreshFunc, preUploadFunc, postUploadFunc, checkPermissionFunc) {
9454    this.webPartId = webPartId;
9455    this.serverUrl = serverUrl;
9456    this.siteRelativeUrl = siteRelativeUrl;
9457    this.listName = listName;
9458    this.rootFolder = rootFolder;
9459    this.overwriteAll = overwriteAll;
9460    this.hideProgressBar = hideProgressBar;
9461    this.refreshFunc = refreshFunc;
9462    this.preUploadFunc = preUploadFunc;
9463    this.postUploadFunc = postUploadFunc;
9464    this.checkPermissionFunc = checkPermissionFunc;
9465}
9466var g_QuickLaunchControlIds;
9467
9468function _registerCommonComponents() {
9469    SP.Ribbon.HelpPageComponent.registerWithPageManager();
9470    SP.Ribbon.UserInterfacePageComponent.registerWithPageManager();
9471}
9472function ExecuteAndRegisterBeginEndFunctions(script, beginFunc, endFunc, loadFunc) {
9473    RegisterBeginEndFunctions(script, script, beginFunc, endFunc, loadFunc);
9474    if (null != beginFunc) {
9475        beginFunc();
9476    }
9477    if (null != endFunc) {
9478        endFunc();
9479    }
9480    if (null != loadFunc) {
9481        loadFunc();
9482    }
9483}
9484function RegisterBeginEndFunctions(script, tag, beginFunc, endFunc, loadFunc) {
9485    if ("string" != typeof tag)
9486        throw "Unexpected";
9487    if (!(null == beginFunc || "function" == typeof beginFunc))
9488        throw "Unexpected";
9489    if (!(null == endFunc || "function" == typeof endFunc))
9490        throw "Unexpected";
9491    if (!(null == loadFunc || "function" == typeof loadFunc))
9492        throw "Unexpected";
9493    if (!g_supportFiles[tag]) {
9494        g_supportFiles[tag] = {
9495            tag: tag,
9496            scriptURI: new URI(script),
9497            beginFunc: beginFunc,
9498            endFunc: endFunc,
9499            loadFunc: loadFunc,
9500            executed: false
9501        };
9502    }
9503}
9504function RegisterModuleInit(scriptFileName, initFunc) {
9505    RegisterBeginEndFunctions(scriptFileName, scriptFileName, initFunc, null, null);
9506}
9507function SetElementStyle(ctlId, styleName) {
9508    var elmScope = document.getElementById(ctlId);
9509
9510    if (typeof elmScope != 'undefined' && elmScope != null && elmScope.className != styleName) {
9511        elmScope.className = styleName;
9512    }
9513}
9514function RemoveCachingParamsFromUrl(sourceUrl) {
9515    return RemoveQueryParameterFromUrl(RemoveQueryParameterFromUrl(sourceUrl, 'rev'), 'ctag');
9516}
9517function registerCssLink(cssLink, callback, bUnthemable) {
9518    _registerCssLink(cssLink, null, function(e) {
9519        if ("undefined" != typeof g_MinimalDownload && g_MinimalDownload && 'undefined' != typeof asyncDeltaManager && 'undefined' != typeof AsyncDeltaManager$_registerLinkCallback) {
9520            AsyncDeltaManager$_registerLinkCallback(e);
9521        }
9522        if ('function' == typeof callback) {
9523            callback(e);
9524        }
9525    }, null, bUnthemable);
9526}
9527function _ensureCssLink(cssLink, callback) {
9528    var ret = _registerCssLink(cssLink, null, null, callback);
9529
9530    if (ret == 0 && callback != null)
9531        callback();
9532    return ret;
9533}
9534function setAdditionalCssLinkAttributes(link, linkContent) {
9535    if (null == link || null == linkContent) {
9536        return;
9537    }
9538    var originalHref = linkContent["data-original-href"];
9539
9540    if (null != originalHref) {
9541        link.setAttribute("data-original-href", originalHref);
9542    }
9543}
9544function _registerCssLink(cssLink, head, callback, loadCompletedCallback, bUnthemable, linkContent) {
9545    var found = false;
9546    var retval = 0;
9547
9548    if (null == head) {
9549        head = (document.getElementsByTagName('head'))[0];
9550    }
9551    var useClientSideTheming = !bUnthemable && SPThemeUtils.UseClientSideTheming();
9552    var links = head.getElementsByTagName(useClientSideTheming ? 'style' : 'link');
9553    var linksCount = links.length;
9554    var sourceURL = useClientSideTheming ? cssLink : GetAbsoluteUrl(cssLink);
9555
9556    for (var j = 0; j < linksCount; j++) {
9557        if (links[j].rel == "stylesheet" && links[j].type == "text/css" || useClientSideTheming && links[j].hasAttribute("data-ThemingSource")) {
9558            var source = useClientSideTheming ? links[j].getAttribute("data-ThemingSource") : links[j].href;
9559
9560            if (null != source && source.length > 0) {
9561                if (sourceURL == source) {
9562                    var deleteAttrib = links[j].getAttribute("toDelete");
9563
9564                    if (Boolean(deleteAttrib))
9565                        links[j].removeAttribute("toDelete");
9566                    if (null != linkContent) {
9567                        setAdditionalCssLinkAttributes(links[j], linkContent);
9568                    }
9569                    found = true;
9570                    break;
9571                }
9572                if (RemoveCachingParamsFromUrl(sourceURL) == RemoveCachingParamsFromUrl(source)) {
9573                    return -1;
9574                }
9575            }
9576        }
9577    }
9578    if (useClientSideTheming && !found) {
9579        var newElement;
9580        var originalUrl;
9581
9582        if (null != linkContent) {
9583            originalUrl = linkContent["data-original-href"];
9584        }
9585        newElement = (Theming.GetPageManager()).AddCssLink(cssLink, originalUrl, null, loadCompletedCallback, null);
9586        if (null != callback) {
9587            callback(newElement);
9588        }
9589        retval = 1;
9590    }
9591    else if (!found) {
9592        var aLink = document.createElement("link");
9593
9594        aLink.rel = "stylesheet";
9595        aLink.type = "text/css";
9596        aLink.href = cssLink;
9597        head.appendChild(aLink);
9598        if (null != linkContent) {
9599            setAdditionalCssLinkAttributes(aLink, linkContent);
9600        }
9601        if (browseris.chrome || browseris.safari) {
9602            var pollInterval = 10;
9603            var startTime = Number(new Date());
9604            var maxPollTime = 500;
9605
9606            setTimeout(bindArguments(function CssLinkCallback(timestart, myLink) {
9607                if (myLink != null) {
9608                    if (typeof myLink.sheet == "undefined" || myLink.sheet == null || typeof myLink.sheet.cssRules == "undefined" || myLink.sheet.cssRules == null) {
9609                        if (Number(new Date()) - timestart < maxPollTime)
9610                            setTimeout(bindArguments(CssLinkCallback, timestart, myLink), pollInterval);
9611                        else if (typeof loadCompletedCallback == "function")
9612                            loadCompletedCallback();
9613                    }
9614                    else if (myLink.sheet.cssRules && typeof loadCompletedCallback == "function")
9615                        loadCompletedCallback();
9616                }
9617            }, startTime, aLink), pollInterval);
9618        }
9619        else {
9620            if (typeof loadCompletedCallback == "function") {
9621                $addHandler(aLink, 'load', loadCompletedCallback);
9622                if (Boolean(aLink.addEventListener))
9623                    aLink.addEventListener('error', loadCompletedCallback, false);
9624            }
9625        }
9626        if (null != callback) {
9627            callback(aLink);
9628        }
9629        retval = 1;
9630    }
9631    return retval;
9632}
9633function replacePlaceholderElement(elementId, markupText) {
9634    var el = document.getElementById(elementId);
9635    var el2 = document.createElement("span");
9636    var p = el.parentNode;
9637
9638    el2.innerHTML = markupText;
9639    var len = el2.childNodes.length;
9640
9641    switch (len) {
9642    case 0:
9643        break;
9644    case 1:
9645        p.replaceChild(el2.childNodes[0], el);
9646        break;
9647    default:
9648        for (var i = 0; i < len; i++) {
9649            p.insertBefore(el2.childNodes[0], el);
9650        }
9651        p.removeChild(el);
9652        break;
9653    }
9654}
9655function fIsNullOrUndefined(obj) {
9656    return typeof obj == "undefined" || obj == null;
9657}
9658function IsStrNullOrEmpty(str) {
9659    return str == null || str.length == 0;
9660}
9661function bindArguments() {
9662    var args = arguments;
9663    var fn = Array.prototype.shift.call(args);
9664
9665    return function() {
9666        return fn.apply(this, args);
9667    };
9668}
9669function OpenSuiteLinksJson() {
9670    var linksJson = null;
9671
9672    GetSuiteLinks(null, function(suiteLinks) {
9673        linksJson = suiteLinks;
9674    });
9675    return linksJson;
9676}
9677function RecordClick(strClickType, strClickData) {
9678    EnsureScriptFunc("sp.pageinstrumentation.js", "SP.PageInstrumentation.Clicks", function() {
9679        SP.PageInstrumentation.Clicks.recordClick(strClickType, strClickData);
9680    });
9681}
9682function RecordClickForPaging(strClickType, strClickData, strPageId) {
9683    EnsureScriptFunc("sp.pageinstrumentation.js", "SP.PageInstrumentation.Clicks", function() {
9684        SP.PageInstrumentation.Clicks.recordClickForPaging(strClickType, strClickData, strPageId);
9685    });
9686}
9687function RecordClickClientId(strClickType, clientId) {
9688    EnsureScriptFunc("sp.pageinstrumentation.js", "SP.PageInstrumentation.Clicks", function() {
9689        SP.PageInstrumentation.Clicks.recordClickClientId(strClickType, clientId);
9690    });
9691}
9692function LogRUMExtendedAction(actionName, actionId, actionGuid, actionDate, actionType) {
9693    EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
9694        var slapiInternal = SP.SlapiInternal;
9695        var action = new slapiInternal.RUMExtended();
9696
9697        action.ActionName = actionName;
9698        if (typeof actionId != 'undefined' && actionId != null) {
9699            action.ActionId = actionId;
9700        }
9701        if (typeof actionGuid != 'undefined' && actionGuid != null) {
9702            action.ActionGuid = actionGuid;
9703        }
9704        if (typeof actionDate != 'undefined' && actionDate != null) {
9705            action.ActionDate = actionDate;
9706        }
9707        else {
9708            action.ActionDate = (new Date()).getTime();
9709        }
9710        if (typeof actionType != 'undefined' && actionType != null) {
9711            action.ActionType = actionType;
9712        }
9713        WriteLog(action);
9714    });
9715}
9716function _AddTrySPListNextBanner(isList) {
9717    var bannerHtml = '\
9718<div class="ms-fullWidth" style="background-color:#F8F8F8;position:relative;">\
9719  <div class="ms-tableCell ms-verticalAlignMiddle" style="width:256px;background-color:#24BBED;">\
9720    <img src=' + StAttrQuote("/_layouts/15/images/PaintRoller.215x90x32.png?rev=43") + ' style="height:90px;width:215px;margin:auto 20px;">\
9721  </div>\
9722  <div class="ms-tableCell ms-verticalAlignTop ms-fullWidth" style="padding:16px">\
9723	<h2 style="color:#444">' + STSHtmlEncode(Boolean(isList) ? Strings.STS.L_ListNewLookHeading : Strings.STS.L_DocLibNewLookHeading) + '\
9724      <span class="ms-dlgTitleBtns" style="margin-top:-23px">\
9725        <a title=' + StAttrQuote(Strings.STS.L_DocLibNewLookDismiss) + ' class="ms-dlgCloseBtn" id="doclibNewLookClose" href="javascript:;">\
9726          <span style="padding: 8px; width: 16px; height: 16px; display: inline-block;">\
9727            <span class="s4-clust" style="width: 16px; height: 16px; overflow: hidden; display: inline-block; position: relative;">\
9728              <img class="ms-dlgCloseBtnImg" style="left: 0px !important; top: -645px !important; position: absolute;" alt=' + StAttrQuote(Strings.STS.L_DocLibNewLookDismiss) + ' src=' + StAttrQuote("/_layouts/15/images/fgimg.png?rev=43") + '>\
9729            </span>\
9730          </span>\
9731        </a>\
9732      </span>\
9733    </h2>\
9734    <p style="margin: 0px; padding: 8px 0px 60px; color:#444">' + STSHtmlEncode(Strings.STS.L_DocLibNewLookBody) + '</p>\
9735    <input class="ms-button-emphasize" id="doclibNewLookTry" style="position:absolute;bottom:16px;margin:0px;border-color:#005da1;background-color:#005da1;color:#fff" type="button" value=' + StAttrQuote(Strings.STS.L_DocLibNewLookCheckItOutButton) + '/>\
9736  </div>\
9737</div>\
9738<br/>\n';
9739    var bannerCloseCount = new BrowserCachedNumber("SPNewDoclibBannerClose");
9740    var bannerClosedSession = new BrowserCachedNumber("SPNewDoclibBannerClosedSession", true);
9741
9742    if (bannerCloseCount.getValue() > 1 || bannerClosedSession.getValue() > 0)
9743        return;
9744    var _splnBannerId = "doclibNewLookBanner";
9745    var splnBannerDiv = document.createElement("div");
9746
9747    splnBannerDiv.id = _splnBannerId;
9748    splnBannerDiv.innerHTML = bannerHtml;
9749    var pageStatusElement = document.getElementById("pageStatusBar");
9750    var pageStatusParent = pageStatusElement ? pageStatusElement.parentNode : null;
9751
9752    if (!pageStatusParent)
9753        return;
9754    pageStatusParent.insertBefore(splnBannerDiv, pageStatusElement);
9755    var spnlClose = document.getElementById("doclibNewLookClose");
9756
9757    if (spnlClose) {
9758        AddEvtHandler(spnlClose, "onclick", closeBannerSPLN);
9759    }
9760    var spnlTry = document.getElementById("doclibNewLookTry");
9761
9762    if (spnlTry) {
9763        AddEvtHandler(spnlTry, "onclick", trySPLN);
9764    }
9765    LogUserEngagement("NewDoclibExperience_Banner_Rendered");
9766    function closeBannerSPLN() {
9767        var bannerElement = document.getElementById(_splnBannerId);
9768
9769        if (bannerElement && bannerElement.parentNode) {
9770            bannerElement.parentNode.removeChild(bannerElement);
9771            bannerElement = null;
9772        }
9773        bannerClosedSession.incrementValue();
9774        var newCloseCount = bannerCloseCount.incrementValue();
9775
9776        LogUserEngagement("NewDoclibExperience_Banner_Close" + newCloseCount.toString(10));
9777    }
9778    function trySPLN() {
9779        bannerCloseCount.resetValue();
9780        LogUserEngagement("NewDoclibExperience_Banner_Try");
9781        document.cookie = "splnu=1;path=/;";
9782        document.location.reload();
9783    }
9784    function LogUserEngagement(strEventTag) {
9785        if (typeof SP != "undefined" && SP != null && SP.QoS != null)
9786            SP.QoS.WriteUserEngagement(strEventTag);
9787    }
9788    function BrowserCachedNumber(strCacheKey, bSessionCache) {
9789        this._cacheKey = strCacheKey;
9790        this._storage = !bSessionCache ? BrowserStorage.local : BrowserStorage.session;
9791        this.getValue = function() {
9792            var cachedValue = Number(this._storage.getItem(this._cacheKey));
9793
9794            return cachedValue ? cachedValue : 0;
9795        };
9796        this.incrementValue = function() {
9797            var updatedValue = this.getValue() + 1;
9798
9799            this._storage.setItem(this._cacheKey, updatedValue);
9800            return updatedValue;
9801        };
9802        this.resetValue = function() {
9803            this._storage.removeItem(this._cacheKey);
9804        };
9805    }
9806}
9807function HandleDLPStatus() {
9808    if (document.getElementById("pageStatusBar") != null) {
9809        EnsureScriptFunc("core.js", "ProcessDLPStatus", function() {
9810            ProcessDLPStatus();
9811        });
9812    }
9813}
9814function GetCachedProfile() {
9815    return ProfileCache.GetCachedProfile();
9816}
9817function UserProfileLocalStoreKey() {
9818    return ProfileCache.UserProfileLocalStoreKey();
9819}
9820function getCtx(webPartID) {
9821    if (fIsNullOrUndefined(g_ctxDict))
9822        return undefined;
9823    for (var contextId in g_ctxDict) {
9824        var contx = g_ctxDict[contextId];
9825
9826        if (webPartID == "WebPart" + contx.wpq)
9827            return contx;
9828    }
9829    return undefined;
9830}
9831function PageMinimized() {
9832    if (typeof PageMinimized.minimized === 'undefined') {
9833        var url = new URI(ajaxNavigate.get_href());
9834
9835        PageMinimized.minimized = Boolean(url.getQueryParameter("Minimized"));
9836        if (PageMinimized.minimized) {
9837            AddCssClassToElement(document.body, "ms-fullscreenmode");
9838        }
9839    }
9840    return PageMinimized.minimized;
9841}
9842function GoToModern(bReturn) {
9843    if (typeof SP != "undefined" && SP != null && SP.QoS != null)
9844        SP.QoS.WriteUserEngagement(bReturn ? "Return_To_Modern_UX" : "Go_To_Modern_UX");
9845    document.cookie = "splnu=1;path=/";
9846    if (!(window["OffSwitch"] == null || OffSwitch.IsActive("9AC29D85-49C4-41FC-B1E2-5BB42628DC6C")) && browseris.ie && !browseris.ie11up)
9847        window.open(window.location.href, '_blank');
9848    else
9849        window.location.reload();
9850}
9851function IsXhrAborted(xhr) {
9852    try {
9853        if (xhr.readyState == 4 && (typeof xhr.status == "undefined" || xhr.status == 0))
9854            return true;
9855    }
9856    catch (e) {
9857        return true;
9858    }
9859    return false;
9860}
9861function IsXhrGoodAndReady(xhr) {
9862    try {
9863        if (xhr.readyState == 4 && xhr.status == 200)
9864            return true;
9865    }
9866    catch (e) {
9867        return false;
9868    }
9869    return false;
9870}
9871function IsXhrReady(xhr) {
9872    try {
9873        if (xhr.readyState == 4)
9874            return true;
9875    }
9876    catch (e) {
9877        return false;
9878    }
9879    return false;
9880}
9881function OverrideDefaultMethod(methodName, alternateMethodName, argCount) {
9882    return SupplementDefaultMethod(methodName, alternateMethodName, argCount, true);
9883}
9884function SupplementDefaultMethod(methodName, alternateMethodName, argCount, override) {
9885    var browserMethod = window[methodName];
9886
9887    try {
9888        if (window.opener != null && window.opener["LogFromProduct"] != null) {
9889            var verb = override ? "Overriding" : "Supplementing";
9890
9891            window.opener["LogFromProduct"]("SupplementDefaultMethod -- " + verb + " " + methodName + " with " + alternateMethodName);
9892        }
9893    }
9894    catch (e) { }
9895    window[methodName] = function(arg1, arg2, arg3, arg4, arg5) {
9896        var getReturnValue = function(wnd) {
9897            if (argCount == 1) {
9898                return wnd[alternateMethodName](arg1);
9899            }
9900            else if (argCount == 3) {
9901                return wnd[alternateMethodName](arg1, arg2, arg3);
9902            }
9903            else if (argCount == 5) {
9904                return wnd[alternateMethodName](arg1, arg2, arg3, arg4, arg5);
9905            }
9906            else {
9907                throw "Unexpected argument count in SupplementDefaultMethod";
9908            }
9909        };
9910        var ret;
9911
9912        try {
9913            if (Boolean(window.opener) && window != window.opener && Boolean(window.opener[alternateMethodName])) {
9914                ret = getReturnValue(window.opener);
9915                if (override)
9916                    return ret;
9917            }
9918            else if (Boolean(window.frameElement) && Boolean(window.parent) && window != window.parent && typeof window.parent.opener != "undefined" && Boolean(window.parent.opener) && window != window.parent.opener && window.parent != window.parent.opener && Boolean(window.parent.opener[alternateMethodName])) {
9919                ret = getReturnValue(window.parent.opener);
9920                if (override)
9921                    return ret;
9922            }
9923        }
9924        catch (e) { }
9925        if (Boolean(browserMethod)) {
9926            return Function.prototype.apply.call(browserMethod, window, arguments);
9927        }
9928        return null;
9929    };
9930}
9931var IMNControlObj;
9932var bIMNControlInited;
9933var IMNDictionaryObj;
9934var IMNDictionaryPresenceTextObj;
9935var bIMNSorted;
9936var bIMNOnloadAttached;
9937var IMNOrigScrollFunc;
9938var bIMNInScrollFunc;
9939var IMNSortableObj;
9940var IMNHeaderObj;
9941var IMNNameDictionaryObj;
9942var IMNNameDictionaryPresenceTextObj;
9943var IMNShowOfflineObj;
9944var OwaLang;
9945var OwaRoot;
9946var OwaSharedHoverCardJsKey;
9947var OwaSharedHoverCardStringsJsKey;
9948var ActiveSharedHoverCard;
9949var ActiveUserField;
9950var SharedHoverCardHideTimer;
9951var SharedHoverCardHideTime;
9952var SharedHoverCardDelayTimer;
9953var SharedHoverCardDelayTime;
9954var SharedHoverCardDelayed;
9955var SharedHoverCardContainer;
9956var sharedHoverCardShimParameters;
9957var SharedHoverCardShimParameters;
9958var sharedHoverCardShim;
9959var SharedHoverCardShim;
9960var serverSettings;
9961var slabManifest;
9962var jQueryPatch;
9963var SharedHoverCardDependenciesLoaded;
9964var SharedHoverCardDependenciesRegistered;
9965var FallbackToActiveX;
9966var SharedHoverCardBootStrapped;
9967var SharedHoverCardPending;
9968var currentShowHoverCardInstance;
9969var nextShowHoverCardInstance;
9970var currentShowHoverCardInstanceBootstrappedState;
9971
9972function GetCurrentEvent(objEvent) {
9973    if (browseris.ie5up)
9974        return window.event;
9975    if (Boolean(objEvent))
9976        return objEvent;
9977    return window.event;
9978}
9979function GetEventTarget(objEvent) {
9980    if (Boolean(objEvent.srcElement))
9981        return objEvent.srcElement;
9982    return objEvent.target;
9983}
9984function EnsureIMNControl() {
9985    if (!bIMNControlInited || IMNControlObj == null) {
9986        var serverPresenceEnabled = typeof g_presenceEnabled != "undefined" && g_presenceEnabled;
9987
9988        try {
9989            if (IsSupportedMacBrowser()) {
9990                IMNControlObj = CreateMacPlugin();
9991            }
9992            else if (IsSupportedNPApiBrowserOnWin()) {
9993                IMNControlObj = CreateNPApiOnWindowsPlugin("application/x-sharepoint-uc");
9994                if (IMNControlObj != null && serverPresenceEnabled)
9995                    IMNControlObj.OnStatusChange = IMNOnStatusChange;
9996            }
9997            else if (browseris.ie5up) {
9998                if (Boolean(window.ActiveXObject)) {
9999                    IMNControlObj = new ActiveXObject("Name.NameCtrl.1");
10000                    if (IMNControlObj && serverPresenceEnabled) {
10001                        var onStatusChange;
10002
10003                        if (IsSupportedMacBrowser())
10004                            onStatusChange = "IMNOnStatusChange";
10005                        else
10006                            onStatusChange = IMNOnStatusChange;
10007                        IMNControlObj.OnStatusChange = onStatusChange;
10008                    }
10009                }
10010            }
10011            bIMNControlInited = true;
10012        }
10013        catch (e) {
10014            IMNControlObj = null;
10015        }
10016        AddEvtHandler(window, "onbeforeunload", DiscardIMNControl);
10017    }
10018    return IMNControlObj;
10019}
10020function DiscardIMNControl() {
10021    if (typeof IMNHideOOUI == 'undefined' || typeof IMNControlObj == 'undefined' || typeof bIMNControlInited == 'undefined') {
10022        return;
10023    }
10024    IMNHideOOUI();
10025    IMNControlObj = null;
10026    bIMNControlInited = false;
10027}
10028function IMNImageInfo_InitializePrototype() {
10029    IMNImageInfo.prototype.img = null;
10030    IMNImageInfo.prototype.classPrefix = null;
10031    IMNImageInfo.prototype.alt = '';
10032}
10033function IMNImageInfo() {
10034}
10035function IMNGetStatusImage(state, showoffline) {
10036    var img = "spimn.png";
10037    var classPrefix = "ms-spimn-presence-disconnected";
10038    var alt = "";
10039
10040    switch (state) {
10041    case 0:
10042        classPrefix = "ms-spimn-presence-online";
10043        alt = Strings.STS.L_IMNOnline_Text;
10044        break;
10045    case 11:
10046        classPrefix = "ms-spimn-presence-online-oof";
10047        alt = Strings.STS.L_IMNOnline_OOF_Text;
10048        break;
10049    case 1:
10050        if (showoffline) {
10051            classPrefix = "ms-spimn-presence-offline";
10052            alt = Strings.STS.L_IMNOffline_Text;
10053        }
10054        else {
10055            classPrefix = "";
10056            alt = "";
10057        }
10058        break;
10059    case 12:
10060        if (showoffline) {
10061            classPrefix = "ms-spimn-presence-offline-oof";
10062            alt = Strings.STS.L_IMNOffline_OOF_Text;
10063        }
10064        else {
10065            classPrefix = "";
10066            alt = "";
10067        }
10068        break;
10069    case 2:
10070        classPrefix = "ms-spimn-presence-away";
10071        alt = Strings.STS.L_IMNAway_Text;
10072        break;
10073    case 13:
10074        classPrefix = "ms-spimn-presence-away-oof";
10075        alt = Strings.STS.L_IMNAway_OOF_Text;
10076        break;
10077    case 3:
10078        classPrefix = "ms-spimn-presence-busy";
10079        alt = Strings.STS.L_IMNBusy_Text;
10080        break;
10081    case 14:
10082        classPrefix = "ms-spimn-presence-busy-oof";
10083        alt = Strings.STS.L_IMNBusy_OOF_Text;
10084        break;
10085    case 4:
10086        classPrefix = "ms-spimn-presence-away";
10087        alt = Strings.STS.L_IMNAway_Text;
10088        break;
10089    case 5:
10090        classPrefix = "ms-spimn-presence-busy";
10091        alt = Strings.STS.L_IMNBusy_Text;
10092        break;
10093    case 6:
10094        classPrefix = "ms-spimn-presence-away";
10095        alt = Strings.STS.L_IMNAway_Text;
10096        break;
10097    case 7:
10098        classPrefix = "ms-spimn-presence-busy";
10099        alt = Strings.STS.L_IMNBusy_Text;
10100        break;
10101    case 8:
10102        classPrefix = "ms-spimn-presence-away";
10103        alt = Strings.STS.L_IMNAway_Text;
10104        break;
10105    case 9:
10106        classPrefix = "ms-spimn-presence-donotdisturb";
10107        alt = Strings.STS.L_IMNDoNotDisturb_Text;
10108        break;
10109    case 15:
10110        classPrefix = "ms-spimn-presence-donotdisturb-oof";
10111        alt = Strings.STS.L_IMNDoNotDisturb_OOF_Text;
10112        break;
10113    case 21:
10114        classPrefix = "ms-spimn-presence-donotdisturb";
10115        alt = Strings.STS.L_IMNInPresentation_Text;
10116        break;
10117    case 10:
10118        classPrefix = "ms-spimn-presence-busy";
10119        alt = Strings.STS.L_IMNBusy_Text;
10120        break;
10121    case 16:
10122        classPrefix = "ms-spimn-presence-away";
10123        alt = Strings.STS.L_IMNIdle_Text;
10124        break;
10125    case 17:
10126        classPrefix = "ms-spimn-presence-away-oof";
10127        alt = Strings.STS.L_IMNIdle_OOF_Text;
10128        break;
10129    case 18:
10130        classPrefix = "ms-spimn-presence-blocked";
10131        alt = Strings.STS.L_IMNBlocked_Text;
10132        break;
10133    case 19:
10134        classPrefix = "ms-spimn-presence-busy";
10135        alt = Strings.STS.L_IMNBusy_Text;
10136        break;
10137    case 20:
10138        classPrefix = "ms-spimn-presence-busy-oof";
10139        alt = Strings.STS.L_IMNBusy_OOF_Text;
10140        break;
10141    }
10142    var imnInfo = new IMNImageInfo();
10143
10144    imnInfo.img = img;
10145    imnInfo.classPrefix = classPrefix;
10146    imnInfo.alt = alt;
10147    return imnInfo;
10148}
10149function IMNGetHeaderImage() {
10150    var imnInfo = new IMNImageInfo();
10151
10152    imnInfo.img = "imnhdr.gif";
10153    imnInfo.alt = "";
10154    return imnInfo;
10155}
10156function IMNIsOnlineState(state) {
10157    if (state == 1) {
10158        return false;
10159    }
10160    return true;
10161}
10162function IMNSortList(j, oldState, state) {
10163    var objTable = null;
10164    var objRow = null;
10165
10166    if (Boolean(IMNSortableObj) && IMNSortableObj[j]) {
10167        objRow = document.getElementById(j);
10168        while (Boolean(objRow) && !(objRow.tagName == "TR" && typeof objRow.Sortable != "undefined")) {
10169            objRow = objRow.parentNode;
10170        }
10171        objTable = objRow;
10172        while (Boolean(objTable) && objTable.tagName != "TABLE") {
10173            objTable = objTable.parentNode;
10174        }
10175        var objTableRows = objTable.rows;
10176
10177        if (objTable != null && objRow != null) {
10178            if (objTableRows[1].style.display == "none") {
10179                for (var i = 1; i < 4; i++) {
10180                    objTableRows[i].style.display = "block";
10181                }
10182            }
10183            if (!IMNIsOnlineState(oldState) && IMNIsOnlineState(state)) {
10184                objTableRows[2].style.display = "none";
10185                i = 3;
10186                while (objTableRows[i].id != "Offline" && Number(objTableRows[i].innerText) < Number(objRow.innerText))
10187                    i++;
10188                if (typeof objTable.moveRow == 'function')
10189                    objTable.moveRow(objRow.rowIndex, i);
10190                if (objTableRows[objTableRows.length - 3].id == "Offline") {
10191                    objTableRows[objTableRows.length - 2].style.display = "block";
10192                }
10193            }
10194            else if (IMNIsOnlineState(oldState) && !IMNIsOnlineState(state)) {
10195                if (objRow.rowIndex == 3 && objTableRows[objRow.rowIndex + 1].id == "Offline") {
10196                    objTableRows[2].style.display = "block";
10197                }
10198                if (objTableRows[objTableRows.length - 3].id == "Offline") {
10199                    objTableRows[objTableRows.length - 2].style.display = "none";
10200                }
10201                i = objTableRows.length - 2;
10202                while (objTableRows[i - 1].id != "Offline" && Number(objTableRows[i].innerText) > Number(objRow.innerText))
10203                    i--;
10204                objTable.moveRow(objRow.rowIndex, i);
10205            }
10206        }
10207    }
10208}
10209function IMNOnStatusChange(nameParam, state, id) {
10210    if (Boolean(IMNDictionaryObj) && typeof IMNDictionaryObj[id] != 'undefined') {
10211        var img = IMNGetStatusImage(state, IMNSortableObj[id] || IMNShowOfflineObj[id]);
10212
10213        if (IMNDictionaryObj[id] != state) {
10214            if (bIMNSorted)
10215                IMNSortList(id, IMNDictionaryObj[id], state);
10216            IMNUpdateImage(id, img);
10217            IMNDictionaryObj[id] = state;
10218        }
10219    }
10220    if (Boolean(IMNDictionaryPresenceTextObj) && typeof IMNDictionaryPresenceTextObj[id] != 'undefined') {
10221        var presenceTextElement = document.getElementById(id);
10222
10223        IMNUpdatePresenceText(presenceTextElement, state);
10224    }
10225}
10226function IMNUpdateImageClassPrefix(obj, classPrefix) {
10227    var exp = /ms-spimn-presence-[a-zA-Z]*-([0-9])/i;
10228    var oldClass = obj.getAttribute("class");
10229
10230    if (oldClass != null) {
10231        obj.setAttribute("class", oldClass.replace(exp, classPrefix + "-" + "$1"));
10232    }
10233}
10234function IMNUpdateImage(id, imgInfo) {
10235    var obj = document.images[id];
10236
10237    if (Boolean(obj)) {
10238        var parentNode = obj.parentNode;
10239
10240        if (parentNode.firstChild != obj)
10241            parentNode.insertBefore(obj, parentNode.firstChild);
10242        var img = imgInfo.img;
10243        var classPrefix = imgInfo.classPrefix;
10244        var alt = imgInfo.alt;
10245        var oldImg = obj.src;
10246
10247        if (typeof obj.src == "undefined")
10248            oldImg = (obj.item(0)).src;
10249        var index = oldImg.lastIndexOf("/");
10250        var newImg = oldImg.slice(0, index + 1);
10251
10252        newImg += img;
10253        IMNUpdateImageClassPrefix(obj, classPrefix);
10254        if (oldImg == newImg && img != 'blank.gif')
10255            return;
10256        if (typeof obj.altbase != 'undefined' && Boolean(obj.altbase)) {
10257            obj.alt = obj.altbase;
10258        }
10259        else if (typeof obj.getAttribute('altbase') != 'undefined' && Boolean(obj.getAttribute('altbase'))) {
10260            obj.alt = obj.getAttribute('altbase');
10261        }
10262        else {
10263            obj.alt = alt;
10264        }
10265        var useFilter = browseris.ie && browseris.ie55up && browseris.verIEFull < 7.0;
10266        var isPng = (newImg.toLowerCase()).indexOf(".png") > 0;
10267
10268        if (useFilter) {
10269            if (isPng) {
10270                obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + newImg + "),sizingMethod=scale,enabled=true);";
10271                obj.src = "/_layouts/15/images/blank.gif?rev=43";
10272            }
10273            else {
10274                obj.style.filter = "";
10275                obj.src = newImg;
10276            }
10277        }
10278        else {
10279            obj.src = newImg;
10280        }
10281    }
10282}
10283function IMNHandleAccelerator(objEvent) {
10284    if (IMNControlObj) {
10285        var currEvent = GetCurrentEvent(objEvent);
10286
10287        if (currEvent.altKey && currEvent.shiftKey && currEvent.keyCode == 121) {
10288            if (typeof IMNControlObj.DoAccelerator != 'undefined')
10289                IMNControlObj.DoAccelerator();
10290        }
10291    }
10292}
10293function IMNImageOnClick(objEvent) {
10294    if (IMNControlObj) {
10295        IMNShowOOUIKyb(objEvent);
10296        if (typeof IMNControlObj.DoAccelerator != 'undefined')
10297            IMNControlObj.DoAccelerator();
10298        HideSharedHoverCard();
10299    }
10300}
10301function IMNGetOOUILocation(obj) {
10302    var objRet = new Object;
10303    var objSpan = obj;
10304    var objOOUI = obj;
10305    var objImg = obj;
10306    var oouiX = 0, oouiY = 0, objDX = 0;
10307    var fRtl = document.dir == "rtl";
10308    var objSpanClass = objSpan.className;
10309
10310    while (Boolean(objSpan) && (objSpanClass == null || objSpanClass.indexOf("ms-imnSpan") == -1) && objSpan.tagName != "TABLE") {
10311        if (objSpan.tagName == "TD" && objSpanClass.indexOf("ms-vb") >= 0)
10312            break;
10313        objSpan = objSpan.parentNode;
10314        if (!Boolean(objSpan))
10315            return null;
10316        objSpanClass = objSpan.className;
10317    }
10318    if (Boolean(objSpan)) {
10319        var childNode;
10320
10321        if (objSpan.tagName == "TABLE") {
10322            var row = objSpan.rows(0);
10323            var cell = row.cells(0);
10324
10325            childNode = cell.firstChild;
10326        }
10327        else
10328            childNode = objSpan.firstChild;
10329        while (childNode != null) {
10330            if (childNode.tagName == "A") {
10331                var linkDescendant = childNode.firstChild;
10332
10333                while (linkDescendant != null) {
10334                    if (linkDescendant.tagName == "IMG" && Boolean(linkDescendant.id)) {
10335                        childNode = linkDescendant;
10336                        break;
10337                    }
10338                    linkDescendant = linkDescendant.firstChild;
10339                }
10340            }
10341            if (childNode.tagName == "IMG" && Boolean(childNode.id)) {
10342                objOOUI = childNode;
10343                break;
10344            }
10345            childNode = childNode.nextSibling;
10346        }
10347        objImg = objOOUI;
10348        objOOUI = objSpan;
10349    }
10350    obj = objOOUI;
10351    var zoom = 1;
10352
10353    if (Boolean(browseris.ie9standardUp))
10354        zoom = window.screen.deviceXDPI / window.screen.logicalXDPI;
10355    oouiY = (objOOUI.getBoundingClientRect()).top * zoom - 5;
10356    oouiX = (objOOUI.getBoundingClientRect()).left * zoom - 5;
10357    var parentObj = objOOUI.parentNode;
10358
10359    while ((oouiX < 0 || oouiY < 0) && parentObj != null && Boolean(parentObj.getBoundingClientRect)) {
10360        oouiY = (parentObj.getBoundingClientRect()).top * zoom - 5;
10361        oouiX = (parentObj.getBoundingClientRect()).left * zoom - 5;
10362        parentObj = parentObj.parentNode;
10363    }
10364    try {
10365        var currentWindow = window;
10366
10367        while (Boolean(currentWindow) && currentWindow != currentWindow.parent) {
10368            var iframe = currentWindow.frameElement;
10369            var iframebcr = Boolean(iframe) ? iframe.getBoundingClientRect() : null;
10370            var iframetop = Boolean(iframebcr) ? iframebcr.top : 0;
10371            var iframeleft = Boolean(iframebcr) ? iframebcr.left : 0;
10372
10373            oouiY += iframetop;
10374            oouiX += iframeleft;
10375            currentWindow = currentWindow.parent;
10376        }
10377    }
10378    catch (e) { }
10379    ;
10380    objRet.objSpan = objSpan;
10381    objRet.objOOUI = objOOUI != objSpan ? objOOUI : objImg;
10382    objRet.oouiX = oouiX;
10383    objRet.oouiY = oouiY;
10384    return objRet;
10385}
10386function IMNShowOOUIMouse(objEvent) {
10387    IMNShowOOUI(objEvent, 0);
10388}
10389function IMNShowOOUIKyb(objEvent) {
10390    IMNShowOOUI(objEvent, 1);
10391}
10392function IMNShowOOUI(objEvent, inputType) {
10393    if (browseris.ie5up || IsSupportedMacBrowser() || IsSupportedNPApiBrowserOnWin()) {
10394        var currEvent = GetCurrentEvent(objEvent);
10395        var obj = GetEventTarget(currEvent);
10396        var objSpan = obj;
10397        var objOOUI = obj;
10398        var oouiX = 0, oouiY = 0;
10399
10400        if (EnsureIMNControl() && Boolean(IMNNameDictionaryObj)) {
10401            var objRet = IMNGetOOUILocation(obj);
10402
10403            if (Boolean(objRet)) {
10404                objSpan = objRet.objSpan;
10405                objOOUI = objRet.objOOUI;
10406                oouiX = objRet.oouiX;
10407                oouiY = objRet.oouiY;
10408                if (Boolean(currEvent.clientX))
10409                    oouiX = currEvent.clientX;
10410                var nameParam = IMNNameDictionaryObj[objOOUI.id];
10411
10412                if (nameParam == null || nameParam.length < 1)
10413                    return;
10414                if (Boolean(objSpan))
10415                    objSpan.onkeydown = IMNHandleAccelerator;
10416                if (typeof IMNControlObj.ShowOOUI != 'undefined')
10417                    IMNControlObj.ShowOOUI(nameParam, inputType, Math.round(oouiX), Math.round(oouiY));
10418            }
10419        }
10420    }
10421}
10422function IMNHideOOUI() {
10423    if (Boolean(IMNControlObj)) {
10424        if (typeof IMNControlObj.HideOOUI != 'undefined')
10425            IMNControlObj.HideOOUI();
10426        return false;
10427    }
10428    return true;
10429}
10430function IMNScroll() {
10431    if (!bIMNInScrollFunc) {
10432        bIMNInScrollFunc = true;
10433        IMNHideOOUI();
10434    }
10435    bIMNInScrollFunc = false;
10436    if (IMNOrigScrollFunc == IMNScroll)
10437        return true;
10438    return Boolean(IMNOrigScrollFunc) ? IMNOrigScrollFunc() : true;
10439}
10440var imnCount;
10441var imnElems;
10442var imnElemsCount;
10443var imnMarkerBatchSize;
10444var imnMarkerBatchDelay;
10445var sharedHoverCardsCount;
10446var sharedHoverCardElements;
10447var sharedHoverCardElementsCount;
10448var sharedHoverCardMarkerBatchSize;
10449var sharedHoverCardMarkerBatchDelay;
10450var IsIFrameSharedHoverCard;
10451var SharedHoverCardIFrame;
10452var SharedHoverCardIFrameCode;
10453
10454function GetHoverCardJsUrls(keys) {
10455    var urls = new Array(0);
10456
10457    if (IsIFrameSharedHoverCard || _v_dictSod == null) {
10458        return urls;
10459    }
10460    for (var i = 0; i < keys.length; i++) {
10461        var sod = _v_dictSod[keys[i]];
10462
10463        urls[i] = sod == null ? "" : sod.url;
10464    }
10465    return urls;
10466}
10467function InitIFrameSharedHoverCard() {
10468    IsIFrameSharedHoverCard = true;
10469    sharedHoverCardsCount = 0;
10470    RenderSharedHoverCardContainer();
10471}
10472function ProcessImn() {
10473    if (typeof _spPageContextInfo == "undefined" || _spPageContextInfo == null) {
10474        return;
10475    }
10476    if (typeof _spPageContextInfo.userId == "undefined" || _spPageContextInfo.userId == String(-1)) {
10477        return;
10478    }
10479    imnCount = 0;
10480    imnElems = document.getElementsByName("imnmark");
10481    imnElemsCount = imnElems.length;
10482    if (EnsureIMNControl()) {
10483        ProcessImnMarkers();
10484    }
10485    else {
10486        RemoveImnAnchors();
10487    }
10488    if (IsPeopleHoverCardEnabled()) {
10489        sharedHoverCardsCount = 0;
10490        sharedHoverCardElements = document.getElementsByName("SharedHoverCardMarker");
10491        sharedHoverCardElementsCount = sharedHoverCardElements.length;
10492        if (sharedHoverCardElementsCount > 0) {
10493            ProcessSharedHoverCardMarkers();
10494            RenderSharedHoverCardContainer();
10495        }
10496    }
10497}
10498function ClientCanHandleImn() {
10499    return EnsureIMNControl() && typeof IMNControlObj.PresenceEnabled != 'undefined' && IMNControlObj.PresenceEnabled;
10500}
10501function RemoveImnAnchors() {
10502    for (var i = 0; i < imnElemsCount; i++) {
10503        var imnElem = imnElems[i];
10504        var imnAnchor = imnElem.parentNode;
10505
10506        while (imnAnchor != null && !IsImnAnchor(imnAnchor)) {
10507            imnElem = imnAnchor;
10508            imnAnchor = imnAnchor.parentNode;
10509        }
10510        if (IsImnAnchor(imnAnchor) && imnAnchor.childNodes.length == 1) {
10511            imnAnchor.setAttribute("tabIndex", "-1");
10512            imnAnchor.onclick = null;
10513        }
10514    }
10515    var imnEmptyElems = document.getElementsByName("imnempty");
10516
10517    for (i = 0; i < imnEmptyElems.length; i++) {
10518        imnElem = imnEmptyElems[i];
10519        imnAnchor = imnElem.parentNode;
10520        if (imnAnchor != null && imnAnchor.tagName == "SPAN" && !Boolean(imnAnchor.getAttribute("title")))
10521            imnAnchor.appendChild(imnElem);
10522    }
10523}
10524function ProcessImnMarkers() {
10525    for (var i = 0; i < imnMarkerBatchSize; ++i) {
10526        if (imnCount == imnElemsCount)
10527            return;
10528        var imnElem = imnElems[imnCount];
10529
10530        if (imnElem != null && typeof imnElem != 'undefined') {
10531            IMNRC(imnElem.getAttribute("sip"), imnElem);
10532        }
10533        imnCount++;
10534    }
10535    setTimeout("ProcessImnMarkers()", imnMarkerBatchDelay);
10536}
10537function IMNRC(nameParam, elem) {
10538    if (nameParam == null || nameParam == '')
10539        return;
10540    var presenceEnabled = typeof g_presenceEnabled != "undefined" && g_presenceEnabled && EnsureIMNControl() && IMNControlObj.PresenceEnabled;
10541
10542    if (browseris.ie5up || IsSupportedMacBrowser() || IsSupportedNPApiBrowserOnWin()) {
10543        var obj = Boolean(elem) ? elem : window.event.srcElement;
10544        var objSpan = obj;
10545        var id = obj.id;
10546
10547        if (!Boolean(IMNDictionaryObj)) {
10548            IMNDictionaryObj = new Object();
10549            IMNNameDictionaryObj = new Object();
10550            IMNSortableObj = new Object();
10551            IMNShowOfflineObj = new Object();
10552            if (!Boolean(IMNOrigScrollFunc)) {
10553                if (typeof window.onscroll != 'undefined')
10554                    IMNOrigScrollFunc = window.onscroll;
10555                window.onscroll = IMNScroll;
10556            }
10557        }
10558        if (Boolean(IMNDictionaryObj)) {
10559            if (!IMNNameDictionaryObj[id]) {
10560                IMNNameDictionaryObj[id] = nameParam;
10561            }
10562            if (typeof IMNDictionaryObj[id] == "undefined") {
10563                IMNDictionaryObj[id] = 1;
10564            }
10565            if (!IMNSortableObj[id] && typeof obj.Sortable != "undefined") {
10566                IMNSortableObj[id] = obj.Sortable;
10567                if (!bIMNOnloadAttached && presenceEnabled) {
10568                    AttachEvent("load", IMNSortTable, window);
10569                    bIMNOnloadAttached = true;
10570                }
10571            }
10572            if (!IMNShowOfflineObj[id] && obj.getAttribute("ShowOfflinePawn") != null) {
10573                IMNShowOfflineObj[id] = obj.getAttribute("ShowOfflinePawn");
10574            }
10575            if (presenceEnabled) {
10576                var state = 1, img;
10577
10578                if (typeof IMNControlObj.GetStatus != 'undefined')
10579                    state = IMNControlObj.GetStatus(nameParam, id);
10580                if (IMNIsOnlineState(state) || IMNSortableObj[id] || IMNShowOfflineObj[id]) {
10581                    img = IMNGetStatusImage(state, IMNSortableObj[id] || IMNShowOfflineObj[id]);
10582                    IMNUpdateImage(id, img);
10583                    IMNDictionaryObj[id] = state;
10584                }
10585            }
10586        }
10587        var objRet = IMNGetOOUILocation(obj);
10588
10589        if (Boolean(objRet)) {
10590            SetImnOnClickHandler(objRet.objOOUI);
10591            objSpan = objRet.objSpan;
10592            if (Boolean(objSpan)) {
10593                if (!IsPeopleHoverCardEnabled()) {
10594                    objSpan.onmouseover = IMNShowOOUIMouse;
10595                    objSpan.onfocusin = IMNShowOOUIKyb;
10596                    objSpan.onmouseout = IMNHideOOUI;
10597                    objSpan.onfocusout = IMNHideOOUI;
10598                }
10599            }
10600        }
10601    }
10602}
10603function IsImnAnchor(node) {
10604    if (!Boolean(node))
10605        return false;
10606    var nodeClass = node.className;
10607
10608    return nodeClass != null && nodeClass.indexOf("ms-imnlink") != -1;
10609}
10610function SetImnOnClickHandler(imgNode) {
10611    var parentNode = imgNode.parentNode;
10612    var currNode = parentNode;
10613    var nodeClass = currNode.className;
10614
10615    while (Boolean(currNode) && !IsImnAnchor(currNode)) {
10616        currNode = currNode.parentNode;
10617    }
10618    if (Boolean(currNode))
10619        parentNode = currNode;
10620    if (IsImnAnchor(parentNode)) {
10621        if (typeof parentNode.onclick == "undefined") {
10622            parentNode.onclick = IMNImageOnClickHandler;
10623        }
10624    }
10625    else {
10626        var anchor = document.createElement("a");
10627
10628        anchor.onclick = IMNImageOnClickHandler;
10629        anchor.className = "ms-imnlink";
10630        anchor.href = "javascript:;";
10631        parentNode.insertBefore(anchor, imgNode);
10632        anchor.appendChild(imgNode);
10633    }
10634}
10635function IMNImageOnClickHandler(objEvent) {
10636    IMNImageOnClick(objEvent);
10637    return false;
10638}
10639function IMNSortTable() {
10640    var id;
10641
10642    for (id in IMNDictionaryObj) {
10643        IMNSortList(id, 1, IMNDictionaryObj[id]);
10644    }
10645    bIMNSorted = true;
10646}
10647function IMNRegisterHeader(objEvent) {
10648    if (browseris.ie5up || IsSupportedMacBrowser() || IsSupportedNPApiBrowserOnWin()) {
10649        var currEvent = GetCurrentEvent(objEvent);
10650
10651        if (currEvent == null)
10652            return;
10653        var obj = GetEventTarget(currEvent);
10654
10655        if (!Boolean(IMNHeaderObj)) {
10656            IMNHeaderObj = new Object();
10657        }
10658        if (Boolean(IMNHeaderObj)) {
10659            var id = obj.id;
10660
10661            IMNHeaderObj[id] = id;
10662            var img;
10663
10664            img = IMNGetHeaderImage();
10665            IMNUpdateImage(id, img);
10666        }
10667    }
10668}
10669function ProcessSharedHoverCardMarkers() {
10670    for (var i = 0; i < sharedHoverCardMarkerBatchSize; ++i) {
10671        if (sharedHoverCardsCount == sharedHoverCardElementsCount)
10672            return;
10673        var sharedHoverCardElement = sharedHoverCardElements[sharedHoverCardsCount];
10674
10675        if (sharedHoverCardElement != null && typeof sharedHoverCardElement != 'undefined') {
10676            AddSharedHoverCardHandlers(sharedHoverCardElement.getAttribute("sip"), sharedHoverCardElement);
10677        }
10678        sharedHoverCardsCount++;
10679    }
10680    setTimeout("ProcessSharedHoverCardMarkers()", sharedHoverCardMarkerBatchDelay);
10681}
10682function AddSharedHoverCardHandlers(nameParam, userField) {
10683    if (nameParam == null || nameParam == '' || userField == null) {
10684        return;
10685    }
10686    if (!IsIFrameSharedHoverCard) {
10687        userField.onmouseover = ShowSharedHoverCardHandler;
10688        userField.onmouseout = HideSharedHoverCardHandler;
10689    }
10690}
10691function ShowSharedHoverCardHandler(objEvent) {
10692    if (IsPeopleHoverCardEnabled()) {
10693        var currEvent = GetCurrentEvent(objEvent);
10694        var obj = GetEventTarget(currEvent);
10695
10696        if (Boolean(obj)) {
10697            var userField = GetUserField(obj);
10698
10699            if (userField != null) {
10700                var sip = userField.getAttribute("sip");
10701                var hoverCardContainer = SharedHoverCardContainer;
10702
10703                if (Boolean(hoverCardContainer)) {
10704                    CancelSharedHoverCardHideTimer();
10705                    if (ActiveUserField != userField) {
10706                        if (SharedHoverCardDelayTimer != null) {
10707                            clearTimeout(SharedHoverCardDelayTimer);
10708                        }
10709                        SharedHoverCardDelayed = hoverCardContainer;
10710                        SharedHoverCardDelayTimer = setTimeout(function() {
10711                            if (IsIFrameSharedHoverCard) {
10712                                SharedHoverCardDelayed = null;
10713                                ShowSharedHoverCard(hoverCardContainer, userField);
10714                            }
10715                            else {
10716                                var childWindow = SharedHoverCardIFrame != null ? SharedHoverCardIFrame.contentWindow : null;
10717
10718                                if (Boolean(childWindow) && Boolean(childWindow.IFrameShowSharedHoverCard)) {
10719                                    SP.QoS.WriteUserEngagement('SharedHoverCard_ShowCard');
10720                                    SharedHoverCardDelayed = null;
10721                                    ShowSharedHoverCard(hoverCardContainer, userField);
10722                                    childWindow.IFrameShowSharedHoverCard(userField);
10723                                }
10724                            }
10725                        }, SharedHoverCardDelayTime);
10726                    }
10727                }
10728            }
10729        }
10730    }
10731}
10732function SharedHoverCardLogRUMExtendedAction(actionName, actionId, actionGuid, actionDate, actionType) {
10733    LogRUMExtendedAction(actionName, actionId, actionGuid, actionDate, actionType);
10734}
10735function IFrameShowSharedHoverCard(userField) {
10736    ShowSharedHoverCard(SharedHoverCardContainer, userField);
10737}
10738function ShowSharedHoverCard(hoverCardContainer, userField) {
10739    if (Boolean(hoverCardContainer) && (hoverCardContainer.style.visibility != "" || ActiveUserField != userField)) {
10740        currentShowHoverCardInstanceBootstrappedState = Boolean(SharedHoverCardBootStrapped);
10741        currentShowHoverCardInstance = nextShowHoverCardInstance++;
10742        var startTime = (new Date()).getTime();
10743        var actionName = currentShowHoverCardInstanceBootstrappedState ? "ShowH
10743overCardWithBootStrappedBegin" : "ShowHoverCardWithoutBootStrappedBegin";
10744
10745        if (IsIFrameSharedHoverCard) {
10746            parent.SharedHoverCardLogRUMExtendedAction(actionName, currentShowHoverCardInstance, null, startTime, null);
10747        }
10748        else {
10749            LogRUMExtendedAction(actionName, currentShowHoverCardInstance, null, startTime, null);
10750        }
10751        if (Boolean(ActiveSharedHoverCard) && ActiveUserField != userField) {
10752            HideSharedHoverCard();
10753        }
10754        ActiveSharedHoverCard = hoverCardContainer;
10755        ActiveUserField = userField;
10756        hoverCardContainer.style.display = "block";
10757        PositionSharedHoverCard(hoverCardContainer, userField);
10758        SPAnimationUtility.BasicAnimator.FadeIn(hoverCardContainer);
10759        var placeHolder = hoverCardContainer.firstChild;
10760        var cardContainer = hoverCardContainer.lastChild;
10761
10762        placeHolder.style.visibility = "";
10763        placeHolder.style.display = "block";
10764        if (IsIFrameSharedHoverCard) {
10765            if (!SharedHoverCardDependenciesRegistered) {
10766                RegisterSharedHoverCardDependencies();
10767            }
10768            hoverCardContainer.style.left = "0px";
10769            hoverCardContainer.style.top = "0px";
10770            var email = userField.getAttribute("sip");
10771            var title = userField.getAttribute("userTitle");
10772
10773            RenderSharedHoverCard(cardContainer, email, title);
10774        }
10775    }
10776}
10777function PositionSharedHoverCard(hoverCardContainer, userField) {
10778    if (userField == null || hoverCardContainer == null) {
10779        return;
10780    }
10781    var position = IMNGetPosition(userField);
10782    var windowWidth = IMNGetDocumentClientWidth();
10783    var scrollX = IMNGetScrollX();
10784    var x = position.X + hoverCardContainer.offsetWidth - scrollX;
10785
10786    if (x > windowWidth) {
10787        position.X = position.X - (x - windowWidth) - 2;
10788    }
10789    hoverCardContainer.style.left = position.X + "px";
10790    hoverCardContainer.style.top = String(position.Y + userField.offsetHeight) + "px";
10791}
10792function IMNGetScrollX() {
10793    var scrollX = 0;
10794    var workspace = IMNGetSharepointWorkspace();
10795
10796    if (Boolean(workspace)) {
10797        scrollX = workspace.scrollLeft;
10798    }
10799    return scrollX;
10800}
10801function HideSharedHoverCard() {
10802    if (!IsIFrameSharedHoverCard && Boolean(ActiveSharedHoverCard)) {
10803        SPAnimationUtility.BasicAnimator.FadeOut(ActiveSharedHoverCard);
10804        ActiveSharedHoverCard.style.visibility = "hidden";
10805        ActiveSharedHoverCard.style.display = "none";
10806        ActiveSharedHoverCard = null;
10807        ActiveUserField = null;
10808        SharedHoverCardPending = null;
10809    }
10810}
10811function GetUserField(element) {
10812    while (Boolean(element)) {
10813        if (element.getAttribute != null) {
10814            if (element.getAttribute("name") == "SharedHoverCardMarker") {
10815                break;
10816            }
10817        }
10818        element = element.parentNode;
10819    }
10820    return element;
10821}
10822function SetSharedHoverCardHideTimer() {
10823    SharedHoverCardHideTimer = setTimeout(function() {
10824        if (Boolean(ActiveSharedHoverCard)) {
10825            HideSharedHoverCard();
10826        }
10827    }, SharedHoverCardHideTime);
10828}
10829function HideSharedHoverCardHandler(objEvent) {
10830    if (Boolean(objEvent) && objEvent.type == "mouseout") {
10831        var target = Boolean(objEvent.relatedTarget) ? objEvent.relatedTarget : objEvent.toElement;
10832        var container = objEvent.currentTarget;
10833
10834        if (!Boolean(target) || !Boolean(container)) {
10835            return;
10836        }
10837        if (!IMNIsDescendant(target, container)) {
10838            CancelSharedHoverCardDelayTimer();
10839            SetSharedHoverCardHideTimer();
10840        }
10841    }
10842    else {
10843        CancelSharedHoverCardDelayTimer();
10844        SetSharedHoverCardHideTimer();
10845    }
10846}
10847function CancelSharedHoverCardHideTimer() {
10848    if (Boolean(SharedHoverCardHideTimer)) {
10849        clearTimeout(SharedHoverCardHideTimer);
10850    }
10851}
10852function CancelSharedHoverCardDelayTimer() {
10853    if (Boolean(SharedHoverCardDelayTimer)) {
10854        SharedHoverCardDelayed = null;
10855        clearTimeout(SharedHoverCardDelayTimer);
10856    }
10857}
10858function IMNIsDescendant(element, container) {
10859    if (!Boolean(element) || !Boolean(container)) {
10860        return false;
10861    }
10862    while (Boolean(element) && element != container) {
10863        element = element.parentNode;
10864    }
10865    return element == container;
10866}
10867function IsPeopleHoverCardEnabled() {
10868    return Flighting.VariantConfiguration.IsExpFeatureClientEnabled(0) && !FallbackToActiveX;
10869}
10870function IMNGetPosition(targetElement) {
10871    var position = new Object;
10872    var tempY = 0, tempX = 0;
10873    var workspace = IMNGetSharepointWorkspace();
10874
10875    while (targetElement != null && targetElement != workspace) {
10876        tempY += targetElement.offsetTop;
10877        tempX += targetElement.offsetLeft;
10878        targetElement = targetElement.offsetParent;
10879    }
10880    position.X = tempX;
10881    position.Y = tempY;
10882    return position;
10883}
10884function IMNGetDocumentClientWidth() {
10885    var width = 0;
10886    var workspace = IMNGetSharepointWorkspace();
10887
10888    if (Boolean(workspace) && Boolean(workspace.clientWidth)) {
10889        width = workspace.clientWidth;
10890    }
10891    else if (Boolean(document.documentElement) && Boolean(document.documentElement.clientWidth)) {
10892        width = document.documentElement.clientWidth;
10893    }
10894    return width;
10895}
10896function IMNGetSharepointWorkspace() {
10897    var workspace = null;
10898
10899    if (typeof g_Workspace != "undefined") {
10900        workspace = document.getElementById(g_Workspace);
10901    }
10902    if (workspace == null) {
10903        workspace = document.body;
10904    }
10905    return workspace;
10906}
10907function RenderSharedHoverCardContainer() {
10908    if (SharedHoverCardContainer == null) {
10909        SharedHoverCardContainer = CreateSharedHoverCardContainer();
10910        if (!IsIFrameSharedHoverCard) {
10911            SharedHoverCardIFrame = document.createElement("IFRAME");
10912            if (browseris.firefox3up) {
10913                SharedHoverCardIFrame.setAttribute("src", GetPassThroughProxyRoot() + "/SHCIFrameContainer.html");
10914            }
10915            else {
10916                SharedHoverCardIFrame.onload = function() {
10917                    SharedHoverCardIFrame.onload = function() {
10918                    };
10919                    var doc = SharedHoverCardIFrame.contentWindow.document;
10920
10921                    doc.open();
10922                    doc.write(SharedHoverCardIFrameCode);
10923                    doc.close();
10924                };
10925                SharedHoverCardIFrame.setAttribute("src", "about:blank");
10926            }
10927            SharedHoverCardIFrame.style.cssText = "min-height: 400px;min-width: 500px;";
10928            SharedHoverCardContainer.appendChild(SharedHoverCardIFrame);
10929            SharedHoverCardContainer.onmouseover = SharedHoverCardOnMouseOverHandler;
10930            SharedHoverCardContainer.onfocusin = SharedHoverCardOnMouseOverHandler;
10931            SharedHoverCardContainer.onmouseout = HideSharedHoverCardHandler;
10932            SharedHoverCardContainer.onfocusout = HideSharedHoverCardHandler;
10933        }
10934        var workspace = IMNGetSharepointWorkspace();
10935
10936        workspace.appendChild(SharedHoverCardContainer);
10937    }
10938}
10939function SharedHoverCardOnMouseOverHandler(objEvent) {
10940    var currEvent = GetCurrentEvent(objEvent);
10941    var obj = GetEventTarget(currEvent);
10942
10943    if (Boolean(obj)) {
10944        CancelSharedHoverCardHideTimer();
10945    }
10946}
10947function CreateSharedHoverCardContainer() {
10948    var hoverCardContainer = document.createElement("div");
10949
10950    if (IsIFrameSharedHoverCard) {
10951        hoverCardContainer.style.cssText = "z-index: 1001;background-color: #FFFFFF;min-height: 98px;min-width: 481px;";
10952        hoverCardContainer.style.position = "absolute";
10953        hoverCardContainer.style.border = "0px";
10954        hoverCardContainer.style.display = "none";
10955        hoverCardContainer.style.visibility = "hidden";
10956        hoverCardContainer.appendChild(CreateSpinningWheelContainer());
10957        hoverCardContainer.appendChild(CreateSharedCardContainer());
10958    }
10959    else {
10960        hoverCardContainer.style.cssText = "box-sizing: border-box;box-shadow: 0px 0px 7px rgba(0,0,0,0.4);z-index: 1001;background-color: #FFFFFF;min-height: 401px;min-width: 501px;";
10961        hoverCardContainer.style.position = "absolute";
10962        hoverCardContainer.style.border = "1px solid #DEDEDE";
10963        hoverCardContainer.style.display = "none";
10964        hoverCardContainer.style.visibility = "hidden";
10965    }
10966    return hoverCardContainer;
10967}
10968function CreateSpinningWheelContainer() {
10969    var spinningWheel = document.createElement("div");
10970
10971    spinningWheel.style.display = "none";
10972    spinningWheel.style.visibility = "hidden";
10973    var waitingImg = document.createElement("img");
10974
10975    waitingImg.src = "/_layouts/15/images/gears_anv4.gif?rev=43";
10976    spinningWheel.appendChild(waitingImg);
10977    return spinningWheel;
10978}
10979function CreateSharedCardContainer() {
10980    var container = document.createElement("div");
10981
10982    container.style.display = "none";
10983    container.style.visibility = "hidden";
10984    return container;
10985}
10986function RenderSharedHoverCard(targetElement, userEmail, userTitle) {
10987    if (SharedHoverCardBootStrapped) {
10988        if (typeof sharedHoverCardShim.createSharedHoverCard != "undefined") {
10989            sharedHoverCardShim.createSharedHoverCard(targetElement, userEmail, userTitle, IMNGetPresence(userEmail));
10990        }
10991    }
10992    else {
10993        SharedHoverCardPending = new Object;
10994        SharedHoverCardPending.TargetElement = targetElement;
10995        SharedHoverCardPending.UserEmail = userEmail;
10996        SharedHoverCardPending.UserTitle = userTitle;
10997    }
10998}
10999function IMNGetRelativeUrl() {
11000    if (IsIFrameSharedHoverCard && parent != window) {
11001        var parentWin = parent;
11002
11003        return parentWin.IMNGetRelativeUrl();
11004    }
11005    var relativeUrl = "";
11006
11007    if (typeof _spPageContextInfo != "undefined" && typeof _spPageContextInfo.webServerRelativeUrl != "undefined") {
11008        relativeUrl = _spPageContextInfo.webServerRelativeUrl;
11009    }
11010    else {
11011        relativeUrl = "/";
11012    }
11013    if (relativeUrl.lastIndexOf('/') != relativeUrl.length - 1) {
11014        relativeUrl += "/";
11015    }
11016    return relativeUrl;
11017}
11018function IMNGetExchangeServerVersion() {
11019    var version = "";
11020
11021    if (typeof serverSettings != "undefined" && typeof serverSettings.version != "undefined") {
11022        version = serverSettings.version;
11023    }
11024    return version;
11025}
11026function IMNGetScriptKey(scriptUrl) {
11027    var key = scriptUrl;
11028
11029    if (key != null && key != '') {
11030        var lastSlashPosition = key.lastIndexOf('/');
11031
11032        if (lastSlashPosition != -1) {
11033            key = scriptUrl.substring(lastSlashPosition + 1);
11034        }
11035    }
11036    return key;
11037}
11038function SharedHoverCardRenderComplete() {
11039    function FixOwaButtonWidth(className) {
11040        var elements = SharedHoverCardContainer.getElementsByClassName(className);
11041
11042        if (elements == null) {
11043            return;
11044        }
11045        for (var i = 0; i < elements.length; i++) {
11046            var element = elements[i];
11047
11048            if (element != null) {
11049                element.style.minWidth = '0px';
11050                element.style.marginLeft = '0px';
11051            }
11052        }
11053    }
11054    function OnHoverCardUpdate() {
11055        FixOwaButtonWidth('o365button');
11056        var elements = SharedHoverCardContainer.getElementsByClassName('image-personcard_event_mo-png');
11057
11058        if (elements != null) {
11059            for (var i = 0; i < elements.length; i++) {
11060                var element = elements[i];
11061
11062                if (element != null && element.parentNode != null) {
11063                    element.parentNode.style.display = 'none';
11064                }
11065            }
11066        }
11067    }
11068    if (SharedHoverCardContainer != null) {
11069        var endTime = (new Date()).getTime();
11070        var actionName = currentShowHoverCardInstanceBootstrappedState ? "ShowHoverCardWithBootStrappedEnd" : "ShowHoverCardWithoutBootStrappedEnd";
11071
11072        if (IsIFrameSharedHoverCard) {
11073            parent.SharedHoverCardLogRUMExtendedAction(actionName, currentShowHoverCardInstance, null, endTime, null);
11074        }
11075        else {
11076            LogRUMExtendedAction(actionName, currentShowHoverCardInstance, null, endTime, null);
11077        }
11078        var placeHolder = SharedHoverCardContainer.firstChild;
11079        var cardContainer = SharedHoverCardContainer.lastChild;
11080
11081        if (placeHolder != null && cardContainer != null) {
11082            if (typeof window.chrome != "undefined") {
11083                cardContainer.addEventListener("DOMNodeInserted", OnHoverCardUpdate, false);
11084            }
11085            else {
11086                cardContainer.addEventListener("DOMAttrModified", OnHoverCardUpdate, false);
11087            }
11088            placeHolder.style.display = "none";
11089            placeHolder.style.visibility = "hidden";
11090            cardContainer.style.display = "table";
11091            cardContainer.style.visibility = "";
11092        }
11093    }
11094}
11095function GetPassThroughProxyRoot() {
11096    return IMNGetRelativeUrl() + "_api/OWAWebService";
11097}
11098function GetLayoutsRoot() {
11099    if (IsIFrameSharedHoverCard && parent != window) {
11100        var parentWin = parent;
11101
11102        return parentWin.GetLayoutsRoot();
11103    }
11104    var layoutsRoot = "_layouts/15/";
11105
11106    if (typeof _spPageContextInfo != "undefined" && typeof _spPageContextInfo.layoutsUrl != "undefined") {
11107        layoutsRoot = _spPageContextInfo.layoutsUrl;
11108    }
11109    layoutsRoot = IMNGetRelativeUrl() + layoutsRoot;
11110    if (layoutsRoot.lastIndexOf('/') != layoutsRoot.length - 1) {
11111        layoutsRoot += "/";
11112    }
11113    return layoutsRoot;
11114}
11115function bootStrapComplete(complete) {
11116    SharedHoverCardBootStrapped = true;
11117    if (ActiveSharedHoverCard != null && ActiveUserField != null && SharedHoverCardPending != null) {
11118        RenderSharedHoverCard(SharedHoverCardPending.TargetElement, SharedHoverCardPending.UserEmail, SharedHoverCardPending.UserTitle);
11119    }
11120}
11121function GetOwaServiceURL() {
11122    return GetPassThroughProxyRoot() + '/service.svc?action={0}';
11123}
11124function GetGetPersonaPhotoURL() {
11125    return GetPassThroughProxyRoot() + '/service.svc/s/GetPersonaPhoto';
11126}
11127function RegisterSharedHoverCardDependencies() {
11128    var layoutsRoot = GetLayoutsRoot();
11129    var style = document.createElement('link');
11130
11131    style.href = layoutsRoot + OwaRoot + 'resources/themes/base/0/sharedhovercard.css';
11132    style.rel = 'stylesheet';
11133    style.type = 'text/css';
11134    (document.getElementsByTagName('head'))[0].appendChild(style);
11135    var element = document.createElement('script');
11136
11137    element.text = 'var slabManifest = {"boot":{"Types":["IBasePersonaViewModelFactory"],"Configurations":[{"type":"ReadPer
11137sonCardComponent"},{"type":"SharedHoverCardComponent"}]}};var st = new Date();var sver = 0';
11138    (document.getElementsByTagName('head'))[0].appendChild(element);
11139    element = document.createElement('script');
11140    element.text = 'var serverSettings = {"version": "version","startTime": st,"cdnEndpoint": "","mapControlUrl": "","appDomainAppVirtualPath": "/owa","layout": "mouse","uiCulture": "en-US","uiTheme": "base","uiLang": "en","scriptsFolder": "' + layoutsRoot + '","resourcesFolder": "' + layoutsRoot + OwaRoot + 'resources","themedImagesFolderFormat": "' + layoutsRoot + OwaRoot + 'resources/themes/base/images/0","bootType": "SharedHoverCard","stylesLocale": "0","stylesFolderFormat": "' + layoutsRoot + OwaRoot + 'resources/themes/base/0"};';
11141    (document.getElementsByTagName('head'))[0].appendChild(element);
11142}
11143function FallBackToActiveX() {
11144    FallbackToActiveX = true;
11145    HideSharedHoverCard();
11146    sharedHoverCardsCount = 0;
11147    RemoveSharedHoverCardHandlers();
11148    ProcessImn();
11149}
11150function OwaServiceRequestHeadersDelegate() {
11151    if (IsIFrameSharedHoverCard && parent != window) {
11152        return parent.OwaServiceRequestHeadersDelegate();
11153    }
11154    if (!fIsNullOrUndefined(window["_spPageContextInfo"]) && !fIsNullOrUndefined(window["_spFormDigestRefreshInterval"]) && !fIsNullOrUndefined(UpdateFormDigest)) {
11155        var ctxObj = window["_spPageContextInfo"];
11156
11157        UpdateFormDigest(ctxObj.webServerRelativeUrl, window["_spFormDigestRefreshInterval"]);
11158    }
11159    var dynamicOwaServiceRequestHeaders = {};
11160    var digestElem = document.getElementById("__REQUESTDIGEST");
11161
11162    if (Boolean(digestElem)) {
11163        dynamicOwaServiceRequestHeaders['X-RequestDigest'] = digestElem.value;
11164    }
11165    return dynamicOwaServiceRequestHeaders;
11166}
11167function BootstrapHoverCard() {
11168    function OpenImConversation(email) {
11169        if (fIsNullOrUndefined(email) || email == '' || fIsNullOrUndefined(IMNControlObj)) {
11170            return;
11171        }
11172        if (IsIFrameSharedHoverCard) {
11173            parent.location.assign("IM:<sip:" + email + ">");
11174        }
11175        else {
11176            window.location.assign("IM:<sip:" + email + ">");
11177        }
11178    }
11179    function OpenEmailCompose(email) {
11180        if (fIsNullOrUndefined(email) || email == '') {
11181            return;
11182        }
11183        if (IsIFrameSharedHoverCard) {
11184            parent.location.assign("MailTo:<" + email + ">");
11185        }
11186        else {
11187            window.location.assign("MailTo:<" + email + ">");
11188        }
11189    }
11190    SharedHoverCardDependenciesLoaded = true;
11191    if (sharedHoverCardShim == null) {
11192        if (typeof SharedHoverCardShimParameters != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_serverSettings != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_slabManifest != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_cardCreatedCallBack != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_bootStrapCallBack != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_openImConversationCallBack != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_openEmailComposeCallBack != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_owaServiceUrl != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_getOwaServiceRequestHeaders != "undefined" && typeof SharedHoverCardShimParameters.prototype.set_getCustomGetPhotoUrl != "undefined" && typeof SharedHoverCardShim != "undefined" && typeof SharedHoverCardShim.createInstance != "undefined") {
11193            sharedHoverCardShimParameters = new SharedHoverCardShimParameters();
11194            sharedHoverCardShimParameters.set_serverSettings(serverSettings);
11195            sharedHoverCardShimParameters.set_slabManifest(slabManifest);
11196            sharedHoverCardShimParameters.set_cardCreatedCallBack(SharedHoverCardRenderComplete);
11197            sharedHoverCardShimParameters.set_bootStrapCallBack(bootStrapComplete);
11198            sharedHoverCardShimParameters.set_openImConversationCallBack(OpenImConversation);
11199            sharedHoverCardShimParameters.set_openEmailComposeCallBack(OpenEmailCompose);
11200            sharedHoverCardShimParameters.set_owaServiceUrl(GetOwaServiceURL());
11201            sharedHoverCardShimParameters.set_getOwaServiceRequestHeaders(OwaServiceRequestHeadersDelegate);
11202            sharedHoverCardShimParameters.set_getCustomGetPhotoUrl(GetGetPersonaPhotoURL());
11203            sharedHoverCardShim = SharedHoverCardShim.createInstance(sharedHoverCardShimParameters);
11204        }
11205        if (sharedHoverCardShim == null && typeof SharedHoverCardShim != "undefined") {
11206            var owaServiceRequestHeaders = {};
11207
11208            owaServiceRequestHeaders['X-RequestDigest'] = (document.getElementById('__REQUESTDIGEST')).value;
11209            sharedHoverCardShim = new SharedHoverCardShim(serverSettings, slabManifest, SharedHoverCardRenderComplete, bootStrapComplete, GetOwaServiceURL(), owaServiceRequestHeaders, GetGetPersonaPhotoURL());
11210        }
11211        if (sharedHoverCardShim != null && typeof sharedHoverCardShim.bootStrapCard != "undefined") {
11212            sharedHoverCardShim.bootStrapCard();
11213        }
11214        else {
11215            FallBackToActiveX();
11216        }
11217    }
11218}
11219function RemoveSharedHoverCardHandlers() {
11220    for (var i = 0; i < sharedHoverCardMarkerBatchSize; ++i) {
11221        if (sharedHoverCardsCount == sharedHoverCardElementsCount)
11222            return;
11223        var sharedHoverCardElement = sharedHoverCardElements[sharedHoverCardsCount];
11224
11225        if (sharedHoverCardElement != null && typeof sharedHoverCardElement != 'undefined') {
11226            sharedHoverCardElement.onmouseover = null;
11227            sharedHoverCardElement.onfocusin = null;
11228            sharedHoverCardElement.onmouseout = null;
11229            sharedHoverCardElement.onfocusout = null;
11230        }
11231        sharedHoverCardsCount++;
11232    }
11233    setTimeout("RemoveSharedHoverCardHandlers()", sharedHoverCardMarkerBatchDelay);
11234}
11235function IMNGetPresence(userEmail) {
11236    var presence = 0;
11237
11238    if (userEmail != '' && EnsureIMNControl()) {
11239        try {
11240            presence = IMNControlObj.GetStatus(userEmail, "");
11241            presence = IMNControlObj.GetStatus(userEmail, "");
11242            presence = MapIMNPresenceToOWAPresence(presence);
11243        }
11244        catch (e) { }
11245    }
11246    return presence;
11247}
11248function MapIMNPresenceToOWAPresence(presence) {
11249    var owaPresence = 0;
11250
11251    switch (presence) {
11252    case 0:
11253    case 11:
11254        owaPresence = 2;
11255        break;
11256    case 1:
11257    case 12:
11258        owaPresence = 1;
11259        break;
11260    case 2:
11261    case 4:
11262    case 6:
11263    case 8:
11264    case 13:
11265    case 16:
11266    case 17:
11267        owaPresence = 3;
11268        break;
11269    case 3:
11270    case 5:
11271    case 7:
11272    case 10:
11273    case 14:
11274    case 19:
11275    case 20:
11276    case 21:
11277        owaPresence = 4;
11278        break;
11279    case 9:
11280    case 15:
11281        owaPresence = 6;
11282    case 18:
11283        owaPresence = 5;
11284        break;
11285    default:
11286        owaPresence = 0;
11287        break;
11288    }
11289    return owaPresence;
11290}
11291function IMN_RenderPresenceStatusText(userEmail, containerId) {
11292    if (userEmail != '' && containerId != '' && EnsureIMNControl()) {
11293        if (!Boolean(IMNDictionaryPresenceTextObj)) {
11294            IMNDictionaryPresenceTextObj = new Object();
11295            IMNNameDictionaryPresenceTextObj = new Object();
11296        }
11297        if (!IMNNameDictionaryPresenceTextObj[containerId]) {
11298            IMNNameDictionaryPresenceTextObj[containerId] = userEmail;
11299        }
11300        if (typeof IMNDictionaryPresenceTextObj[containerId] == "undefined") {
11301            IMNDictionaryPresenceTextObj[containerId] = 1;
11302        }
11303        if (typeof g_presenceEnabled != "undefined" && g_presenceEnabled && IMNControlObj.PresenceEnabled) {
11304            var state = 1;
11305
11306            if (typeof IMNControlObj.GetStatus != 'undefined') {
11307                state = IMNControlObj.GetStatus(userEmail, containerId);
11308            }
11309            if (IMNIsOnlineState(state)) {
11310                var presenceTextElement = document.getElementById(containerId);
11311
11312                IMNUpdatePresenceText(presenceTextElement, state);
11313                IMNDictionaryPresenceTextObj[containerId] = state;
11314            }
11315        }
11316    }
11317}
11318function IMNUpdatePresenceText(element, state) {
11319    if (typeof element != 'undefined') {
11320        var imnInfo = IMNGetStatusImage(state, true);
11321
11322        element.innerHTML = imnInfo.alt;
11323    }
11324}
11325var _spBodyOnLoadFunctionNames;
11326var _spBodyOnLoadFunctions;
11327var _spBodyOnLoadCalled;
11328var _spOriginalFormAction;
11329var _spEscapedFormAction;
11330var _spFormOnSubmitCalled;
11331var _spBodyOnPageShowRegistered;
11332
11333function _spBodyOnPageShow(evt) {
11334    _spFormOnSubmitCalled = false;
11335}
11336function _spResetFormOnSubmitCalledFlag(sender, e) {
11337    _spFormOnSubmitCalled = false;
11338}
11339function _ribbonReadyForInit() {
11340    return _spBodyOnLoadCalled;
11341}
11342function _spBodyOnLoadWrapperInit() {
11343    if ((ajaxNavigate.get_search()).match(new RegExp("[?&]IsDlg=1")) == null) {
11344        FixRibbonAndWorkspaceDimensions();
11345    }
11346}
11347function _spBodyOnLoadWrapper() {
11348    if (_spBodyOnLoadCalled) {
11349        return;
11350    }
11351    _spBodyOnLoadCalled = true;
11352    _spBodyOnLoadWrapperInit();
11353    if (!_spBodyOnPageShowRegistered && typeof browseris != "undefined" && !browseris.ie && typeof window.addEventListener == 'function') {
11354        window.addEventListener('pageshow', _spBodyOnPageShow, false);
11355        _spBodyOnPageShowRegistered = true;
11356    }
11357    if (typeof Sys != "undefined" && typeof Sys.WebForms != "undefined" && typeof Sys.WebForms.PageRequestManager != "undefined") {
11358        var pageRequestMgr = Sys.WebForms.PageRequestManager.getInstance();
11359
11360        if (!_spPageLoadedRegistered && pageRequestMgr != null) {
11361            pageRequestMgr.add_pageLoaded(_spPageLoaded);
11362            _spPageLoadedRegistered = true;
11363        }
11364    }
11365    if (!_spPageLoadedRegistered) {
11366        _spPageLoaded();
11367    }
11368    _spFormOnSubmitCalled = false;
11369    if (typeof Sys != "undefined" && typeof Sys.Net != "undefined" && typeof Sys.Net.WebRequestManager != "undefined") {
11370        Sys.Net.WebRequestManager.add_invokingRequest(_spResetFormOnSubmitCalledFlag);
11371    }
11372    if (typeof NotifyBodyLoadedAndExecuteWaitingJobs != "undefined") {
11373        NotifyBodyLoadedAndExecuteWaitingJobs();
11374    }
11375    ExecuteOrDelayUntilScriptLoaded(ProcessDefaultOnLoad, "core.js");
11376    if (typeof g_prefetch == "undefined" || g_prefetch == 1) {
11377        var uri = new URI(window.location.href, {
11378            queryCaseInsensitive: true
11379        });
11380        var prefetch = uri.getQueryParameter("prefetch");
11381
11382        if (prefetch != String(0))
11383            _spPreFetch();
11384    }
11385    else {
11386        EnsureScript("strings.js", TypeofFullName("Strings"), null);
11387        EnsureScript("core.js", TypeofFullName("UpdateAnimationUserControl"), null);
11388    }
11389}
11390var g_numberOfYields;
11391
11392function _spDelayAfterAllScripts(fn) {
11393    _spYield(fn, g_numberOfYields);
11394}
11395function _spYield(fn, count) {
11396    if (count > 0) {
11397        window.setTimeout(function() {
11398            _spYield(fn, count - 1);
11399        }, 0);
11400    }
11401    else {
11402        fn();
11403    }
11404}
11405function _spTrace(message) {
11406}
11407var g_spPreFetchKeys;
11408
11409function _spPreFetch() {
11410    _spDelayAfterAllScripts(function() {
11411        var sod;
11412
11413        if (Boolean(_v_dictSod)) {
11414            _spTrace("-----Starting prefetch-----");
11415            g_spPreFetchKeys.push("strings.js");
11416            g_spPreFetchKeys.push("core.js");
11417            if (typeof ribbon == "undefined" && typeof _ribbon != "undefined") {
11418                g_spPreFetchKeys.push("ribbon");
11419            }
11420            for (var idx = 0; idx < g_spPreFetchKeys.length; idx++) {
11421                var key = g_spPreFetchKeys[idx];
11422
11423                sod = _v_dictSod[key];
11424                if (Boolean(sod)) {
11425                    LoadSod(sod);
11426                }
11427            }
11428        }
11429    });
11430    if (typeof _ribbon != "undefined" && Boolean(_ribbon) && SP.SOD.get_ribbonImagePrefetchEnabled()) {
11431        window.setTimeout(function() {
11432            if (Boolean(document.images) && typeof _spPageContextInfo != "undefined" && typeof _spPageContextInfo.currentLanguage != "undefined") {
11433                window.imgRibbon32x32 = new Image();
11434                var imgUrl = "/_layouts/15/" + String(_spPageContextInfo.currentLanguage) + "/images/formatmap32x32.png";
11435
11436                window.imgRibbon32x32.src = GetImageUrlWithRevision(imgUrl);
11437                window.imgRibbon16x16 = new Image();
11438                imgUrl = "/_layouts/15/" + String(_spPageContextInfo.currentLanguage) + "/images/formatmap16x16.png";
11439                window.imgRibbon16x16.src = GetImageUrlWithRevision(imgUrl);
11440            }
11441        }, 0);
11442    }
11443}
11444var _spSuppressFormOnSubmitWrapper;
11445
11446function _spFormOnSubmitWrapper() {
11447    if (_spSuppressFormOnSubmitWrapper) {
11448        return true;
11449    }
11450    if (_spFormOnSubmitCalled) {
11451        return false;
11452    }
11453    if (typeof _spFormOnSubmit == "function") {
11454        var retval = _spFormOnSubmit();
11455        var testval = false;
11456
11457        if (typeof retval == typeof testval && retval == testval) {
11458            return false;
11459        }
11460    }
11461    if (typeof _startOnSubmitStatement == "function") {
11462        return _startOnSubmitStatement();
11463    }
11464    _spFormOnSubmitCalled = true;
11465    return true;
11466}
11467var _inlineEditString;
11468var _spPageLoadedRegistered;
11469
11470function _spPageLoaded() {
11471    _spOriginalFormAction = null;
11472    EscapeFormAction();
11473    RefreshInplViewState();
11474    RefreshHeroButtonState();
11475    InlineEditSetDefaultFocus();
11476}
11477function InlineEditSetDefaultFocus() {
11478    if (_inlineEditString != null) {
11479        var index = _inlineEditString.indexOf("#");
11480
11481        if (index <= 0)
11482            return;
11483        var iidVal = _inlineEditString.substring(0, index);
11484        var trs = document.getElementsByTagName("TR");
11485
11486        for (var i = 0; i < trs.length; i++) {
11487            if (trs[i].getAttribute("automode") == iidVal) {
11488                var nodeWalkStr = _inlineEditString.substring(index + 1);
11489                var nodeWalks = nodeWalkStr.split(",");
11490                var node = trs[i];
11491
11492                for (var j = 0; j < nodeWalks.length; j++) {
11493                    if (node == null)
11494                        break;
11495                    node = node.firstChild;
11496                    for (var k = 0; k < nodeWalks[j]; k++) {
11497                        if (node == null)
11498                            break;
11499                        node = node.nextSibling;
11500                    }
11501                }
11502                if (node != null)
11503                    focusControl(node);
11504                break;
11505            }
11506        }
11507        _inlineEditString = null;
11508    }
11509}
11510function focusControl(targetControl) {
11511    if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
11512        var oldContentEditableSetting;
11513        var focusTarget = targetControl;
11514
11515        if (Boolean(focusTarget) && typeof focusTarget.contentEditable !== "undefined") {
11516            oldContentEditableSetting = focusTarget.contentEditable;
11517            focusTarget.contentEditable = false;
11518        }
11519        else {
11520            focusTarget = null;
11521        }
11522        try {
11523            targetControl.focus();
11524        }
11525        catch (e) { }
11526        if (Boolean(focusTarget)) {
11527            focusTarget.contentEditable = oldContentEditableSetting;
11528        }
11529    }
11530    else {
11531        targetControl.focus();
11532    }
11533}
11534function EscapeFormAction() {
11535    UpdateUrlWhenServerRedirects();
11536    if (document.forms.length > 0 && !Boolean(_spOriginalFormAction)) {
11537        _spOriginalFormAction = document.forms[0].action;
11538        var url = _spOriginalFormAction;
11539        var index = url.indexOf("://");
11540
11541        if (index >= 0) {
11542            var temp = url.substring(index + 3);
11543
11544            index = temp.indexOf("/");
11545            if (index >= 0)
11546                url = temp.substring(index);
11547            if (url.length > 2 && url.charAt(0) == '/' && url.charAt(1) == '/') {
11548                url = url.substring(1);
11549                if (!(window["OffSwitch"] == null || OffSwitch.IsActive("B4F09056-2C39-4EE4-B928-21F236B7DEA5"))) {
11550                    while (url.charAt(1) === '/') {
11551                        url = url.charAt(0) + url.substring(2);
11552                    }
11553                }
11554            }
11555        }
11556        if (url.length > 0) {
11557            _spEscapedFormAction = escapeUrlForCallback(url);
11558            document.forms[0].action = _spEscapedFormAction;
11559            document.forms[0]._initialAction = document.forms[0].action;
11560        }
11561    }
11562}
11563function RefreshHeroButtonState() {
11564    if (typeof _spWebPartComponents != "undefined") {
11565        for (var wp in _spWebPartComponents) {
11566            if (wp.length > 7) {
11567                var strId = wp.substr(7);
11568                var heroButton = window["heroButtonWebPart" + strId];
11569
11570                if (typeof heroButton != "undefined" && heroButton != null && heroButton == true) {
11571                    var ele = document.getElementById("Hero-" + strId);
11572
11573                    if (ele != null)
11574                        ele.style.display = "";
11575                }
11576            }
11577        }
11578    }
11579}
11580function RefreshInplViewState() {
11581    if (typeof window.ctx == "undefined")
11582        return;
11583    var ctxLocal = window.ctx;
11584
11585    if (ctxLocal.clvp == null) {
11586        EnsureScript("inplview", typeof InitAllClvps, function() {
11587            if (ctxLocal.clvp == null)
11588                InitAllClvps();
11589        });
11590        return;
11591    }
11592    var clvp = ctxLocal.clvp;
11593    var tab = clvp.tab;
11594
11595    if (tab == null || tab != null && (tab.parentNode == null || tab.parentNode.innerHTML == null)) {
11596        FixDroppedOrPastedClvps();
11597        if (ctxLocal.dictSel != null) {
11598            ctxLocal.dictSel = [];
11599            ctxLocal.CurrentSelectedItems = 0;
11600        }
11601    }
11602}
11603function RestoreToOriginalFormAction() {
11604    if (_spOriginalFormAction != null) {
11605        if (_spEscapedFormAction == document.forms[0].action) {
11606            document.forms[0].action = _spOriginalFormAction;
11607            document.forms[0]._initialAction = document.forms[0].action;
11608        }
11609        _spOriginalFormAction = null;
11610        _spEscapedFormAction = null;
11611    }
11612}
11613function DefaultFocus() {
11614    if (typeof _spUseDefaultFocus != "undefined") {
11615        var elements = document.getElementsByName("_spFocusHere");
11616        var elem = null;
11617
11618        if (elements == null || elements.length <= 0) {
11619            elem = document.getElementById("_spFocusHere");
11620        }
11621        else if (elements != null && elements.length > 0) {
11622            elem = elements[0];
11623        }
11624        if (elem != null) {
11625            var aLinks = elem.getElementsByTagName("a");
11626
11627            if (aLinks != null && aLinks.length > 0) {
11628                for (var i = 0; i < aLinks.length; i++) {
11629                    if (aLinks[i].style.visibility != "hidden") {
11630                        try {
11631                            aLinks[i].focus();
11632                        }
11633                        catch (e) { }
11634                        break;
11635                    }
11636                }
11637            }
11638        }
11639    }
11640}
11641var g_fAnimateListCSR;
11642
11643function ProcessDefaultOnLoad() {
11644    PrepareForModernOnePageNavigation();
11645    UpdateUrlWhenServerRedirects();
11646    ProcessPNGImages();
11647    UpdateAccessibilityUI();
11648    UpdateAnimationUserControl(false);
11649    window.setTimeout('ProcessImn()', 10);
11650    HandleDLPStatus();
11651    ProcessOnLoadFunctionNames(_spBodyOnLoadFunctionNames);
11652    ProcessOnLoadFunctions(_spBodyOnLoadFunctions);
11653    if (typeof _spUseDefaultFocus != "undefined")
11654        DefaultFocus();
11655    if ((ajaxNavigate.get_hash()).indexOf("InplviewHash") != -1) {
11656        EnsureScriptParams("inplview", "inplview.RestoreAllClvpsNavigation");
11657    }
11658    ProcessReliabilityLogs();
11659}
11660function ProcessOnLoadFunctionNames(onLoadFunctionNames) {
11661    if (onLoadFunctionNames != null) {
11662        for (var i = 0; i < onLoadFunctionNames.length; i++) {
11663            var expr = "if(typeof(" + onLoadFunctionNames[i] + ")=='function'){" + onLoadFunctionNames[i] + "();}";
11664
11665            eval(expr);
11666        }
11667        onLoadFunctionNames = [];
11668    }
11669}
11670function ProcessOnLoadFunctions(onLoadFunctions) {
11671    for (var i = 0; i < onLoadFunctions.length; i++) {
11672        onLoadFunctions[i]();
11673    }
11674    onLoadFunctions = [];
11675}
11676var g_fAreAllSodsLoaded;
11677
11678function ProcessReliabilityLogs() {
11679    if (!g_fAreAllSodsLoaded) {
11680        g_fAreAllSodsLoaded = AreAllSodsLoaded();
11681        window.setTimeout(ProcessReliabilityLogs, 10);
11682        return;
11683    }
11684    SP.ReadyToUploadLogs();
11685}
11686function CoreInvoke(fn) {
11687    var args = Array.prototype.slice.call(arguments, 1);
11688    var _corefn = function() {
11689        var ref = window[fn];
11690
11691        ref.apply(null, args);
11692    };
11693
11694    EnsureScript("core.js", TypeofFullName(fn), _corefn);
11695    return false;
11696}
11697function _bodyOnHashChangeHandler() {
11698    if (typeof _spBodyOnHashChange != 'undefined')
11699        _spBodyOnHashChange();
11700}
11701var DeveloperDashboard;
11702
11703function ToggleDeveloperDashboard(siteRelativeUrl) {
11704    var wnd;
11705
11706    if (!Boolean(siteRelativeUrl)) {
11707        siteRelativeUrl = '';
11708    }
11709    if (GetCookie('WSS_DeveloperDashboard') == "true") {
11710        ddCloseWindow(DeveloperDashboard.wnd);
11711    }
11712    else {
11713        try {
11714            wnd = ddGetWindow();
11715            if (ddIsWndValid(wnd)) {
11716                ddAttachToWindow(wnd);
11717            }
11718            else {
11719                ddOpenWindow(wnd, siteRelativeUrl);
11720            }
11721        }
11722        catch (e) {
11723            ddFail(wnd);
11724        }
11725    }
11726}
11727function ddFail(wnd) {
11728    if (Boolean(wnd))
11729        wnd.close();
11730}
11731function ddIsWndValid(wnd) {
11732    if ('unknown' == typeof wnd.location.href)
11733        throw null;
11734    return 'about:blank' !== wnd.location.href;
11735}
11736function ddResetState() {
11737    DeveloperDashboard.wnd = null;
11738    SetCookieEx(DeveloperDashboard.cookie, false, true, window);
11739}
11740function ddCloseWindow(wnd) {
11741    if (null != wnd)
11742        wnd.close();
11743    ddResetState();
11744}
11745function ddOpenWindow(wnd, siteRelativeUrl) {
11746    SetCookieEx(DeveloperDashboard.cookie, true, true, window);
11747    DeveloperDashboard.wnd = wnd;
11748    ddAdoptWindow(wnd, siteRelativeUrl);
11749}
11750function ddAdoptWindow(wnd, siteRelativeUrl) {
11751    wnd.location.href = siteRelativeUrl + '/_layouts/15/devdash.aspx';
11752    if (browseris.chrome)
11753        window.setTimeout(function() {
11754            wnd.moveTo(screen.width / 2, 0);
11755        }, 100);
11756    else
11757        wnd.moveTo(screen.width / 2, 0);
11758}
11759function ddGetWindow() {
11760    var wnd, w, h;
11761
11762    wnd = DeveloperDashboard.wnd;
11763    if (Boolean(wnd))
11764        return wnd;
11765    w = screen.width;
11766    h = screen.height;
11767    wnd = window.open('', 'devdash', 'height=600,width=800,resizable=1,scrollbars=1,top=' + String(h) + ',left=' + String(w));
11768    return wnd;
11769}
11770function ddAttachToWindow(wnd) {
11771    if (null != wnd) {
11772        ddHandshake(wnd);
11773        ddCScopeSet();
11774    }
11775    else {
11776        ddResetHandshake();
11777        ddCScopeReset();
11778    }
11779}
11780function ddHandshake(wnd) {
11781    var tid;
11782    var count = 0;
11783
11784    tid = setInterval(Wait, 20);
11785    function Wait() {
11786        var loaded;
11787        var currMsg;
11788
11789        loaded = 'DeveloperDashboard' in wnd && 'Messaging' in wnd.DeveloperDashboard && 'PostMsg' in wnd.DeveloperDashboard.Messaging;
11790        if (loaded) {
11791            DeveloperDashboard.PostMsg = function(to, subject, msg) {
11792                try {
11793                    wnd.DeveloperDashboard.Messaging.PostMsg(to, subject, msg);
11794                }
11795                catch (e) { }
11796            };
11797            clearInterval(tid);
11798            if (null !== DeveloperDashboard.msgQueue) {
11799                for (var i = 0, len = DeveloperDashboard.msgQueue.length; i < len; i++) {
11800                    currMsg = DeveloperDashboard.msgQueue[i];
11801                    DeveloperDashboard.PostMsg(currMsg.to, currMsg.subject, currMsg.msg);
11802                }
11803            }
11804        }
11805        else {
11806            if (100 == ++count) {
11807                clearInterval(tid);
11808                ddAttachToWindow(null);
11809            }
11810        }
11811    }
11812}
11813function ddResetHandshake() {
11814    DeveloperDashboard.msgQueue = null;
11815    DeveloperDashboard.PostMsg = function(to, subject, msg) {
11816    };
11817}
11818function ddInit() {
11819    var wnd;
11820    var attached = false;
11821
11822    if (GetCookie('WSS_DeveloperDashboard') == "true") {
11823        try {
11824            wnd = ddGetWindow();
11825            if (ddIsWndValid(wnd)) {
11826                DeveloperDashboard.wnd = wnd;
11827                ddHandshake(wnd);
11828                attached = true;
11829            }
11830            else {
11831                wnd.close();
11832            }
11833        }
11834        catch (e) {
11835            ddFail(wnd);
11836        }
11837    }
11838    if (!attached) {
11839        ddResetHandshake();
11840    }
11841}
11842var CScope;
11843
11844function ddCScopeSet() {
11845    var hasETW;
11846    var nullScope;
11847
11848    hasETW = typeof window.msWriteProfilerMark != 'undefined';
11849    nullScope = null;
11850    function LogTime(timerName) {
11851        var time = (new Date).getTime();
11852
11853        if (hasETW)
11854            window.msWriteProfilerMark(timerName);
11855        return time;
11856    }
11857    function _CScope(scopeName, prefix) {
11858        this.Name = scopeName;
11859        this.Prefix = Boolean(prefix) ? prefix : 'Script';
11860        this.Children = [];
11861    }
11862    _CScope.prototype = {
11863        Start: function() {
11864            _CScope.Start(this);
11865            this.StartTimeUtc = LogTime(this.Name);
11866        },
11867        Stop: function() {
11868            this.EndTimeUtc = LogTime(this.Name);
11869            _CScope.Stop(this);
11870        },
11871        Parent: null
11872    };
11873    _CScope.Current = nullScope;
11874    _CScope.Start = function(scope) {
11875        scope.Parent = _CScope.Current;
11876        if (Boolean(_CScope.Current)) {
11877            _CScope.Current.Children.push(scope);
11878        }
11879        _CScope.Current = scope;
11880    };
11881    _CScope.Stop = function(scope) {
11882        _CScope.Current = scope.Parent;
11883        if (null == _CScope.Current) {
11884            scope.Name = scope.Prefix + ' (' + scope.Name + ')';
11885            if ("undefined" != typeof DeveloperDashboard.PostMsg) {
11886                DeveloperDashboard.PostMsg('MS.Scenarios', 'AddScenario', scope);
11887            }
11888        }
11889    };
11890    CScope = _CScope;
11891}
11892function ddCScopeReset() {
11893    var noop = function() {
11894    };
11895
11896    function _CScopeMock(scopeName, prefix) {
11897    }
11898    _CScopeMock.prototype = {
11899        Start: noop,
11900        Stop: noop
11901    };
11902    CScope = _CScopeMock;
11903}
11904function ddToggleCScope() {
11905    if (null != DeveloperDashboard.wnd)
11906        ddCScopeSet();
11907    else
11908        ddCScopeReset();
11909}
11910var flyoutsAllowed;
11911
11912function enableFlyoutsAfterDelay() {
11913    setTimeout("flyoutsAllowed = true;", 25);
11914}
11915function overrideMenu_HoverStatic(item) {
11916    if (!flyoutsAllowed) {
11917        setTimeout(delayMenu_HoverStatic(item), 50);
11918    }
11919    else {
11920        var node = Menu_HoverRoot(item);
11921        var data = Menu_GetData(item);
11922
11923        if (!Boolean(data))
11924            return;
11925        window.__disappearAfter = data.disappearAfter;
11926        Menu_Expand(node, data.horizontalOffset, data.verticalOffset);
11927    }
11928}
11929function delayMenu_HoverStatic(item) {
11930    return function() {
11931        overrideMenu_HoverStatic(item);
11932    };
11933}
11934var g_ExecuteOrWaitJobs;
11935
11936function ExecuteOrDelayUntilEventNotified(func, eventName) {
11937    var executed = false;
11938    var eventInfo = g_ExecuteOrWaitJobs[eventName];
11939
11940    if (eventInfo != null && eventInfo.notified) {
11941        if (eventInfo.args != null) {
11942            func.apply(null, eventInfo.args);
11943        }
11944        else {
11945            func();
11946        }
11947        return true;
11948    }
11949    else {
11950        DelayUntilEventNotified(func, eventName);
11951        return false;
11952    }
11953}
11954function DelayUntilEventNotified(func, eventName) {
11955    var eventInfo = g_ExecuteOrWaitJobs[eventName];
11956
11957    if (eventInfo == null) {
11958        eventInfo = new Object();
11959        eventInfo.notified = false;
11960        eventInfo.jobs = [];
11961        eventInfo.args = null;
11962        g_ExecuteOrWaitJobs[eventName] = eventInfo;
11963    }
11964    eventInfo.jobs.push(func);
11965}
11966function NotifyEventAndExecuteWaitingJobs(eventName, args) {
11967    if (!Boolean(g_ExecuteOrWaitJobs))
11968        return;
11969    var eventInfo = g_ExecuteOrWaitJobs[eventName];
11970
11971    if (eventInfo == null || typeof eventInfo == "undefined") {
11972        eventInfo = new Object();
11973        eventInfo.notified = true;
11974        eventInfo.jobs = [];
11975        eventInfo.args = args;
11976        g_ExecuteOrWaitJobs[eventName] = eventInfo;
11977    }
11978    else {
11979        if (eventInfo.jobs != null) {
11980            for (var i = 0; i < eventInfo.jobs.length; i++) {
11981                var func = eventInfo.jobs[i];
11982
11983                if (args != null) {
11984                    func.apply(null, args);
11985                }
11986                else {
11987                    func();
11988                }
11989            }
11990        }
11991        eventInfo.notified = true;
11992        eventInfo.jobs = [];
11993        eventInfo.args = args;
11994    }
11995}
11996function ExecuteOrDelayUntilScriptLoaded(func, depScriptFileName) {
11997    depScriptFileName = depScriptFileName.toLowerCase();
11998    var eventName = "sp.scriptloaded-" + depScriptFileName;
11999
12000    return ExecuteOrDelayUntilEventNotified(func, eventName);
12001}
12002function NotifyScriptLoadedAndExecuteWaitingJobs(scriptFileName) {
12003    scriptFileName = scriptFileName.toLowerCase();
12004    if (typeof _v_dictSod != 'undefined') {
12005        if (typeof _v_dictSod[scriptFileName] == 'undefined') {
12006            switch (scriptFileName) {
12007            case "ie55up.js":
12008                if (typeof _v_dictSod["browserScript"] == 'undefined')
12009                    RegisterSod("browserScript", null);
12010                _v_dictSod["ie55up.js"] = _v_dictSod["browserScript"];
12011                break;
12012            case "sp.ribbon.js":
12013                if (typeof _v_dictSod["ribbon"] == 'undefined')
12014                    RegisterSod("ribbon", null);
12015                _v_dictSod["sp.ribbon.js"] = _v_dictSod["ribbon"];
12016                break;
12017            case "inplview.js":
12018                if (typeof _v_dictSod["inplview"] == 'undefined')
12019                    RegisterSod("inplview", null);
12020                _v_dictSod["inplview.js"] = _v_dictSod["inplview"];
12021                break;
12022            default:
12023                RegisterSod(scriptFileName, null);
12024                break;
12025            }
12026        }
12027        _v_dictSod[scriptFileName].state = 4;
12028    }
12029    var eventName = "sp.scriptloaded-" + scriptFileName;
12030
12031    NotifyEventAndExecuteWaitingJobs(eventName);
12032    if (typeof g_MinimalDownload != 'undefined' && Boolean(g_MinimalDownload) && typeof RegisterModuleInit != 'undefined') {
12033        var lastSlashPos = scriptFileName.lastIndexOf('/');
12034
12035        if (-1 != lastSlashPos) {
12036            scriptFileName = scriptFileName.substring(lastSlashPos + 1);
12037        }
12038        var lastdotPos = scriptFileName.lastIndexOf('.');
12039        var funcName = null;
12040
12041        if (-1 == lastdotPos)
12042            funcName = scriptFileName;
12043        else
12044            funcName = scriptFileName.substring(0, lastdotPos);
12045        funcName = funcName.replace(/\./g, '_');
12046        var funcPattern = new RegExp("^[A-Za-z0-9_\\-\$]+$");
12047
12048        if (Boolean(funcPattern.exec(funcName))) {
12049            funcName = "$_global_" + funcName;
12050            var initFuncName = null;
12051
12052            try {
12053                initFuncName = window[funcName];
12054            }
12055            catch (ex) { }
12056            ;
12057            if (null != initFuncName) {
12058                RegisterModuleInit(scriptFileName, initFuncName);
12059            }
12060        }
12061    }
12062}
12063function ExecuteOrDelayUntilBodyLoaded(func) {
12064    var eventName = "sp.bodyloaded";
12065
12066    return ExecuteOrDelayUntilEventNotified(func, eventName);
12067}
12068function NotifyBodyLoadedAndExecuteWaitingJobs() {
12069    var eventName = "sp.bodyloaded";
12070
12071    NotifyEventAndExecuteWaitingJobs(eventName);
12072}
12073function FFClick(elm) {
12074    var evt = document.createEvent("MouseEvents");
12075
12076    evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
12077    elm.dispatchEvent(evt);
12078}
12079function _spOnSilverlightError(webPartId, sender, args) {
12080    if (args.errorType == "InitializeError") {
12081        _spSetSLErrorMessage(webPartId, Strings.STS.L_ErrorMessage_InitializeError);
12082    }
12083}
12084function _spSetSLPluginNotLoadedErrorMessage(webPartId) {
12085    _spSetSLErrorMessage(webPartId, Strings.STS.L_ErrorMessage_PluginNotLoadedError);
12086}
12087function _spSetSLErrorMessage(webPartId, strErrorMessage) {
12088    var strSilverlightErrorDivId = "SilverlightRuntimeErrorMessage_" + webPartId;
12089    var strDefaultConfigurationMessageDivId = "WebPartDefaultConfigurationMessage_" + webPartId;
12090    var strSilverlightObjectDivId = "SilverlightObjectDiv_" + webPartId;
12091
12092    (document.getElementById(strSilverlightObjectDivId)).style.display = "none";
12093    (document.getElementById(strSilverlightErrorDivId)).style.display = "block";
12094    (document.getElementById(strSilverlightErrorDivId)).innerHTML = strErrorMessage;
12095    (document.getElementById(strDefaultConfigurationMessageDivId)).style.display = "block";
12096}
12097var cuiKeyHash;
12098
12099function _processKeyCodes(val) {
12100    if (cuiKeyHash[val])
12101        return cuiKeyHash[val];
12102    return val;
12103}
12104var g_fhs;
12105
12106function _ribbonScaleHeader(elmTopBars, isRtl) {
12107    var elmTopBar2 = elmTopBars.childNodes[1];
12108    var len = 0;
12109
12110    if (Boolean(elmTopBar2))
12111        len = elmTopBar2.childNodes.length;
12112    var elmTabHeaders = null;
12113    var elmTabRowRight = null;
12114
12115    if (typeof isRtl == 'undefined')
12116        isRtl = false;
12117    if (typeof g_fhs == 'undefined') {
12118        if (typeof _ribbonShouldFixRtlHeaders == 'function')
12119            g_fhs = _ribbonShouldFixRtlHeaders(isRtl);
12120        else
12121            g_fhs = false;
12122    }
12123    for (var i = 0; i < len; i++) {
12124        var child = elmTopBar2.childNodes[i];
12125
12126        if (child.className.indexOf('ms-cui-tts') != -1)
12127            elmTabHeaders = child;
12128        else if (child.className.indexOf('ms-cui-TabRowRight') != -1)
12129            elmTabRowRight = child;
12130    }
12131    if (Boolean(elmTabHeaders) && 'undefined' == typeof elmTabHeaders._widthAdded && g_fhs)
12132        _ribbonFixHeaderWidth(elmTabHeaders);
12133    if (!Boolean(elmTabHeaders) || !Boolean(elmTabRowRight))
12134        return;
12135    elmTabRowRight.style.display = 'block';
12136    var needsScaling = _ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl);
12137
12138    if (needsScaling) {
12139        _ribbonHeaderScaleDown(elmTabHeaders);
12140        if (_ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl)) {
12141            _ribbonHeaderScaleDown(elmTabHeaders);
12142        }
12143    }
12144    else {
12145        if (_ribbonGetScaleStep(elmTabHeaders) == 0)
12146            return;
12147        _ribbonHeaderScaleUp(elmTabHeaders);
12148        if (_ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl)) {
12149            _ribbonHeaderScaleDown(elmTabHeaders);
12150            return;
12151        }
12152        if (_ribbonGetScaleStep(elmTabHeaders) == 0)
12153            return;
12154        _ribbonHeaderScaleUp(elmTabHeaders);
12155        if (_ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl))
12156            _ribbonHeaderScaleDown(elmTabHeaders);
12157    }
12158    if (_ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl)) {
12159        elmTabRowRight.style.display = 'none';
12160    }
12161}
12162function _ribbonNeedsHeaderScaling(elmTopBar2, elmTabHeaders, elmTabRowRight, isRtl) {
12163    if (elmTabHeaders.offsetWidth > 0 && elmTabRowRight.offsetWidth > 0 && _ribbonElementsWrap(elmTabHeaders, elmTabRowRight, isRtl)) {
12164        return true;
12165    }
12166    if (!g_fhs && _ribbonChildNodesWrapped(elmTabRowRight, isRtl))
12167        return true;
12168    if (_ribbonChildNodesWrapped(elmTopBar2, isRtl))
12169        return true;
12170    return _ribbonChildNodesWrapped(elmTabHeaders, isRtl);
12171}
12172function _ribbonChildNodesWrapped(elmParent, isRtl) {
12173    if (elmParent.offsetWidth == 0)
12174        return false;
12175    var elms = [];
12176    var count = elmParent.childNodes.length;
12177    var i;
12178    var elmChild;
12179
12180    for (i = 0; i < count; i++) {
12181        elmChild = elmParent.childNodes[i];
12182        if (Boolean(elmChild) && elmChild.nodeName != '#text' && elmChild.offsetWidth > 0 && elmChild.offsetHeight > 0) {
12183            elms.push(elmChild);
12184        }
12185    }
12186    count = elms.length;
12187    for (i = 0; i < count; i++) {
12188        elmChild = elms[i];
12189        var elmSibling = elms[i + 1];
12190
12191        if (typeof elmSibling != 'undefined' && Boolean(elmSibling) && _ribbonElementsWrap(elmChild, elmSibling, isRtl)) {
12192            return true;
12193        }
12194    }
12195    return false;
12196}
12197function _ribbonElementsWrap(elmLeft, elmRight, isRtl) {
12198    if (!isRtl && elmLeft.offsetLeft + elmLeft.offsetWidth > elmRight.offsetLeft + 1)
12199        return true;
12200    else if (isRtl && elmRight.offsetLeft + elmRight.offsetWidth > elmLeft.offsetLeft + 1)
12201        return true;
12202    return false;
12203}
12204function _ribbonGetScaleStep(elm) {
12205    if ('undefined' == typeof elm._scaleStep) {
12206        elm._scaleStep = 0;
12207        if (elm.className.indexOf('ms-cui-tts-scale1') != -1)
12208            elm._scaleStep = 1;
12209        else if (elm.className.indexOf('ms-cui-tts-scale2') != -1)
12210            elm._scaleStep = 2;
12211    }
12212    return elm._scaleStep;
12213}
12214function _ribbonSetScaleStep(elm, value) {
12215    elm._scaleStep = value;
12216}
12217function _ribbonHeaderScaleDown(elmTabHeaders) {
12218    var scaleStep = _ribbonGetScaleStep(elmTabHeaders);
12219
12220    if (scaleStep == 0) {
12221        _ribbonHeaderScaleIndex(elmTabHeaders, 1);
12222    }
12223    else if (scaleStep == 1 || scaleStep == 2) {
12224        _ribbonHeaderScaleIndex(elmTabHeaders, 2);
12225    }
12226}
12227function _ribbonHeaderScaleUp(elmTabHeaders) {
12228    var scaleStep = _ribbonGetScaleStep(elmTabHeaders);
12229
12230    if (scaleStep == 1)
12231        _ribbonHeaderScaleIndex(elmTabHeaders, 0);
12232    else if (scaleStep == 2) {
12233        _ribbonHeaderScaleIndex(elmTabHeaders, 1);
12234    }
12235}
12236var g_ribbonHeaderScaleClass;
12237
12238function _ribbonHeaderScaleIndex(elmTabHeaders, index) {
12239    elmTabHeaders.className = g_ribbonHeaderScaleClass[index];
12240    _ribbonSetScaleStep(elmTabHeaders, index);
12241    _ribbonFixHeaderWidth(elmTabHeaders);
12242}
12243function _ribbonFixHeaderWidth(elmTabHeaders) {
12244    if (!g_fhs)
12245        return;
12246    var width = _ribbonCalculateWidth(elmTabHeaders);
12247
12248    elmTabHeaders.style.width = String(width) + 'px';
12249    elmTabHeaders._widthAdded = true;
12250}
12251function _ribbonCalculateWidth(elmTabHeaders) {
12252    var width = 0;
12253    var tabs = elmTabHeaders.childNodes;
12254    var count = tabs.length;
12255
12256    for (var i = 0; i < count; i++) {
12257        var elm = tabs[i];
12258
12259        if (Boolean(elm) && elm.nodeName == 'LI' && elm.offsetWidth > 0) {
12260            var ctxlGroup = elm.childNodes[1];
12261
12262            if (Boolean(ctxlGroup) && ctxlGroup.nodeName == 'UL') {
12263                var groupWidth = _ribbonCalculateWidth(ctxlGroup);
12264
12265                ctxlGroup.style.width = String(groupWidth) + 'px';
12266                width = width + groupWidth + 4;
12267            }
12268            else {
12269                width = width + elm.offsetWidth + 2;
12270            }
12271        }
12272    }
12273    return width;
12274}
12275function SPRibbonInfo() {
12276}
12277function _ribbonOnStartInit(ribbonInfo) {
12278    OnRibbonMinimizedChanged(ribbonInfo.initialTabId == "Ribbon.Read");
12279    var _elmRibbon = document.getElementById("Ribbon");
12280
12281    if (!Boolean(_elmRibbon) || Boolean(ribbonInfo) && ribbonInfo.buildMinimized)
12282        return;
12283    var _elmTabCont = _elmRibbon.childNodes[2];
12284    var bTabContainerExists = Boolean(_elmTabCont) && _elmTabCont.className.indexOf("ms-cui-tabContainer") != -1;
12285
12286    if (!bTabContainerExists && ribbonInfo.initialTabId != "Ribbon.Read") {
12287        ExecuteOrDelayUntilScriptLoaded(function() {
12288            PrepareRibbonForAnimation(false, false);
12289            _elmTabCont = document.createElement("div");
12290            _elmTabCont.className = "ms-cui-tabContainer";
12291            var _elmBlankTab = document.createElement("ul");
12292
12293            _elmBlankTab.id = "Ribbon.BlankTab";
12294            _elmBlankTab.className = "ms-cui-tabBody";
12295            _elmBlankTab.innerHTML = "<span class=\"ms-ribbontabswitchloading\"><img src=\"" + "/_layouts/15/images/loadingcirclests16.gif?rev=43" + "\" alt=\"\"/><span>" + Strings.STS.L_Loading_Text + "</span></span>";
12296            _elmTabCont.appendChild(_elmBlankTab);
12297            _elmRibbon.appendChild(_elmTabCont);
12298            AnimateRibbonMinimizedChanged(false);
12299        }, "core.js");
12300    }
12301}
12302var StatusIdWithTopPriority;
12303var StatusColorWithTopPriority;
12304var StatusPriority;
12305var StatusBarClassNames;
12306var ColorMap;
12307
12308function getStatusTitle(statusId) {
12309    switch (statusId) {
12310    case 4:
12311        return Strings.STS.L_StatusBarRed_Text;
12312    case 3:
12313        return Strings.STS.L_StatusBarYellow_Text;
12314    case 2:
12315        return Strings.STS.L_StatusBarGreen_Text;
12316    case 1:
12317        return Strings.STS.L_StatusBarBlue_Text;
12318    default:
12319        return "";
12320    }
12321}
12322var g_uniqueIndex;
12323
12324function getUniqueIndex() {
12325    g_uniqueIndex++;
12326    return g_uniqueIndex;
12327}
12328function addStatus(strTitle, strHtml, atBegining, isVanilla, bIsDismissible, dismissAltText) {
12329    var sb = document.getElementById("pageStatusBar");
12330
12331    if (sb != null) {
12332        sb.setAttribute("aria-live", "polite");
12333        sb.setAttribute("aria-relevant", "all");
12334        var st = _createStatusMarkup(strTitle, strHtml, true, isVanilla, bIsDismissible, dismissAltText);
12335
12336        if (!atBegining)
12337            sb.appendChild(st);
12338        else {
12339            var refs = sb.getElementsByTagName("SPAN");
12340            var ref = refs.length > 0 ? refs[0] : null;
12341
12342            if (ref != null)
12343                sb.insertBefore(st, ref);
12344            else
12345                sb.appendChild(st);
12346        }
12347        if (sb.childNodes.length == 1) {
12348            StatusIdWithTopPriority = st.id;
12349            StatusColorWithTopPriority = 1;
12350        }
12351        sb.style.display = "block";
12352        return st.id;
12353    }
12354    return null;
12355}
12356function addHybridTooltipDiv(strTitle, strHtml, strColor, isVanilla, bIsDismissible, dismissAltText) {
12357    var hybridTooltipDiv = document.createElement("div");
12358
12359    if (Boolean(hybridTooltipDiv)) {
12360        hybridTooltipDiv.id = "hybridTooltipStatusBar";
12361        hybridTooltipDiv.setAttribute("aria-live", "polite");
12362        hybridTooltipDiv.setAttribute("aria-relevant", "all");
12363        hybridTooltipDiv.style.display = "block";
12364        if (typeof strColor == 'string' && strColor in ColorMap) {
12365            hybridTooltipDiv.className = StatusBarClassNames[ColorMap[strColor]];
12366        }
12367        var deltaPageStatusBar = document.getElementById("DeltaPageStatusBar");
12368
12369        deltaPageStatusBar.appendChild(hybridTooltipDiv);
12370        var st = _createStatusMarkup(strTitle, strHtml, true, isVanilla, bIsDismissible, dismissAltText);
12371
12372        hybridTooltipDiv.appendChild(st);
12373    }
12374    return hybridTooltipDiv;
12375}
12376function addScsEndOfSupportNotificationDiv(strTitle, strHtml, strColor, isVanilla, bIsDismissible, dismissAltText) {
12377    var scsEndOfSupportNotificationDiv = document.createElement("div");
12378
12379    if (Boolean(scsEndOfSupportNotificationDiv)) {
12380        scsEndOfSupportNotificationDiv.id = "scsEndOfSupportNotificationBar";
12381        scsEndOfSupportNotificationDiv.setAttribute("aria-live", "polite");
12382        scsEndOfSupportNotificationDiv.setAttribute("aria-relevant", "all");
12383        scsEndOfSupportNotificationDiv.style.display = "block";
12384        if (typeof strColor == 'string' && strColor in ColorMap) {
12385            scsEndOfSupportNotificationDiv.className = StatusBarClassNames[ColorMap[strColor]];
12386        }
12387        var deltaPageStatusBar = document.getElementById("DeltaPageStatusBar");
12388
12389        deltaPageStatusBar.appendChild(scsEndOfSupportNotificationDiv);
12390        var st = _createStatusMarkup(strTitle, strHtml, true, isVanilla, bIsDismissible, dismissAltText);
12391
12392        scsEndOfSupportNotificationDiv.appendChild(st);
12393    }
12394    return scsEndOfSupportNotificationDiv;
12395}
12396function addEndOfSupportNotificationDiv(strTitle, strHtml, strColor, isVanilla, bIsDismissible, dismissAltText) {
12397    var endOfSupportNotificationDiv = document.createElement("div");
12398
12399    if (Boolean(endOfSupportNotificationDiv)) {
12400        endOfSupportNotificationDiv.id = "endOfSupportNotificationStatusBar";
12401        endOfSupportNotificationDiv.setAttribute("aria-live", "polite");
12402        endOfSupportNotificationDiv.setAttribute("aria-relevant", "all");
12403        endOfSupportNotificationDiv.style.display = "block";
12404        if (typeof strColor == 'string' && strColor in ColorMap) {
12405            endOfSupportNotificationDiv.className = StatusBarClassNames[ColorMap[strColor]];
12406        }
12407        var deltaPageStatusBar = document.getElementById("DeltaPageStatusBar");
12408
12409        deltaPageStatusBar.appendChild(endOfSupportNotificationDiv);
12410        var st = _createStatusMarkup(strTitle, strHtml, true, isVanilla, bIsDismissible, dismissAltText);
12411
12412        endOfSupportNotificationDiv.appendChild(st);
12413    }
12414    return endOfSupportNotificationDiv;
12415}
12416function appendStatus(sid, strTitle, strHtml) {
12417    var sb = document.getElementById("pageStatusBar");
12418    var stRef = document.getElementById(sid);
12419
12420    if (sb != null && stRef != null) {
12421        var st = null;
12422
12423        if (Boolean(stRef.lastChild) && stRef.lastChild.tagName == "BR") {
12424            stRef.removeChild(stRef.lastChild);
12425            st = _createStatusMarkup(strTitle, strHtml, true);
12426        }
12427        else {
12428            st = _createStatusMarkup(strTitle, strHtml, false);
12429        }
12430        if (stRef.nextSibling != null)
12431            sb.insertBefore(st, stRef.nextSibling);
12432        else
12433            sb.appendChild(st);
12434        return st.id;
12435    }
12436    return null;
12437}
12438function _createStatusMarkup(strTitle, strHtml, bWithBR, bIsVanilla, bIsDismissible, dismissAltText) {
12439    var st = document.createElement("SPAN");
12440
12441    st.id = "status_" + String(getUniqueIndex());
12442    st.className = "ms-status-status";
12443    var rg = [];
12444
12445    rg.push("<span id='");
12446    rg.push(st.id);
12447    rg.push("_hiddenPriMsg' class='ms-accessible'>");
12448    rg.push(getStatusTitle(1) + Strings.STS.L_Status_Text);
12449    rg.push("</span>");
12450    if (!bIsVanilla) {
12451        rg.push("<span class=\"ms-status-iconSpan\"><img class=\"ms-status-iconImg\" src=\"/_layouts/15/images/spcommon.png\" /></span>");
12452    }
12453    if (strTitle.length != 0) {
12454        rg.push("<span class=\"ms-bold ms-status-title\">");
12455        rg.push(strTitle);
12456        rg.push("</span>");
12457    }
12458    rg.push("<span class=\"ms-status-body\" id='");
12459    rg.push(st.id);
12460    rg.push("_body");
12461    rg.push("'>");
12462    rg.push(strHtml);
12463    rg.push("</span>");
12464    if (bIsDismissible) {
12465        rg.push("<a href=\"#\" class=\"ms-status-iconSpan\"><img class=\"ms-status-dismissIconImg\" alt=\"");
12466        rg.push(dismissAltText);
12467        rg.push("\" src=\"/_layouts/15/images/spcommon.png\" onclick=\"javascript:removeStatus('");
12468        rg.push(st.id);
12469        if (((String(strHtml)).toLowerCase()).indexOf("configssc.aspx") != -1) {
12470            rg.push("');__doPostBack('DismissSiteCreationOnlineNotification');\"/></a>");
12471        }
12472    }
12473    if (bWithBR && !bIsVanilla)
12474        rg.push("<br/>");
12475    st.innerHTML = rg.join("");
12476    st.setAttribute("role", "alert");
12477    st.priorityColor = 1;
12478    st.tabIndex = 0;
12479    return st;
12480}
12481function removeAllStatus(hide) {
12482    var sb = document.getElementById("pageStatusBar");
12483
12484    if (sb != null) {
12485        sb.innerHTML = "";
12486        sb.className = StatusBarClassNames[1];
12487        StatusColorWithTopPriority = null;
12488        StatusIdWithTopPriority = null;
12489        if (hide)
12490            sb.style.display = "none";
12491    }
12492}
12493function setStatusPriColor(sid, strColor) {
12494    var st = document.getElementById(sid);
12495
12496    if (st != null && typeof strColor == 'string') {
12497        if (strColor in StatusPriority) {
12498            st.priorityColor = StatusPriority[strColor];
12499        }
12500        else {
12501            st.priorityColor = 1;
12502        }
12503        var hiddenSpan = st.firstChild;
12504
12505        if (hiddenSpan != null && hiddenSpan.id == sid + "_hiddenPriMsg") {
12506            hiddenSpan.innerHTML = getStatusTitle(st.priorityColor) + Strings.STS.L_Status_Text;
12507        }
12508        if (sid == StatusIdWithTopPriority) {
12509            if (st.priorityColor >= StatusColorWithTopPriority)
12510                StatusColorWithTopPriority = st.priorityColor;
12511            else
12512                _selectStatusWithTopPriority();
12513        }
12514        else {
12515            if (st.priorityColor > StatusColorWithTopPriority) {
12516                StatusIdWithTopPriority = sid;
12517                StatusColorWithTopPriority = st.priorityColor;
12518            }
12519        }
12520        var sb = document.getElementById("pageStatusBar");
12521
12522        if (Boolean(sb))
12523            sb.className = StatusBarClassNames[StatusColorWithTopPriority];
12524    }
12525}
12526function _selectStatusWithTopPriority() {
12527    var sb = document.getElementById("pageStatusBar");
12528
12529    if (sb != null) {
12530        var statusId = null;
12531        var statusColor = 1;
12532        var statuses = sb.childNodes;
12533        var statusesLen = statuses.length;
12534        var stat = null;
12535
12536        for (var i = 0; i < statusesLen; i++) {
12537            stat = statuses[i];
12538            if (typeof stat.priorityColor != 'undefined' && stat.priorityColor > statusColor) {
12539                statusColor = stat.priorityColor;
12540                statusId = stat.id;
12541            }
12542        }
12543        StatusIdWithTopPriority = statusId;
12544        StatusColorWithTopPriority = statusColor;
12545    }
12546}
12547function updateStatus(sid, strHtml) {
12548    var bid = sid + "_body";
12549    var b = document.getElementById(bid);
12550
12551    if (Boolean(b))
12552        b.innerHTML = strHtml;
12553}
12554function removeStatus(sid) {
12555    var st = document.getElementById(sid);
12556
12557    if (st != null) {
12558        if (Boolean(st.lastChild) && st.lastChild.tagName == "BR") {
12559            var prevSt = st.previousSibling;
12560
12561            if (Boolean(prevSt) && Boolean(prevSt.lastChild) && prevSt.lastChild.tagName != "BR") {
12562                var br = document.createElement("BR");
12563
12564                prevSt.appendChild(br);
12565            }
12566        }
12567        st.parentNode.removeChild(st);
12568        var sb = document.getElementById("pageStatusBar");
12569
12570        if (Boolean(sb)) {
12571            if ((sb.getElementsByTagName("SPAN")).length == 0) {
12572                sb.className = StatusBarClassNames[1];
12573                StatusColorWithTopPriority = null;
12574                StatusIdWithTopPriority = null;
12575                sb.style.display = "none";
12576            }
12577            else {
12578                if (sid == StatusIdWithTopPriority) {
12579                    _selectStatusWithTopPriority();
12580                    sb.className = StatusBarClassNames[StatusColorWithTopPriority];
12581                }
12582            }
12583        }
12584    }
12585}
12586var g_dlgWndTop;
12587var g_spDlgLauncher;
12588var g_ModalDialogCount;
12589var g_overlayPopup;
12590var g_childDialog;
12591
12592function _dlgWndTop() {
12593    if (Boolean(g_dlgWndTop)) {
12594        return g_dlgWndTop;
12595    }
12596    try {
12597        var wnd = window;
12598
12599        while (wnd != null && wnd != wnd.parent) {
12600            wnd = wnd.parent;
12601            if (wnd != null && wnd.g_spDlgLauncher) {
12602                g_dlgWndTop = wnd;
12603            }
12604        }
12605    }
12606    catch (e) { }
12607    finally {
12608        if (!Boolean(g_dlgWndTop)) {
12609            g_dlgWndTop = window;
12610        }
12611    }
12612    return g_dlgWndTop;
12613}
12614function commonShowModalDialog(url, features, callback, args) {
12615    function assocArray() {
12616        return [];
12617    }
12618    function assocArray_add(array, key, value) {
12619        array.push(key);
12620        array[key] = value;
12621    }
12622    function assocArray_keys(array) {
12623        var k = [];
12624
12625        for (var j = 0; j < array.length; j++)
12626            k.push(array[j]);
12627        return k;
12628    }
12629    if (document.getElementById("__spPickerHasReturnValue") != null)
12630        (document.getElementById("__spPickerHasReturnValue")).value = "";
12631    if (document.getElementById("__spPickerReturnValueHolder") != null)
12632        (document.getElementById("__spPickerReturnValueHolder")).value = "";
12633    commonModalDialogReturnValue.clear();
12634    var rv;
12635
12636    if (Boolean(window.showModalDialog)) {
12637        rv = window.showModalDialog(url, args, features);
12638        if (Boolean(callback)) {
12639            invokeModalDialogCallback(callback, rv);
12640        }
12641    }
12642    else {
12643        var defaultWidth = 500, defaultHeight = 550, defaultScrollbars = "yes";
12644
12645        if (!Boolean(features))
12646            features = "width=" + String(defaultWidth) + ",height=" + String(defaultHeight);
12647        else {
12648            var feats = assocArray(), fre, split;
12649
12650            if (features.search(/^(\s*\w+\s*:\s*.+?\s*)(;\s*\s*\w+\s*:\s*.+?\s*)*(;\s*)?$/) != -1) {
12651                fre = /^\s*(\w+)\s*:\s*(.+?)\s*$/;
12652                split = features.split(/\s*;\s*/);
12653            }
12654            else {
12655                fre = /^\s*(\w+)\s*=\s*(.+?)\s*$/;
12656                split = features.split(/\s*,\s*/);
12657            }
12658            for (var feat in split) {
12659                var kv = fre.exec(split[feat]);
12660
12661                if (Boolean(kv) && kv.length == 3)
12662                    assocArray_add(feats, kv[1].toLowerCase(), kv[2]);
12663            }
12664            if (!Boolean(feats["width"]))
12665                assocArray_add(feats, "width", feats["dialogwidth"] || Boolean(defaultWidth));
12666            if (!Boolean(feats["height"]))
12667                assocArray_add(feats, "height", feats["dialogheight"] || Boolean(defaultHeight));
12668            if (!Boolean(feats["scrollbars"]))
12669                assocArray_add(feats, "scrollbars", feats["scroll"] || Boolean(defaultScrollbars));
12670            features = '';
12671            var keys = assocArray_keys(feats);
12672
12673            for (var i in keys) {
12674                if (Boolean(features))
12675                    features += ",";
12676                features += keys[i] + "=" + feats[keys[i]];
12677            }
12678        }
12679        var modalDialog = window.open(url, '_blank', features + ',modal=yes,dialog=yes');
12680
12681        modalDialog.dialogArguments = args;
12682        window.onfocus = function() {
12683            var bHasReturnValue = document.getElementById("__spPickerHasReturnValue") != null && (document.getElementById("__spPickerHasReturnValue")).value == "1" || commonModalDialogReturnValue.isSet();
12684
12685            if (Boolean(modalDialog) && !modalDialog.closed && !bHasReturnValue) {
12686                modalDialog.focus();
12687            }
12688            else {
12689                window.onfocus = null;
12690                if (Boolean(callback)) {
12691                    invokeModalDialogCallback(callback, rv);
12692                }
12693            }
12694        };
12695        if (!browseris.ie) {
12696            if (window.frameElement != null) {
12697                window.fndlgClose = callback;
12698            }
12699        }
12700    }
12701    return rv;
12702}
12703function invokeModalDialogCallback(callback, rv) {
12704    if (typeof rv != "undefined" && rv != null) {
12705        callback(rv);
12706    }
12707    else if (commonModalDialogReturnValue.isSet()) {
12708        rv = commonModalDialogReturnValue.get();
12709        callback(rv);
12710        commonModalDialogReturnValue.clear();
12711    }
12712    else if (document.getElementById("__spPickerHasReturnValue") != null && (document.getElementById("__spPickerHasReturnValue")).value == "1" && document.getElementById("__spPickerReturnValueHolder") != null) {
12713        rv = (document.getElementById("__spPickerReturnValueHolder")).value;
12714        callback(rv);
12715    }
12716    return rv;
12717}
12718function setModalDialogReturnValue(wnd, returnValue) {
12719    if (wnd.opener != null && typeof returnValue == 'string' && wnd.opener.document.getElementById('__spPickerHasReturnValue') != null && wnd.opener.document.getElementById('__spPickerReturnValueHolder') != null) {
12720        (wnd.opener.document.getElementById('__spPickerHasReturnValue')).value = '1';
12721        (wnd.opener.document.getElementById('__spPickerReturnValueHolder')).value = returnValue;
12722    }
12723    else {
12724        setModalDialogObjectReturnValue(wnd, returnValue);
12725    }
12726    if (browseris.safari125up || browseris.msEdge) {
12727        if (wnd.opener != null && wnd.opener.fndlgClose != null)
12728            wnd.opener.fndlgClose(returnValue);
12729    }
12730}
12731function setModalDialogObjectReturnValue(wnd, returnValue) {
12732    if (Boolean(wnd.showModalDialog)) {
12733        wnd.returnValue = returnValue;
12734    }
12735    if (wnd.opener != null) {
12736        if (typeof wnd.opener.commonModalDialogReturnValue != 'undefined') {
12737            var retVal = wnd.opener.commonModalDialogReturnValue;
12738
12739            retVal.set(returnValue);
12740        }
12741    }
12742}
12743function CommonGlobalDialogReturnValue_InitializePrototype() {
12744    CommonGlobalDialogReturnValue.prototype.hasRetVal = undefined;
12745    CommonGlobalDialogReturnValue.prototype.retVal = undefined;
12746    CommonGlobalDialogReturnValue.prototype.set = function(obj) {
12747        if (typeof obj != "undefined") {
12748            this.retVal = obj;
12749            this.hasRetval = true;
12750        }
12751    };
12752    CommonGlobalDialogReturnValue.prototype.isSet = function() {
12753        return this.hasRetval;
12754    };
12755    CommonGlobalDialogReturnValue.prototype.get = function() {
12756        if (this.hasRetval)
12757            return this.retVal;
12758        else
12759            return undefined;
12760    };
12761    CommonGlobalDialogReturnValue.prototype.clear = function() {
12762        this.hasRetval = false;
12763        this.retVal = null;
12764    };
12765}
12766function CommonGlobalDialogReturnValue() {
12767}
12768var commonModalDialogReturnValue;
12769
12770function commonModalDialogOpen(url, options, callback, args) {
12771    options.url = url;
12772    options.dialogReturnValueCallback = callback;
12773    options.args = args;
12774    EnsureScriptParams("SP.UI.Dialog.js", "SP.UI.ModalDialog.showModalDialog", options);
12775}
12776function commonModalDialogClose(dialogResult, returnValue) {
12777    var dlg = null;
12778    var wndTop = _dlgWndTop();
12779
12780    if (typeof wndTop.g_childDialog != 'undefined')
12781        dlg = wndTop.g_childDialog;
12782    if (Boolean(dlg)) {
12783        dlg.set_returnValue(returnValue);
12784        dlg.close(dialogResult);
12785    }
12786}
12787function commonModalDialogHide() {
12788    var dlg;
12789    var wndTop = _dlgWndTop();
12790
12791    if (typeof wndTop.g_childDialog != 'undefined')
12792        dlg = wndTop.g_childDialog;
12793    if (Boolean(dlg)) {
12794        dlg.hide();
12795    }
12796}
12797function commonModalDialogGetArguments() {
12798    var dlg;
12799    var wndTop = _dlgWndTop();
12800
12801    if (typeof wndTop.g_childDialog != 'undefined')
12802        dlg = wndTop.g_childDialog;
12803    if (Boolean(dlg) && typeof dlg.get_args != "undefined")
12804        return dlg.get_args();
12805    return null;
12806}
12807function ShowPopupDialog(dlgUrl) {
12808    ShowPopupDialogWithCallback(dlgUrl, PopupDialogCallback);
12809}
12810function ShowPopupDialogWithCallback(dlgUrl, dialogCallback) {
12811    if (FV4UI()) {
12812        var dlgOptions = {
12813            url: dlgUrl,
12814            dialogReturnValueCallback: dialogCallback
12815        };
12816
12817        EnsureScriptParams("SP.UI.Dialog.js", "SP.UI.ModalDialog.showModalDialog", dlgOptions);
12818    }
12819    else
12820        Nav.navigate(dlgUrl);
12821}
12822function PopupDialogCallback(dialogResult, returnValue) {
12823    if (dialogResult == 1) {
12824        Nav.navigate((_dlgWndTop()).location.href);
12825    }
12826}
12827function SelectField(view, selectID) {
12828    CoreInvoke('_SelectField', view, selectID);
12829}
12830function FilterField(view, fieldName, fieldValue, selOption) {
12831    CoreInvoke('_FilterField', view, fieldName, fieldValue, selOption);
12832}
12833function SetControlValue(controlId, value) {
12834    CoreInvoke('_SetControlValue', controlId, value);
12835}
12836function SubmitFormPost(url, bForceSubmit, bDemoteIntoFormBody) {
12837    CoreInvoke('_SubmitFormPost', url, bForceSubmit, bDemoteIntoFormBody);
12838}
12839function SuiteOnClick(clickHandler) {
12840    CoreInvoke('_SuiteOnClick', clickHandler);
12841}
12842function GoToPageRelative(url) {
12843    CoreInvoke('_GoToPageRelative', url);
12844}
12845function EnterFolder(url) {
12846    CoreInvoke('_EnterFolder', url);
12847}
12848function HandleFolder(ele, objEvent, url, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect, strCheckoutUser, strCurrentUser, strRequireCheckout, strCheckedoutTolocal, strPermmask) {
12849    PreventDefaultNavigation();
12850    CoreInvoke('_HandleFolder', ele, objEvent, url, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect, strCheckoutUser, strCurrentUser, strRequireCheckout, strCheckedoutTolocal, strPermmask);
12851}
12852function VerifyFolderHref(ele, objEvent, url, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect) {
12853    CoreInvoke('_VerifyFolderHref', ele, objEvent, url, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect);
12854}
12855function VerifyHref(ele, objEvent, iDefaultItemOpen, strProgId, strServerFileRedirect) {
12856    CoreInvoke('_VerifyHref', ele, objEvent, iDefaultItemOpen, strProgId, strServerFileRedirect);
12857}
12858function DispEx(ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect, strCheckoutUser, strCurrentUser, strRequireCheckout, strCheckedoutTolocal, strPermmask) {
12859    g_MDNav = (function(u) {
12860        return u;
12861    })();
12862    CoreInvoke('_DispEx', ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strHtmlTrProgId, iDefaultItemOpen, strProgId, strHtmlType, strServerFileRedirect, strCheckoutUser, strCurrentUser, strRequireCheckout, strCheckedoutTolocal, strPermmask);
12863    return g_MDNav;
12864}
12865function EditItemWithCheckoutAlert(evt, Url, bCheckout, bIsCheckedOutToLocal, strDocument, strhttpRoot, strCurrentUser, strCheckoutUser) {
12866    CoreInvoke('_EditItemWithCheckoutAlert', evt, Url, bCheckout, bIsCheckedOutToLocal, strDocument, strhttpRoot, strCurrentUser, strCheckoutUser);
12867}
12868function STSNavigateWithCheckoutAlert(Url, bCheckout, bIsCheckedOutToLocal, strDocument, strhttpRoot, strCurrentUser, strCheckoutUser) {
12869    CoreInvoke('_STSNavigateWithCheckoutAlert', Url, bCheckout, bIsCheckedOutToLocal, strDocument, strhttpRoot, strCurrentUser, strCheckoutUser);
12870}
12871function NewItem2(evt, url) {
12872    CoreInvoke('_NewItem2', evt, url);
12873}
12874function NewItem(url) {
12875    CoreInvoke('_NewItem', url);
12876}
12877function EditItem2(evt, url) {
12878    CoreInvoke('_EditItem2', evt, url);
12879}
12880function EditItem(url) {
12881    CoreInvoke('_EditItem', url);
12882}
12883function RefreshPageTo(evt, url, bForceSubmit) {
12884    CoreInvoke('_RefreshPageTo', evt, url, bForceSubmit);
12885}
12886function AddGroupToCookie(groupName) {
12887    CoreInvoke('_AddGroupToCookie', groupName);
12888}
12889function RemoveGroupFromCookie(groupName) {
12890    CoreInvoke('_RemoveGroupFromCookie', groupName);
12891}
12892function ExpGroupBy(formObj) {
12893    CoreInvoke('_ExpGroupBy', formObj);
12894}
12895function DispDocItem(ele, strProgId) {
12896    CoreInvoke('_DispDocItem', ele, strProgId);
12897}
12898function DispDocItemExWithServerRedirect(ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId, iDefaultItemOpen, strServerFileRedirect) {
12899    CoreInvoke('_DispDocItemExWithServerRedirect', ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId, iDefaultItemOpen, strServerFileRedirect);
12900}
12901function DispDocItemExWithServerRedirectOrNavigate(ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId, iDefaultItemOpen, strServerFileRedirect) {
12902    if (IsSupportedMacBrowser() && !(window["OffSwitch"] == null || OffSwitch.IsActive("BDD1B8EC-6631-4FD1-B8DE-BB70531B030E"))) {
12903        NavigateElementHref(ele);
12904    }
12905    else {
12906        DispDocItemExWithServerRedirect(ele, objEvent, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId, iDefaultItemOpen, strServerFileRedirect);
12907    }
12908}
12909function DispDocItemEx(ele, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId) {
12910    CoreInvoke('_DispDocItemEx', ele, fTransformServiceOn, fShouldTransformExtension, fTransformHandleUrl, strProgId);
12911}
12912function PortalPinToMyPage(eForm, portalUrl, instanceId, listTitle, listDescription, listViewUrl, baseType, serverTemplate) {
12913    CoreInvoke('_PortalPinToMyPage', eForm, portalUrl, instanceId, listTitle, listDescription, listViewUrl, baseType, serverTemplate);
12914}
12915function MoveToViewDate(strdate, view_type, ctxid) {
12916    CoreInvoke('_MoveToViewDate', strdate, view_type, ctxid);
12917}
12918function MoveToDate(strdate, ctxid) {
12919    CoreInvoke('_MoveToDate', strdate, ctxid);
12920}
12921function ClickDay(date) {
12922    CoreInvoke('_ClickDay', date);
12923}
12924function GetMonthView(str) {
12925    CoreInvoke('_GetMonthView', str);
12926}
12927function OptLoseFocus(opt) {
12928    CoreInvoke('_OptLoseFocus', opt);
12929}
12930function SetCtrlFromOpt(ctrl, opt) {
12931    CoreInvoke('_SetCtrlFromOpt', ctrl, opt);
12932}
12933function ChangeLayoutMode(p1, p2) {
12934    CoreInvoke('_ChangeLayoutMode', p1, p2);
12935}
12936function MSOLayout_ChangeLayoutMode(p1, p2) {
12937    ChangeLayoutMode(p1, p2);
12938}
12939function WebPartMenuKeyboardClick(elem, expectedKeyCode1, expectedKeyCode2, evt) {
12940    CoreInvoke('_WebPartMenuKeyboardClick', elem, expectedKeyCode1, expectedKeyCode2, evt);
12941}
12942function ShowToolPane2Wrapper(p1, p2, p3) {
12943    CoreInvoke('_ShowToolPane2Wrapper', p1, p2, p3);
12944}
12945function EditInSPD(strDocument, bRefresh) {
12946    CoreInvoke('_EditInSPD', strDocument, bRefresh);
12947}
12948function SetupFixedWidthWebParts() {
12949    CoreInvoke('_SetupFixedWidthWebParts');
12950}
12951function ToggleAllItems(evt, cbx, ctxNum) {
12952    CoreInvoke('_ToggleAllItems', evt, cbx, ctxNum);
12953}
12954function CommandUIExecuteCommand(commandId) {
12955    CoreInvoke('_CommandUIExecuteCommand', commandId);
12956}
12957function PopMenuFromChevron(e) {
12958    CoreInvoke('_PopMenuFromChevron', e);
12959}
12960function ListHeaderMenu_OnMouseDown(e) {
12961    CoreInvoke('_ListHeaderMenu_OnMouseDown', e);
12962}
12963function NavigateToSubNewAspx(strHttpRoot, strArgs) {
12964    CoreInvoke('_NavigateToSubNewAspx', strHttpRoot, strArgs);
12965}
12966function NavigateToManagePermsPage(strHttpRoot, strListId, strFileRef) {
12967    CoreInvoke('_NavigateToManagePermsPage', strHttpRoot, strListId, strFileRef);
12968}
12969function DoNavigateToTemplateGallery(strSaveLocUrl, strTGUrl) {
12970    CoreInvoke('_DoNavigateToTemplateGallery', strSaveLocUrl, strTGUrl);
12971}
12972function RefreshPage(dialogResult) {
12973    CoreInvoke('_RefreshPage', dialogResult);
12974}
12975function OpenPopUpPage(url, callback, width, height) {
12976    CoreInvoke('_OpenPopUpPage', url, callback, width, height);
12977}
12978function GoToCreateNewPage() {
12979    CoreInvoke('_GoToCreateNewPage');
12980}
12981function OpenCreateWebPageDialog(url) {
12982    CoreInvoke('_OpenCreateWebPageDialog', url);
12983}
12984function EditLink2(elm, ctxNum) {
12985    CoreInvoke('_EditLink2', elm, ctxNum);
12986}
12987function GoBack(defViewUrl) {
12988    CoreInvoke('_GoBack', defViewUrl);
12989}
12990function ReplyItem(url, threading, guid, subject) {
12991    CoreInvoke('_ReplyItem', url, threading, guid, subject);
12992}
12993function ExportToDatabase(strSiteUrl, strListID, strViewID, fUseExistingDB) {
12994    CoreInvoke('_ExportToDatabase', strSiteUrl, strListID, strViewID, fUseExistingDB);
12995}
12996function ExportList(using) {
12997    CoreInvoke('_ExportList', using);
12998}
12999function ClearSearchTerm(guidView) {
13000    CoreInvoke('_ClearSearchTerm', guidView);
13001}
13002function SubmitSearchForView(ViewGuid) {
13003    CoreInvoke('_SubmitSearchForView', ViewGuid);
13004}
13005function SubmitSearchRedirect(strUrl) {
13006    CoreInvoke('_SubmitSearchRedirect', strUrl);
13007}
13008function AlertAndSetFocus(msg, fieldName) {
13009    CoreInvoke('_AlertAndSetFocus', msg, fieldName);
13010}
13011function AlertAndSetFocusForDropdown(msg, fieldName) {
13012    CoreInvoke('_AlertAndSetFocusForDropdown', msg, fieldName);
13013}
13014function AddSilverlightWebPart(item, zoneNum, zoneIndex) {
13015    CoreInvoke('_AddSilverlightWebPart', item, zoneNum, zoneIndex);
13016}
13017function UserSelectionOnClick(chk, viewCounter) {
13018    CoreInvoke('_UserSelectionOnClick', chk, viewCounter);
13019}
13020function OnIframeLoad() {
13021    CoreInvoke('_OnIframeLoad');
13022}
13023function OnFocusFilter(elm) {
13024    CoreInvoke('_OnFocusFilter', elm);
13025}
13026function TopHelpButtonClick(strParam, evt) {
13027    cancelDefault(evt);
13028    CoreInvoke('_TopHelpButtonClick', strParam);
13029}
13030function HelpWindowKey(strKey) {
13031    CoreInvoke('_HelpWindowKey', strKey);
13032}
13033function HelpWindowUrl(strUrl) {
13034    CoreInvoke('_HelpWindowUrl', strUrl);
13035}
13036function HelpWindow() {
13037    CoreInvoke('_HelpWindow');
13038}
13039function ToggleFullScreenMode() {
13040    CoreInvoke('_ToggleFullScreenMode');
13041}
13042function OnClickFilter(obj, e) {
13043    return CoreInvoke('_OnClickFilter', obj, e);
13044}
13045function GCActivateAndFocus(GCObject) {
13046    CoreInvoke('_GCActivateAndFocus', GCObject);
13047}
13048function GCNavigateToNonGridPage() {
13049    CoreInvoke('_GCNavigateToNonGridPage');
13050}
13051function _spBodyOnHashChange() {
13052    ajaxNavigate._raiseNavigate(ajaxNavigate);
13053}
13054function setInnerText(elem, text) {
13055    var doc = elem.ownerDocument;
13056
13057    if (Boolean(doc.createTextNode)) {
13058        var textNode = doc.createTextNode(text);
13059
13060        elem.innerHTML = '';
13061        elem.appendChild(textNode);
13062    }
13063    else {
13064        elem.innerText = text;
13065    }
13066}
13067var SPListView;
13068var getSharingHintHtml;
13069var onSharingHintClicked;
13070
13071function RegisterSharedWithFieldRenderer() {
13072    if (typeof ComputedFieldWorker !== 'undefined' && ComputedFieldWorker !== null) {
13073        ComputedFieldWorker['SharedWith'] = RenderSharedWithField;
13074    }
13075    function RenderSharedWithField(renderCtx, field, listSchema) {
13076        if (renderCtx.CurrentItem.PrincipalCount == null) {
13077            return '';
13078        }
13079        var strHTML = [];
13080
13081        strHTML.push('<span class="js-sharingHint-listViewWrapper" data-updatestatus="done">');
13082        strHTML.push(getSharingHintHtml(renderCtx.CurrentItem, null));
13083        strHTML.push("</span>");
13084        return strHTML.join("");
13085    }
13086    getSharingHintHtml = function(ctxListItem, csomSharedWithUsers) {
13087        var tooltip = ctxListItem.PrincipalCount < 1 ? Strings.STS.L_SharedWithNone : Strings.STS.L_SharingHintShared;
13088        var strHTML = [];
13089
13090        strHTML.push('<a class="ms-subtleLink" href="#" onclick="onSharingHintClicked(this); return false;" aria-label=' + StAttrQuote(tooltip) + '>');
13091        strHTML.push(getSharingHintIconHtml(ctxListItem));
13092        if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(144) && _spPageContextInfo.webUIVersion >= 15)
13093            strHTML.push(getSharingHintString(ctxListItem, csomSharedWithUsers));
13094        strHTML.push('</a>');
13095        return strHTML.join("");
13096    };
13097    var getSharingHintString = function(ctxListItem, csomSharedWithUsers) {
13098        var sharingStr = Strings.STS.L_SharedWithNone_Short;
13099        var principalCount = Number(ctxListItem.PrincipalCount);
13100        var sharedUsers = Boolean(csomSharedWithUsers) ? csomSharedWithUsers : ctxListItem.SharedWithUsers;
13101
13102        if (principalCount > 0) {
13103            sharingStr = Strings.STS.L_SharingHintShared_Short;
13104        }
13105        var sharingHintHtml = "<span class='js-sharingHintString ms-noWrap ms-imnSpan ms-displayInlineBlock' >" + Encoding.HtmlEncode(sharingStr) + "</span>";
13106
13107        return sharingHintHtml;
13108    };
13109    var getSharingHintIconHtml = function(ctxListItem) {
13110        var tooltip = '';
13111        var imageClass = '';
13112        var principalCount = Number(ctxListItem.PrincipalCount);
13113
13114        if (principalCount < 1) {
13115            tooltip = Strings.STS.L_SharedWithNone;
13116            imageClass = 'js-sharingHint-unshared';
13117        }
13118        else {
13119            imageClass = 'js-sharingHint-sharedDefault';
13120            tooltip = Strings.STS.L_SharingHintShared;
13121        }
13122        var iconHtml = '<span class="js-sharingHint-iconContainer ms-imnImg">' + '<img class=' + StAttrQuote(imageClass) + ' title=' + StAttrQuote(tooltip) + ' alt=' + StAttrQuote(tooltip) + ' src=' + StAttrQuote(GetThemedImageUrl("spcommon.png")) + '></img></span>';
13123
13124        return iconHtml;
13125    };
13126
13127    onSharingHintClicked = function(elt) {
13128        var iid = findIIDInAncestorNode(elt);
13129        var ctxListItem = GetListItemByIID(iid);
13130        var ctxRgiid = GetCtxRgiidFromIid(iid);
13131        var viewCtx = ctxRgiid.ctx;
13132
13133        _WriteDocEngagement("Documents_SharingIconClick", "OneDrive_SharingIconClick");
13134        SP.SOD.executeFunc("sharing.js", "DisplaySharedWithDialog", function() {
13135            var forceReadOnly = !permMaskContains(ctxListItem.PermMask, 0x0, 0x2000000);
13136
13137            DisplaySharedWithDialogCore(viewCtx.HttpRoot, viewCtx.listName, ctxListItem.ID, forceReadOnly, null, ctxListItem["FSObjType"], ctxListItem["HTML_x0020_File_x0020_Type"], false, viewCtx.RealHttpRoot);
13138        });
13139    };
13140}
13141function CalloutRenderViewTemplate(renderCtx) {
13142    var iStr = '';
13143
13144    iStr += renderCtx.RenderHeader(renderCtx);
13145    iStr += renderCtx.RenderBody(renderCtx);
13146    iStr += renderCtx.RenderFooter(renderCtx);
13147    return iStr;
13148}
13149function CalloutRenderHeaderTemplate(renderCtx) {
13150    var calloutID = GetCalloutElementIDFromRenderCtx(renderCtx);
13151    var title = '';
13152
13153    if (renderCtx.ListSchema.IsDocLib == '1') {
13154        title = renderCtx.CurrentItem.FileLeafRef;
13155    }
13156    else {
13157        title = renderCtx.CurrentItem.Title;
13158    }
13159    return Callout.GenerateDefaultHeader(calloutID, Encoding.HtmlEncode(title), null, true);
13160}
13161function CalloutRenderFooterTemplate(renderCtx, calloutActionMenuPopulator, renderECB) {
13162    if (typeof calloutActionMenuPopulator === 'undefined' || calloutActionMenuPopulator === null) {
13163        calloutActionMenuPopulator = CalloutOnPostRenderTemplate;
13164    }
13165    if (typeof renderECB === 'undefined' || renderECB === null) {
13166        renderECB = true;
13167    }
13168    var calloutID = GetCalloutElementIDFromRenderCtx(renderCtx);
13169
13170    SPClientRenderer.AddPostRenderCallback(renderCtx, function() {
13171        var calloutActionMenu = new CalloutActionMenu(calloutID + '-actions');
13172
13173        calloutActionMenuPopulator(renderCtx, calloutActionMenu);
13174        calloutActionMenu.render();
13175    });
13176    var ecbMarkup = [];
13177
13178    if (renderECB) {
13179        ecbMarkup.push('<span id=' + Encoding.AttrQuote(calloutID + '-ecbMenu') + ' class="js-callout-actions js-callout-ecbActionDownArrow">');
13180        ecbMarkup.push(RenderECBinline(renderCtx, renderCtx.CurrentItem, renderCtx.CurrentFieldSchema));
13181        ecbMarkup.push('</span>');
13182    }
13183    return Callout.GenerateDefaultFooter(calloutID, ecbMarkup.join(''));
13184}
13185function CalloutRenderBodyTemplate(renderCtx) {
13186    var itemTpls = renderCtx.Templates['Item'];
13187
13188    if (itemTpls == null || itemTpls == {})
13189        return '';
13190    var listData = renderCtx.ListData;
13191    var listSchema = renderCtx.ListSchema;
13192    var bHasHeader = renderCtx.Templates.Header != '';
13193    var groupTpls = renderCtx.Templates['Group'];
13194
13195    if (groupTpls == null || typeof RenderItemTemplateDefault != "undefined" && groupTpls == RenderItemTemplateDefault || typeof groupTpls != "function" && typeof groupTpls != "string")
13196        groupTpls = RenderGroupTemplate;
13197    else if (typeof groupTpls == "string")
13198        groupTpls = SPClientRenderer.ParseTemplateString(groupTpls, renderCtx);
13199    var ItemTpl = renderCtx.Templates['Item'];
13200
13201    if (ItemTpl == null || typeof RenderFieldTemplateDefault != "undefined" && ItemTpl == RenderFieldTemplateDefault || typeof ItemTpl != "function" && typeof ItemTpl != "string")
13202        ItemTpl = RenderItemTemplate;
13203    else if (typeof ItemTpl == "string")
13204        ItemTpl = SPClientRenderer.ParseTemplateString(ItemTpl, renderCtx);
13205    var listItem = renderCtx.CurrentItem;
13206    var itemType = listItem['ItemType'];
13207    var tpl = itemTpls[itemType];
13208
13209    if (tpl == null || tpl == '') {
13210        tpl = ItemTpl;
13211    }
13212    else if (typeof tpl == 'string') {
13213        tpl = SPClientRenderer.ParseTemplateString(tpl, renderCtx);
13214        itemTpls[itemType] = tpl;
13215    }
13216    return Callout.GenerateDefaultBody(GetCalloutElementIDFromRenderCtx(renderCtx), SPClientRenderer.CoreRender(tpl, renderCtx));
13217}
13218function CalloutRenderItemTemplate(renderCtx) {
13219    var ret = [];
13220
13221    if (renderCtx.ListSchema.IsDocLib) {
13222        ret.push(CalloutRenderFilePreview(renderCtx));
13223    }
13224    ret.push(CalloutRenderDlpNotificationPlaceholder(renderCtx));
13225    ret.push(CalloutRenderLastModifiedInfo(renderCtx));
13226    ret.push(CalloutRenderSharingStatus(renderCtx));
13227    ret.push(CalloutRenderSourceUrl(renderCtx));
13228    return ret.join('');
13229}
13230var RenderECBinline;
13231
13232function _createNewDocumentCallout(rCtx, hideUploadLink, launchPointOverride, qcbPollCallback) {
13233    function createNewDocumentCore() {
13234        var wpq = rCtx.wpq;
13235        var launchPoint = Boolean(launchPointOverride) ? launchPointOverride : document.getElementById(ListModule.Util.addWPQtoId(c_newdocWOPIID + 'Hero', wpq));
13236
13237        if (Boolean(launchPoint)) {
13238            var callout = CalloutManager.getFromLaunchPointIfExists(launchPoint);
13239
13240            if (!Boolean(callout) && Boolean(rCtx.NewWOPIDocumentUrl)) {
13241                var createDocUrl = rCtx.NewWOPIDocumentUrl + '&Source=' + Nav.getSource();
13242                var contDivHtml = RenderNewDocumentCallout(rCtx, createDocUrl);
13243
13244                callout = CalloutManager.createNewIfNecessary({
13245                    launchPoint: launchPoint,
13246                    ID: ListModule.Util.addWPQtoId(c_newdocWOPIID, wpq),
13247                    title: Strings.STS.L_NewDocumentCalloutTitle,
13248                    content: contDivHtml,
13249                    onOpeningCallback: function(cl) {
13250                        NewDocumentCallout_OnOpeningCallback(rCtx, createDocUrl, cl);
13251                    },
13252                    onOpenedCallback: function(cl) {
13253                        NewDocumentCallout_OnOpenedCallback(rCtx);
13254                    },
13255                    beakOrientation: 'leftRight',
13256                    contentWidth: c_newDocCalloutWidth,
13257                    allowScroll: true,
13258                    boundingBox: document.getElementById('s4-workspace')
13259                });
13260                if (Boolean(callout) && ListModule.Util.canUploadFile(rCtx) && !hideUploadLink) {
13261                    var uploadUrl = rCtx.HttpRoot + "/_layouts/15/Upload.aspx" + '?List=' + rCtx.listName + '&RootFolder=' + rCtx.rootFolder;
13262
13263                    callout.addAction(new CalloutAction({
13264                        text: Strings.STS.L_NewDocumentUploadFile,
13265                        onClickCallback: function(calloutActionClickEvent, calloutAction) {
13266                            CalloutManager.closeAll();
13267                            NewItem2(calloutActionClickEvent, uploadUrl);
13268                            return false;
13269                        }
13270                    }));
13271                }
13272            }
13273        }
13274        rCtx.qcbNewButtonConfigured = true;
13275        if (typeof qcbPollCallback == "function") {
13276            qcbPollCallback();
13277        }
13278    }
13279    EnsureScript('callout.js', typeof CalloutManager, function() {
13280        var eventInfo = g_ExecuteOrWaitJobs["sp.ribbon.js"];
13281
13282        if (Boolean(window["toolbarData" + rCtx.wpq]) || eventInfo === null || Boolean(_v_dictSod) && !Boolean(_v_dictSod['ribbon']))
13283            createNewDocumentCore();
13284        else
13285            ExecuteOrDelayUntilScriptLoaded(createNewDocumentCore, "sp.ribbon.js");
13286    });
13287}
13288var DisplaySharingDialogCore;
13289
13290function DisplaySharingDialogForListItem(renderCtx, listItemID, tabId) {
13291    var noItemGiven = typeof listItemID === "undefined";
13292    var tooManyItemsSelected = renderCtx.currentSelectedItems > 1;
13293    var notInsideAFolder = renderCtx.currentSelectedItems === 0 && !Boolean(renderCtx.ListData.FolderId);
13294
13295    if (noItemGiven && (tooManyItemsSelected || notInsideAFolder)) {
13296        WriteDebugLog("DocLib_DispShareDlgInvalidSelection", true, "Attempted to open sharing dialog for " + renderCtx.CurrentSelectedItems + " items. We only support sharing 1 at a time.");
13297        return;
13298    }
13299    EnsureScriptFunc("sharing.js", "DisplaySharingDialogCore", function() {
13300        var fsObjType;
13301        var fileType;
13302
13303        if (typeof listItemID === "undefined") {
13304            if (renderCtx.CurrentSelectedItems == 1) {
13305                var selectedItemIID;
13306
13307                for (selectedItemIID in renderCtx.dictSel) {
13308                    listItemID = renderCtx.dictSel[selectedItemIID].id;
13309                    break;
13310                }
13311            }
13312            else if (Boolean(renderCtx.ListData.FolderId)) {
13313                listItemID = String(renderCtx.ListData.FolderId);
13314                fsObjType = 1;
13315                fileType = "";
13316            }
13317        }
13318        if (Boolean(listItemID)) {
13319            var currentItem = null;
13320
13321            if (Boolean(renderCtx.CurrentItem)) {
13322                currentItem = renderCtx.CurrentItem;
13323            }
13324            else {
13325                for (var itemId in renderCtx.ListData.Row) {
13326                    var item = renderCtx.ListData.Row[itemId];
13327
13328                    if (Boolean(item) && item.ID == listItemID) {
13329                        currentItem = item;
13330                        break;
13331                    }
13332                }
13333            }
13334            if (Boolean(currentItem) && !Boolean(fsObjType) && !Boolean(fileType)) {
13335                fsObjType = currentItem["FSObjType"];
13336                fileType = currentItem["HTML_x0020_File_x0020_Type"];
13337            }
13338        }
13339        if (!Boolean(renderCtx.RealHttpRoot)) {
13340            DisplaySharingDialogCore(renderCtx.HttpRoot, renderCtx.listName, listItemID, !isNaN(tabId) ? tabId : 0, fsObjType, fileType, void 0, document.activeElement);
13341        }
13342        else {
13343            DisplaySharingDialogCore(renderCtx.HttpRoot, renderCtx.listName, listItemID, 0, fsObjType, fileType, false, document.activeElement, renderCtx.RealHttpRoot);
13344        }
13345    });
13346}
13347var CALLOUT_STR_ELLIPSIS;
13348var CALLOUT_ELLIPSIS_LENGTH;
13349var CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION;
13350
13351function displayTruncatedString(element, string, maxWidth) {
13352    var lastWidth = element.offsetWidth;
13353
13354    while (element.offsetWidth > maxWidth) {
13355        var newLengthToTry = element.innerHTML.length - CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION;
13356
13357        element.innerHTML = safeTruncateString(element.innerHTML, newLengthToTry) + CALLOUT_STR_ELLIPSIS;
13358        if (element.offsetWidth === lastWidth) {
13359            Sys.Debug.assert(false, "String truncation is not affecting element width. Element must not be setup correctly.");
13360            return element.innerHTML;
13361        }
13362        lastWidth = element.offsetWidth;
13363    }
13364    if (element.innerHTML.length < string.length) {
13365        element.title = string;
13366    }
13367    return element.innerHTML;
13368}
13369function displayTruncatedLocation(element, maxHeight) {
13370    var charsToTruncate = 1 + CALLOUT_ELLIPSIS_LENGTH;
13371
13372    while (element.offsetHeight > maxHeight) {
13373        var newLengthToTry = element.innerHTML.length - charsToTruncate;
13374
13375        element.innerHTML = CALLOUT_STR_ELLIPSIS + safeTruncateStringFromStart(element.innerHTML, newLengthToTry);
13376    }
13377    return element.innerHTML;
13378}
13379function displayTruncatedUrl(element, fullUrl, maxWidth, allowTruncateQuery) {
13380    var MIN_AUTHORITY_LENGTH_IN_CHARS = 4;
13381    var urlToDisplay = new URI(fullUrl.getString());
13382
13383    element.innerHTML = Encoding.HtmlEncode(urlToDisplay.getDecodedStringForDisplay());
13384    var lastWidth = element.offsetWidth;
13385
13386    while (element.offsetWidth > maxWidth) {
13387        var path = urlToDisplay.getPath();
13388        var authority = urlToDisplay.getAuthority();
13389        var query = urlToDisplay.getQuery();
13390        var indexOfNextSlash = path.indexOf('/', CALLOUT_ELLIPSIS_LENGTH + 2);
13391
13392        if (indexOfNextSlash >= 0) {
13393            path = '/' + CALLOUT_STR_ELLIPSIS + path.substr(indexOfNextSlash);
13394            urlToDisplay.setPath(path);
13395        }
13396        else if (allowTruncateQuery && query.length > CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) {
13397            query = safeTruncateString(query, query.length - CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) + CALLOUT_STR_ELLIPSIS;
13398            urlToDisplay.setQuery(query);
13399        }
13400        else if (authority.length > MIN_AUTHORITY_LENGTH_IN_CHARS + CALLOUT_ELLIPSIS_LENGTH) {
13401            authority = safeTruncateString(authority, MIN_AUTHORITY_LENGTH_IN_CHARS) + CALLOUT_STR_ELLIPSIS;
13402            urlToDisplay.setAuthority(authority);
13403        }
13404        else if (path.length > CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) {
13405            path = safeTruncateString(path, path.length - CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) + CALLOUT_STR_ELLIPSIS;
13406            urlToDisplay.setPath(path);
13407        }
13408        else if (query.length > CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) {
13409            query = safeTruncateString(query, query.length - CALLOUT_CHARS_TO_TRUNCATE_PER_ITERATION) + CALLOUT_STR_ELLIPSIS;
13410            urlToDisplay.setQuery(query);
13411        }
13412        element.innerHTML = Encoding.HtmlEncode(urlToDisplay.getDecodedStringForDisplay());
13413        if (element.offsetWidth === lastWidth) {
13414            Sys.Debug.assert(false, "Url truncation is not affecting element width. Element must not be setup correctly.");
13415            return element.innerHTML;
13416        }
13417        lastWidth = element.offsetWidth;
13418    }
13419    return element.innerHTML;
13420}
13421function GetCalloutPolicyTipNotificationElementId(renderCtx) {
13422    return GetCalloutElementIDFromRenderCtx(renderCtx) + '-dlpNotificationArea';
13423}
13424function CalloutRenderDlpNotificationPlaceholder(renderCtx) {
13425    SPClientRenderer.AddPostRenderCallback(renderCtx, CalloutPostRenderPolicyTip);
13426    return '<div id="' + GetCalloutPolicyTipNotificationElementId(renderCtx) + '"></div>';
13427}
13428function EnsureECBAdapterOnCtx(renderCtx, theCtx) {
13429    if (!Boolean(theCtx.ecbAdapter)) {
13430        if (typeof SP == "undefined" || typeof SP.Utilities == "undefined" || typeof SP.Utilities.Internal == "undefined" || typeof SP.Utilities.Internal.ECBAdapter == "undefined")
13431            return false;
13432        theCtx.ecbAdapter = new SP.Utilities.Internal.ECBAdapter(theCtx, function qcbPoll() {
13433            renderCtx.qcb.Poll();
13434        }, "qcbPoll");
13435    }
13436    return true;
13437}
13438function EnsureEcbAdapterCommandsStateInitialized(renderCtx) {
13439    IsECBCommandEnabled("ViewProperties", renderCtx);
13440}
13441function IsECBCommandEnabled(commandId, renderCtx) {
13442    if (typeof GetListContextFromContextNumber == "undefined") {
13443        return false;
13444    }
13445    var ecbCommandEnabledCurrentCtx = GetListContextFromContextNumber(renderCtx.ctxId);
13446
13447    if (!Boolean(ecbCommandEnabledCurrentCtx)) {
13448        return false;
13449    }
13450    if (!EnsureECBAdapterOnCtx(renderCtx, ecbCommandEnabledCurrentCtx)) {
13451        return false;
13452    }
13453    return ecbCommandEnabledCurrentCtx.ecbAdapter.canHandleECBCommand(commandId);
13454}
13455function ExecuteECBCommand(commandId, renderCtx) {
13456    SP.SOD.executeFunc("core.js", "GetListContextFromContextNumber", function() {
13457        var ecbCommandEnabledCurrentCtx = GetListContextFromContextNumber(renderCtx.ctxId);
13458
13459        if (!Boolean(ecbCommandEnabledCurrentCtx)) {
13460            WriteDebugLog("DocLibQCB_ExecECBCmdNoCtx", true, "Could not load a list context for the list when attempting to execute a command");
13461            return;
13462        }
13463        SP.SOD.executeFunc("sp.core.js", "SP.Utilities.Internal.ECBAdapter", function() {
13464            EnsureECBAdapterOnCtx(renderCtx, ecbCommandEnabledCurrentCtx);
13465            if (!ecbCommandEnabledCurrentCtx.ecbAdapter.executeECBCommand(commandId)) {
13466                WriteDebugLog("DocLibQCB_ExecECBCmdFailed", true, "Execution of ECB command " + commandId + " failed.");
13467                return;
13468            }
13469        });
13470    });
13471}
13472function _registerOnItemSelectionChangedHandlerForQCB(renderCtx) {
13473    ExecuteOrDelayUntilScriptLoaded(function() {
13474        var qcbCtx = GetListContextFromContextNumber(renderCtx.ctxId);
13475
13476        if (!Boolean(qcbCtx))
13477            return;
13478        RegisterOnItemSelectionChangedHandler(qcbCtx, "qcbOnRefreshCommandUI" + renderCtx.wpq, function() {
13479            renderCtx.qcb.Poll();
13480        });
13481    }, "core.js");
13482}
13483function _unregisterOnItemSelectionChangedHandlerForQCB(renderCtx) {
13484    ExecuteOrDelayUntilScriptLoaded(function() {
13485        var qcbCtx = GetListContextFromContextNumber(renderCtx.ctxId);
13486
13487        if (!Boolean(qcbCtx))
13488            return;
13489        UnregisterOnItemSelectionChangedHandler(qcbCtx, "qcbOnRefreshCommandUI" + renderCtx.wpq);
13490    }, "core.js");
13491}
13492var MountPointSiteIdFieldName;
13493var MountPointWebIdFieldName;
13494var MountPointItemUniqueIdFieldName;
13495
13496function IsMountPoint(listItem) {
13497    return Flighting.VariantConfiguration.IsExpFeatureClientEnabled(134) && (Boolean(listItem) && Boolean(listItem[MountPointSiteIdFieldName]) && Boolean(listItem[MountPointWebIdFieldName]) && Boolean(listItem[MountPointItemUniqueIdFieldName]));
13498}
13499function InMountPoint(renderCtx) {
13500    return Boolean(renderCtx.RealHttpRoot);
13501}
13502function IsCurrentItemMountPoint(renderCtx) {
13503    return Boolean(renderCtx) && Boolean(renderCtx.CurrentItem) && IsMountPoint(renderCtx.CurrentItem);
13504}
13505function IsSelectedItemMountPoint(renderCtx) {
13506    if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(134)) {
13507        var ctxT = Boolean(renderCtx) ? renderCtx : GetCurrentCtx();
13508
13509        if (ctxT == null || typeof ctxT.dictSel == "undefined" || ctxT.CurrentSelectedItems != 1)
13510            return false;
13511        for (var key in ctxT.dictSel) {
13512            var listItemId = (key.split(","))[1];
13513
13514            if (Boolean(listItemId)) {
13515                var listData = ctxT.ListData.Row;
13516
13517                if (Boolean(listData)) {
13518                    for (var i = 0; i < listData.length; i++) {
13519                        var listItem = listData[i];
13520
13521                        if (listItem["ID"] == listItemId) {
13522                            return IsMountPoint(listItem);
13523                        }
13524                    }
13525                }
13526            }
13527        }
13528    }
13529    return false;
13530}
13531var MountPointInfo;
13532
13533function RenderMountPointLink(renderCtx, ret, content, listItem, listSchema) {
13534    var mpInfo = MountPointInfo.createByListItem(listItem, renderCtx);
13535
13536    ret.push("<a onfocus=\"OnLink(this)\" class=\"ms-listlink\" href=\"");
13537    if (renderCtx.NoScriptEnabled && SupportAjaxFolderNav(renderCtx)) {
13538        ret.push("\"#\" onclick=\"");
13539        ret.push("EnterFolderAjax(event, '");
13540        ret.push(URI_Encoding.encodeURIComponent(listItem.FileRef));
13541        ret.push("', '");
13542        ret.push(mpInfo.getMountPointUrl());
13543        ret.push("', true);return false;\"");
13544        if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(169))
13545            ret.push(" aria-label=\"" + Encoding.HtmlEncode(Strings.STS.L_FieldType_SharedFolder) + "\"");
13546        ret.push(">");
13547    }
13548    else {
13549        ret.push(listSchema.PagePath);
13550        ret.push("?");
13551        ret.push(Encoding.ScriptEncode(mpInfo.getMountPointUrl()));
13552        if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(169))
13553            ret.push("\" aria-label=\"" + Encoding.HtmlEncode(Strings.STS.L_FieldType_SharedFolder) + "\">");
13554        else
13555            ret.push("\">");
13556    }
13557    ret.push(Encoding.HtmlEncode(content));
13558    ret.push("</a>");
13559}
13560function EnableCreateMountPointIfNeeded(renderCtx) {
13561    var uri = new URI(ajaxNavigate.get_href());
13562    var mountSiteId = uri.getQueryParameter("MountSiteId");
13563    var mountWebId = uri.getQueryParameter("MountWebId");
13564    var mountItemUniqueId = uri.getQueryParameter("MountItemUniqueId");
13565    var mountItemTitle = uri.getQueryParameter("MountItemTitle");
13566
13567    if (Boolean(mountSiteId) && Boolean(mountWebId) && Boolean(mountItemUniqueId) && Boolean(mountItemTitle)) {
13568        var createMountPointFunc = createOneTimeCallback(function(renderContext) {
13569            EnsureScriptParams('MountPoint.js', 'ConfirmCreateMountPoint', mountItemTitle, mountSiteId, mountWebId, mountItemUniqueId, renderCtx.listName, renderCtx.ListSchema.PagePath);
13570        });
13571
13572        AddPostRenderCallback(renderCtx, createMountPointFunc);
13573    }
13574}
13575function IsListItemFolder(listItem) {
13576    return Boolean(listItem) && listItem.FSObjType == "1" && (!Boolean(listItem["HTML_x0020_File_x0020_Type"]) || listItem["HTML_x0020_File_x0020_Type"].indexOf("OneNote.Notebook") == -1);
13577}
13578var ShortcutLinkTargetUrlFieldName;
13579var ShortcutLinkSiteIdFieldName;
13580var ShortcutLinkWebIdFieldName;
13581var ShortcutLinkUniqueIdFieldName;
13582
13583function IsShortcutLink(listItem) {
13584    return Boolean(listItem) && (listItem["File_x0020_Type"] == "url" || listItem["File_x0020_Type"] == "website");
13585}
13586function RetrieveShortcutLink(fileUrl) {
13587    if (window.XMLHttpRequest != null) {
13588        var strUrl = _spPageContextInfo["webAbsoluteUrl"] + "/_api/SP.Utilities.ShortcutLink.GetShortcutLink('" + URI_Encoding.encodeURIComponent(fileUrl) + "')";
13589        var req = new XMLHttpRequest();
13590
13591        req.open("GET", strUrl, true);
13592        req.setRequestHeader("Content-Type", "application/json");
13593        req.setRequestHeader("Accept", "application/json");
13594        req.onreadystatechange = function() {
13595            if (req.readyState != 4 || req.status != 200)
13596                return;
13597            var data = JSON.parse(req.responseText);
13598            var element = document.getElementById("shortcut_" + fileUrl);
13599
13600            if (element != null) {
13601                element.href = data.url;
13602                element.title = data.url;
13603            }
13604        };
13605        req.send(null);
13606    }
13607}
13608function GenerateHref(targetUrl, siteId, webId, uniqueId) {
13609    var targetHref = "";
13610    var query = "?";
13611
13612    if (Boolean(targetUrl)) {
13613        var queryIndex = targetUrl.indexOf("?");
13614
13615        if (queryIndex != -1) {
13616            query = targetUrl.substring(queryIndex);
13617        }
13618    }
13619    if (Boolean(uniqueId) && Boolean(webId) && Boolean(siteId)) {
13620        targetHref = _spPageContextInfo["webAbsoluteUrl"] + "/_layouts/15/" + "ShortcutLink.aspx";
13621        targetHref += query;
13622        targetHref += "&siteid=" + URI_Encoding.encodeURIComponent(siteId);
13623        targetHref += "&webid=" + URI_Encoding.encodeURIComponent(webId);
13624        targetHref += "&uniqueid=" + URI_Encoding.encodeURIComponent(uniqueId);
13625    }
13626    else if (Boolean(targetUrl)) {
13627        targetHref = targetUrl;
13628    }
13629    return targetHref;
13630}
13631function RenderShortcutHrefStart(renderCtx, ret, content, listItem, listSchema, triggerRetrieve) {
13632    var uniqueId = listItem[ShortcutLinkUniqueIdFieldName];
13633    var webId = listItem[ShortcutLinkWebIdFieldName];
13634    var siteId = listItem[ShortcutLinkSiteIdFieldName];
13635    var targetUrl = listItem[ShortcutLinkTargetUrlFieldName];
13636    var targetHref = GenerateHref(targetUrl, siteId, webId, uniqueId);
13637
13638    ret.push("<a onfocus=\"OnLink(this)\" class=\"ms-listlink\" href=\"");
13639    if (targetHref != "") {
13640        ret.push(Encoding.HtmlEncode(targetHref));
13641        ret.push("\" title=\"");
13642        ret.push(Encoding.HtmlEncode(targetUrl));
13643    }
13644    else {
13645        targetHref = _spPageContextInfo["webAbsoluteUrl"] + "/_layouts/15/" + "ShortcutLink.aspx?shortcut=" + URI_Encoding.encodeURIComponent(listItem.FileRef);
13646        ret.push(targetHref);
13647        ret.push("\" title=\"");
13648        ret.push(Encoding.HtmlEncode(Strings.STS.L_Shortcut_Processing));
13649        if (triggerRetrieve) {
13650            ret.push("\" id=\"shortcut_");
13651            ret.push(Encoding.HtmlEncode(listItem.FileRef));
13652            RetrieveShortcutLink(listItem.FileRef);
13653        }
13654    }
13655    ret.push("\" aria-label=\"");
13656    ret.push(Encoding.HtmlEncode(Strings.STS.L_FieldType_File_Shortcut));
13657    ret.push("\">");
13658}
13659function RenderShortcutLink(renderCtx, ret, content, listItem, listSchema) {
13660    RenderShortcutHrefStart(renderCtx, ret, content, listItem, listSchema, true);
13661    ret.push(Encoding.HtmlEncode(content));
13662    ret.push("</a>");
13663}
13664function RenderShortcutLinkIcon(renderCtx, ret, content, listItem, listSchema) {
13665    RenderShortcutHrefStart(renderCtx, ret, content, listItem, listSchema, false);
13666    ret.push("<img border=\"0\" alt=\"");
13667    ret.push(Encoding.HtmlEncode(Strings.STS.L_FieldType_File_Shortcut));
13668    ret.push("\" title=\"");
13669    ret.push(Encoding.HtmlEncode(Strings.STS.L_FieldType_File_Shortcut));
13670    ret.push("\" src=\"");
13671    ret.push(ListView.ImageBasePath + "/_layouts/15/images/icspgen.gif?rev=43");
13672    ret.push("\" />");
13673    ret.push("</a>");
13674}
13675function SaveCurrentContextInfo(renderCtx) {
13676    var ctxId = "ctx" + renderCtx.ctxId;
13677
13678    window[ctxId] = renderCtx;
13679    if (Boolean(g_ctxDict)) {
13680        g_ctxDict[ctxId] = renderCtx;
13681    }
13682    if (Boolean(g_ViewIdToViewCounterMap) && Boolean(renderCtx.view)) {
13683        g_ViewIdToViewCounterMap[renderCtx.view] = renderCtx.ctxId;
13684    }
13685}
13686function EnableHeroButton(renderCtx) {
13687    if (!Boolean(renderCtx.DisableHeroButton)) {
13688        window['heroButtonWebPart' + renderCtx.wpq] = true;
13689    }
13690}
13691function SetupDragDrop(renderCtx) {
13692    var registerDragDrop = function() {
13693        SetDocItemDragDrop(renderCtx);
13694    };
13695
13696    EnsureScriptFunc('DragDrop.js', 'registerDragUpload', registerDragDrop);
13697}
13698function _canDragUploadFile(renderCtx) {
13699    var listTemplate = renderCtx.ListTemplateType;
13700    var canDragUpload = true;
13701
13702    if (typeof g_uploadType != 'undefined' && (g_uploadType == UploadType.ACTIVEXNA || g_uploadType == UploadType.NOT_SUPPORTED)) {
13703        canDragUpload = false;
13704    }
13705    return canDragUpload && !(listTemplate == 119 || listTemplate == 123);
13706}
13707function AjaxNavAddNavigate(callback) {
13708    Nav.ajaxNavigate.add_navigate(callback);
13709}
13710function GetInplviewHash(webPartId) {
13711    return Nav.ajaxNavigate.getParam("InplviewHash" + webPartId);
13712}
13713function SupportsFileUpload() {
13714    return true;
13715}
13716function RenderEasyUploadInputFileElement(renderCtx) {
13717    var ret = [];
13718
13719    ret.push('<input type="file" class="ms-hide"');
13720    if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(61)) {
13721        ret.push(' multiple="true"');
13722    }
13723    ret.push(' id="easyUploadFile');
13724    ret.push(renderCtx.wpq);
13725    ret.push("\" onchange=\"HandleEasyUploadInputOnChange(event, this, &quot;");
13726    ret.push(renderCtx.wpq);
13727    ret.push("&quot;); return false;\" />");
13728    return ret.join('');
13729}
13730function IsEasyUploadEnabled(renderCtx) {
13731    return Boolean(renderCtx) && !renderCtx.inGridMode && renderCtx.ListTemplateType == 700 && typeof FormData != 'undefined' && Flighting.VariantConfiguration.IsExpFeatureClientEnabled(172);
13732}
13733function IsInIframe() {
13734    try {
13735        return window.self !== window.top;
13736    }
13737    catch (e) {
13738        return true;
13739    }
13740}
13741function RenderProjectTaskListEditMode(renderCtx, postRenderFunc) {
13742    if (renderCtx.ListTemplateType == 171 && _spPageContextInfo.webTemplate == '6115') {
13743        if (Boolean(renderCtx.bInitialRender) && (renderCtx.ListData.LastRow == null || renderCtx.ListData.LastRow == 0)) {
13744            renderCtx.inGridMode = false;
13745            postRenderFunc = function() {
13746                EnsureScriptParams('inplview', 'InitGridFromView', renderCtx.view);
13747            };
13748            AddPostRenderCallbackUnique(renderCtx, postRenderFunc);
13749        }
13750    }
13751}
13752function RenderGroupListEditMode(renderCtx, postRenderFunc) {
13753    if (renderCtx.SiteTemplateId == 64 && _spPageContextInfo.webTemplate == '64') {
13754        var curUrl = new URI(ajaxNavigate.get_href());
13755        var initQuery = curUrl.getQueryParameter("ShowInGrid");
13756
13757        if (!ctx.inGridMode && Boolean(initQuery) && initQuery != "false" && Boolean(renderCtx.bInitialRender) && (renderCtx.ListData.LastRow == null || renderCtx.ListData.LastRow == 0)) {
13758            renderCtx.inGridMode = true;
13759            postRenderFunc = function() {
13760                EnsureScriptParams('inplview', 'InitGridFromView', renderCtx.view);
13761            };
13762            AddPostRenderCallbackUnique(renderCtx, postRenderFunc);
13763        }
13764    }
13765}
13766function WriteDebugLog(tag, isInteresting, message) {
13767    SP.DebugLogger.Write(tag, isInteresting ? SP.DebugLogger.LoggingLevel.Interesting : 
13767SP.DebugLogger.LoggingLevel.Boring, message);
13768}
13769function WriteEngagementLog(tag, dictProperties) {
13770    SP.QoS.WriteUserEngagement(tag, dictProperties);
13771}
13772function WriteDocEngagementLog(teamSiteTag, oneDriveTag, dictProperties) {
13773    _WriteDocEngagement(teamSiteTag, oneDriveTag, dictProperties);
13774}
13775function WriteStart(tag, dictProperties) {
13776    SP.QoS.WriteStart(tag, dictProperties);
13777}
13778function WriteSuccess(tag, dictProperties, logType, duration) {
13779    SP.QoS.WriteSuccess(tag, dictProperties, logType, duration);
13780}
13781function WriteFailure(tag, dictProperties, logType, duration) {
13782    SP.QoS.WriteFailure(tag, dictProperties, logType, duration);
13783}
13784function WriteStartDiagnostic(tag, dictProperties) {
13785    SP.QoS.WriteStart(tag, dictProperties, SP.QoS.LogType.Diagnostic, null);
13786}
13787function WriteSuccessDiagnostic(tag, dictProperties) {
13788    SP.QoS.WriteSuccess(tag, dictProperties, SP.QoS.LogType.Diagnostic, null);
13789}
13790function WriteFailureDiagnostic(tag, dictProperties) {
13791    SP.QoS.WriteFailure(tag, dictProperties, SP.QoS.LogType.Diagnostic, null);
13792}
13793function WriteListViewSuccessLog(renderCtx) {
13794    if (typeof performance != "undefined" && typeof performance.timing != "undefined") {
13795        var listId = renderCtx.ListTemplateType > 0 ? renderCtx.ListTemplateType * 10000 : 0;
13796
13797        if (typeof renderCtx.BaseViewID == "number")
13798            listId += renderCtx.BaseViewID;
13799        if (window["groupContextData"] != null)
13800            listId = listId * 10 + 1;
13801        var endTime = (new Date()).getTime();
13802        var controlId = 'ListView';
13803        var startTime = 0;
13804        var usingAppCache = false;
13805        var folderNav = false;
13806
13807        if (Boolean(renderCtx.startTime)) {
13808            LogRUMExtendedAction('InplviewTime', listId, null, endTime - renderCtx.startTime, 2);
13809            startTime = Number(renderCtx.startTime);
13810            folderNav = true;
13811            renderCtx.startTime = null;
13812        }
13813        else if (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(192) || Flighting.VariantConfiguration.IsExpFeatureClientEnabled(511)) {
13814            var actionName = 'ListRendered';
13815            var appCache = window.applicationCache;
13816
13817            if (Boolean(appCache) && appCache.UNCACHED != appCache.status) {
13818                actionName += "_FromAppCache";
13819                usingAppCache = true;
13820                WriteSuccessDiagnostic(actionName);
13821            }
13822            LogRUMExtendedAction(actionName, listId, null, endTime, 2);
13823        }
13824        else {
13825            LogRUMExtendedAction('ListRendered', listId, null, endTime, 2);
13826        }
13827        EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
13828            var perfLogger = IsNullOrUndefined(PerformanceLogger) ? null : PerformanceLogger.GetLogger();
13829
13830            if (!IsNullOrUndefined(perfLogger)) {
13831                perfLogger.WriteScenarioId(String(listId));
13832                perfLogger.WriteAppCache(usingAppCache);
13833                perfLogger.WriteFolderNav(folderNav);
13834                if (typeof PerformanceLogger.ControlPerformanceData == "function") {
13835                    perfLogger.AddExpectedControl(controlId);
13836                    var controlPerformanceData = new PerformanceLogger.ControlPerformanceData(controlId, startTime, Number(endTime), perfLogger.ComputeControlRenderTime, perfLogger.CheckControlTimeRequiredDataAvailable);
13837
13838                    perfLogger.WriteControlPerformanceData(controlPerformanceData);
13839                }
13840            }
13841        });
13842        if (typeof g_MinimalDownload == "undefined" || !g_MinimalDownload) {
13843            if (typeof SP.Performance.UploadNonMDSPageLoadTime != "undefined")
13844                SP.Performance.UploadNonMDSPageLoadTime(renderCtx.ListTemplateType, endTime);
13845        }
13846    }
13847    if (typeof SP.ReadyToUploadLogs != "undefined")
13848        SP.ReadyToUploadLogs();
13849}
13850function _EnsureJSClassOrNamespace(nsStr, isNamespace) {
13851    var parts = nsStr.split(".");
13852    var prevNS;
13853
13854    for (var i = 0, pLen = parts.length; i < pLen; i++) {
13855        var ns = parts[i];
13856
13857        if (typeof prevNS == "undefined") {
13858            prevNS = window;
13859        }
13860        if (typeof prevNS[ns] == "undefined") {
13861            prevNS[ns] = new Object();
13862        }
13863        prevNS = prevNS[ns];
13864        if (isNamespace) {
13865            prevNS.__namespace = true;
13866        }
13867    }
13868}
13869function _EnsureJSNamespace(nsStr) {
13870    _EnsureJSClassOrNamespace(nsStr, true);
13871}
13872function _EnsureJSClass(nsStr) {
13873    _EnsureJSClassOrNamespace(nsStr, false);
13874}
13875var g_prefetch;
13876var g_ribbonImagePrefetch;
13877var AriaLogger;
13878var BaseLogger;
13879var CacheLogger;
13880
13881function CacheLogger_module_def() {
13882    CacheLogger.DefaultUploader = function(uploadFunc) {
13883        var uploadTimer = null;
13884        var pageLoaded = false;
13885        var clearTimer = function() {
13886            if (null != uploadTimer) {
13887                clearTimeout(Number(uploadTimer));
13888                uploadTimer = null;
13889            }
13890        };
13891        var upload = function() {
13892            clearTimer();
13893            uploadFunc();
13894        };
13895
13896        this.CanUpload = function() {
13897            return pageLoaded;
13898        };
13899        this.OnLog = function() {
13900            if (null == uploadTimer) {
13901                uploadTimer = setTimeout(upload, 5000);
13902            }
13903        };
13904        this.OnUpload = function() {
13905            clearTimer();
13906        };
13907        DOM.AddEventHandler(window, "onload", function() {
13908            pageLoaded = true;
13909            upload();
13910        });
13911    };
13912    var ariaLogger = null;
13913
13914    CacheLogger.Logger = function(storagePrefix, logger, uploaderConstructor) {
13915        if (!Boolean(storagePrefix) || storagePrefix.length == 0)
13916            storagePrefix = "CacheLogger";
13917        if (!Boolean(logger))
13918            logger = BaseLogger.GetLogger();
13919        if (!Boolean(uploaderConstructor))
13920            uploaderConstructor = CacheLogger.DefaultUploader;
13921        var storageSize = -1;
13922        var SessionID = "sessionID";
13923        var getStorageSize = function(size) {
13924            if (-1 == size) {
13925                var retSize = BrowserStorage.session.getItem(storagePrefix + "size");
13926
13927                if (!Boolean(retSize)) {
13928                    retSize = BrowserStorage.session.getItem(storagePrefix + "Size");
13929                }
13930                if (!Boolean(retSize))
13931                    retSize = "0";
13932                return parseInt(retSize, 10);
13933            }
13934            return size;
13935        };
13936        var generateGuid = function() {
13937            try {
13938                var rStr = function(len) {
13939                    var ret = "";
13940
13941                    do {
13942                        ret += ((Math.random()).toString(16)).substr(2, len - ret.length);
13943                    } while (ret.length < len);
13944                    return ret;
13945                };
13946
13947                return rStr(8) + "-" + rStr(4) + "-4" + rStr(3) + "-" + rStr(4) + "-" + rStr(12);
13948            }
13949            catch (e) {
13950                return "";
13951            }
13952        };
13953        var ensureSessionID = function() {
13954            if (typeof window[SessionID] == "undefined") {
13955                if (typeof g_correlationId == "string" && g_correlationId != null) {
13956                    window[SessionID] = g_correlationId;
13957                }
13958                else {
13959                    window[SessionID] = generateGuid();
13960                }
13961            }
13962        };
13963        var ensureAriaLogger = function(ev) {
13964            if (!Boolean(ariaLogger) || typeof ariaLogger.isInitialized != "function") {
13965                EnsureScriptFunc("ariaSDK.js", "AWTLogManager", function() {
13966                    ariaLogger = new AriaLogger.Logger();
13967                    if (Boolean(ev) && Boolean(ariaLogger) && ariaLogger.isInitialized()) {
13968                        ariaLogger.safeLogEvent(ev);
13969                    }
13970                });
13971            }
13972        };
13973        var uploadData = function() {
13974            if (!uploader.CanUpload())
13975                return;
13976            storageSize = getStorageSize(storageSize);
13977            var haveData = false;
13978
13979            if (!(window["OffSwitch"] == null || OffSwitch.IsActive("D6FA4689-03B2-493E-A113-C03B78D9DA53"))) {
13980                if (!Boolean(ariaLogger) || typeof ariaLogger.isInitialized != "function") {
13981                    ensureAriaLogger();
13982                }
13983            }
13984            for (var i = 0; i < storageSize; i++) {
13985                var dataItemStr = BrowserStorage.session.getItem(storagePrefix + i.toString());
13986
13987                try {
13988                    var dataItem = JSON.parse(dataItemStr);
13989
13990                    logger.WriteLog(String(dataItem.name), dataItem.props);
13991                    haveData = true;
13992                    if (!(window["OffSwitch"] == null || OffSwitch.IsActive("D6FA4689-03B2-493E-A113-C03B78D9DA53"))) {
13993                        var ev = setAriaEvent(String(dataItem.name), dataItem.props);
13994
13995                        if (Boolean(ariaLogger) && typeof ariaLogger.isInitialized == "function") {
13996                            ariaLogger.safeLogEvent(ev);
13997                        }
13998                        else {
13999                            ensureAriaLogger(ev);
14000                        }
14001                    }
14002                }
14003                catch (e) {
14004                    continue;
14005                }
14006            }
14007            if (!haveData)
14008                return;
14009            if (!(window["OffSwitch"] == null || OffSwitch.IsActive("D6FA4689-03B2-493E-A113-C03B78D9DA53"))) {
14010                ensureSessionID();
14011            }
14012            else {
14013                if (typeof window[SessionID] == "undefined") {
14014                    if (typeof g_correlationId == "string" && g_correlationId != null) {
14015                        window[SessionID] = g_correlationId;
14016                    }
14017                    else {
14018                        window[SessionID] = generateGuid();
14019                    }
14020                }
14021            }
14022            logger.SetCorrelationId(window[SessionID]);
14023            logger.UploadData();
14024            storageSize = 0;
14025            BrowserStorage.session.removeItem(storagePrefix + "Size");
14026            BrowserStorage.session.setItem(storagePrefix + "size", 0);
14027            uploader.OnUpload();
14028        };
14029        var uploader = new uploaderConstructor(uploadData);
14030
14031        CacheLogger.GenerateGuid = function() {
14032            return generateGuid();
14033        };
14034        this.WriteLog = function(eventName, dictProperties, immediate) {
14035            if (!Boolean(eventName) || !Boolean(dictProperties)) {
14036                return;
14037            }
14038            if (!Boolean(dictProperties['ClientTime'])) {
14039                dictProperties['ClientTime'] = (new Date()).valueOf();
14040            }
14041            var logEntry = {
14042                name: eventName,
14043                props: dictProperties
14044            };
14045
14046            storageSize = getStorageSize(storageSize);
14047            if (storageSize >= 100) {
14048                return;
14049            }
14050            var serializedObject = "";
14051
14052            try {
14053                serializedObject = JSON.stringify(logEntry);
14054            }
14055            catch (e) {
14056                return;
14057            }
14058            BrowserStorage.session.setItem(storagePrefix + storageSize.toString(), serializedObject);
14059            storageSize++;
14060            BrowserStorage.session.setItem(storagePrefix + "size", storageSize);
14061            uploader.OnLog();
14062            if (Boolean(immediate)) {
14063                setTimeout(uploadData, 0);
14064            }
14065        };
14066        function setAriaEvent(evName, props) {
14067            ensureSessionID();
14068            var ev = {
14069                "eventName": evName,
14070                "sessionId": window[SessionID],
14071                "correlationVector": window[SessionID],
14072                "data": props
14073            };
14074
14075            return ev;
14076        }
14077    };
14078    var defaultLogger = null;
14079
14080    CacheLogger.GetLogger = function() {
14081        if (null == defaultLogger)
14082            defaultLogger = new CacheLogger.Logger();
14083        return defaultLogger;
14084    };
14085}
14086var DebugLogger;
14087
14088function DebugLogger_module_def() {
14089    var debugStreamId = 'ReliabilityLog';
14090    var maxColumnSize = 5000;
14091    var defaultNumberOfBoringLogsToSend = 25;
14092
14093    DebugLogger.Logger = function(numberOfBoringLogsToSend, cacheLogger) {
14094        if (!Boolean(cacheLogger))
14095            cacheLogger = CacheLogger.GetLogger();
14096        var logCache = new MRUCache(numberOfBoringLogsToSend);
14097
14098        this.Write = function(tag, level, message, miscData) {
14099            if (!Boolean(tag) || tag.length == 0)
14100                return;
14101            if (!Boolean(message))
14102                message = "";
14103            if (!Boolean(miscData))
14104                miscData = "";
14105            if (typeof message.stack == "string") {
14106                message = message.stack;
14107            }
14108            else if (typeof message.message == "string") {
14109                message = message.message;
14110            }
14111            else {
14112                message = getCsomDebugInfo(message);
14113            }
14114            if (tag.length > maxColumnSize || Number(message.length) > maxColumnSize || miscData.length > maxColumnSize) {
14115                tag = tag.substring(0, maxColumnSize);
14116                message = message.substring(0, maxColumnSize);
14117                miscData = message.substring(0, maxColumnSize);
14118            }
14119            var log = {
14120                Tag: tag,
14121                Level: level,
14122                Message: message,
14123                Misc: miscData,
14124                UserAgent: navigator.userAgent
14125            };
14126
14127            if (this.LoggingLevel.Boring == level) {
14128                logCache.Push(log);
14129                return;
14130            }
14131            var item;
14132
14133            while (Boolean(item = logCache.GetOldest())) {
14134                cacheLogger.WriteLog(debugStreamId, item);
14135            }
14136            cacheLogger.WriteLog(debugStreamId, log, true);
14137        };
14138        this.LoggingLevel = {
14139            Boring: 0,
14140            Interesting: 1
14141        };
14142        var csomErrorFunctions = [{
14143            func: "get_errorCode",
14144            name: "ErrorCode"
14145        }, {
14146            func: "get_errorTraceCorrelationId",
14147            name: "CorrelationId"
14148        }, {
14149            func: "get_errorTypeName",
14150            name: "ErrorType"
14151        }, {
14152            func: "get_message",
14153            name: "Message"
14154        }, {
14155            func: "get_stackTrace",
14156            name: "StackTrace"
14157        }];
14158        var getCsomDebugInfo = function(args) {
14159            var info = {};
14160            var hasCsomData = false;
14161
14162            for (var i = 0; i < csomErrorFunctions.length; i++) {
14163                if (typeof args[csomErrorFunctions[i].func] == "function") {
14164                    var result = args[csomErrorFunctions[i].func].call(args);
14165
14166                    if (result != null && result != "") {
14167                        info[csomErrorFunctions[i].name] = result;
14168                        hasCsomData = true;
14169                    }
14170                }
14171            }
14172            if (hasCsomData)
14173                return JSON.stringify(info);
14174            else
14175                return String(args);
14176        };
14177    };
14178    var defaultLogger = null;
14179
14180    DebugLogger.GetLogger = function() {
14181        if (null == defaultLogger)
14182            defaultLogger = new DebugLogger.Logger(defaultNumberOfBoringLogsToSend);
14183        return defaultLogger;
14184    };
14185    var MRUCache = function(size) {
14186        var _size = size;
14187        var _length = 0;
14188        var _head = -1;
14189        var _tail = -1;
14190        var _arr = new Array(size);
14191
14192        this.Push = function(item) {
14193            _head++;
14194            if (_head == _size)
14195                _head = 0;
14196            if (_tail == -1 || _head == _tail) {
14197                _tail++;
14198                if (_tail == _size)
14199                    _tail = 0;
14200            }
14201            _arr[_head] = item;
14202            _length++;
14203            if (_length > size)
14204                _length = size;
14205        };
14206        this.GetOldest = function() {
14207            if (_length == 0)
14208                return null;
14209            var retVal = _arr[_tail];
14210
14211            _length--;
14212            if (_length < 0)
14213                _length = 0;
14214            if (_length > 0) {
14215                _tail++;
14216                if (_tail == _size)
14217                    _tail = 0;
14218            }
14219            if (_length == 0) {
14220                _tail = -1;
14221                _head = -1;
14222            }
14223            return retVal;
14224        };
14225    };
14226}
14227var QoSLogger;
14228
14229function QoSLogger_module_def() {
14230    var userEngagementStreamId = 'UserEngagement';
14231
14232    QoSLogger.Logger = function(cacheLogger, debugLogger) {
14233        if (!Boolean(cacheLogger))
14234            cacheLogger = CacheLogger.GetLogger();
14235        var that = this;
14236
14237        this.LogType = {
14238            Engagement: 0,
14239            Diagnostic: 1
14240        };
14241        var writeTag = function(tag, dictProperties, logType, duration) {
14242            var serializedObject = "";
14243
14244            if (Boolean(dictProperties)) {
14245                try {
14246                    serializedObject = JSON.stringify(dictProperties);
14247                }
14248                catch (e) { }
14249            }
14250            if (!Boolean(logType))
14251                logType = that.LogType.Engagement;
14252            var log = {
14253                EngagementName: tag,
14254                Properties: serializedObject,
14255                Duration: duration,
14256                LogType: logType
14257            };
14258
14259            cacheLogger.WriteLog(userEngagementStreamId, log);
14260        };
14261
14262        this.WriteStart = function(tag, dictProperties, logType, duration) {
14263            writeTag(tag, dictProperties, logType, duration);
14264        };
14265        this.WriteSuccess = function(tag, dictProperties, logType, duration) {
14266            writeTag(tag, dictProperties, logType, duration);
14267        };
14268        this.WriteFailure = function(tag, dictProperties, logType, duration, error) {
14269            writeTag(tag, dictProperties, logType, duration);
14270            if (Boolean(debugLogger) && Boolean(error)) {
14271                debugLogger.Write(tag, debugLogger.LoggingLevel.Interesting, error);
14272            }
14273        };
14274        this.WriteUserEngagement = function(tag, dictProperties) {
14275            writeTag(tag, dictProperties, this.LogType.Engagement, null);
14276        };
14277        this.ScenarioMonitor = function(scenarioName, startTag, successTag, unexpectedFailureTag, noResultTag, startProperties, logType) {
14278            var hadSuccess = false;
14279            var successProperties = null;
14280            var expectedFailureProperties = null;
14281            var unexpectedFailureProperties = null;
14282            var expectedFailureError = null;
14283            var unexpectedFailureError = null;
14284            var hadExpectedFailure = false;
14285            var hadUnexpectedFailure = false;
14286            var expectedFailureTag;
14287            var startTime;
14288            var disposed = false;
14289            var logStart = function() {
14290                that.WriteStart(startTag, startProperties, logType, null);
14291            };
14292            var logSuccess = function(duration) {
14293                that.WriteSuccess(successTag, successProperties, logType, duration);
14294            };
14295            var logExpectedFailure = function(duration) {
14296                that.WriteFailure(expectedFailureTag, expectedFailureProperties, logType, duration, expectedFailureError);
14297            };
14298            var logUnexpectedFailure = function(duration) {
14299                that.WriteFailure(unexpectedFailureTag, unexpectedFailureProperties, logType, duration, unexpectedFailureError);
14300            };
14301            var logNoResult = function(duration) {
14302                that.WriteFailure(noResultTag, null, logType, duration);
14303            };
14304
14305            this.Success = function(properties) {
14306                if (hadSuccess)
14307                    return;
14308                hadSuccess = true;
14309                successProperties = properties;
14310            };
14311            this.ExpectedFailure = function(tag, properties, error) {
14312                if (hadExpectedFailure)
14313                    return;
14314                hadExpectedFailure = true;
14315                expectedFailureProperties = properties;
14316                expectedFailureError = error;
14317                expectedFailureTag = tag;
14318            };
14319            this.UnexpectedFailure = function(tag, properties, error) {
14320                if (hadUnexpectedFailure)
14321                    return;
14322                hadUnexpectedFailure = true;
14323                unexpectedFailureProperties = properties;
14324                unexpectedFailureError = error;
14325                if (null != tag)
14326                    unexpectedFailureTag = tag;
14327            };
14328            var disposeEventFunc = function(evt) {
14329                disposeHelper();
14330            };
14331
14332            this.Dispose = function() {
14333                disposeHelper();
14334            };
14335            function disposeHelper() {
14336                if (disposed)
14337                    return;
14338                disposed = true;
14339                var duration = Number(new Date()) - startTime;
14340
14341                if (hadExpectedFailure) {
14342                    logExpectedFailure(duration);
14343                }
14344                else if (hadUnexpectedFailure) {
14345                    logUnexpectedFailure(duration);
14346                }
14347                else if (hadSuccess) {
14348                    logSuccess(duration);
14349                }
14350                else {
14351                    logNoResult(duration);
14352                }
14353                DOM.RemoveEventHandler(window, "onbeforeunload", disposeEventFunc);
14354            }
14355            logStart();
14356            DOM.AddEventHandler(window, "onbeforeunload", disposeEventFunc);
14357            startTime = Number(new Date());
14358        };
14359        this.ExecuteMonitoredCode = function(scenarioName, startTag, successTag, unexpectedFailureTag, noResultTag, functionToExecute, properties, logType) {
14360            var monitor = new that.ScenarioMonitor(scenarioName, startTag, successTag, unexpectedFailureTag, noResultTag, properties, logType);
14361
14362            try {
14363                functionToExecute(monitor);
14364                monitor.Success(properties);
14365            }
14366            catch (e) {
14367                monitor.UnexpectedFailure(unexpectedFailureTag, properties, e);
14368                throw e;
14369            }
14370            finally {
14371                monitor.Dispose();
14372            }
14373        };
14374        this.ExecuteMonitoredAsync = function(scenarioName, startTag, successTag, unexpectedFailureTag, noResultTag, functionToExecute, onSuccess, onF
14374ailure, properties, logType) {
14375            var monitor = new that.ScenarioMonitor(scenarioName, startTag, successTag, unexpectedFailureTag, noResultTag, properties, logType);
14376            var onSuccessMonitored = function(sender, args) {
14377                try {
14378                    onSuccess(sender, args, monitor);
14379                    monitor.Success(properties);
14380                }
14381                catch (e) {
14382                    monitor.UnexpectedFailure(unexpectedFailureTag, properties, e);
14383                    throw e;
14384                }
14385                finally {
14386                    monitor.Dispose();
14387                }
14388            };
14389            var onFailureMonitored = function(sender, args) {
14390                try {
14391                    onFailure(sender, args, monitor);
14392                }
14393                catch (e) {
14394                    throw e;
14395                }
14396                finally {
14397                    monitor.UnexpectedFailure(unexpectedFailureTag, properties, args);
14398                    monitor.Dispose();
14399                }
14400            };
14401
14402            try {
14403                functionToExecute(onSuccessMonitored, onFailureMonitored);
14404            }
14405            catch (e) {
14406                monitor.UnexpectedFailure(unexpectedFailureTag, properties, e);
14407                monitor.Dispose();
14408                throw e;
14409            }
14410        };
14411    };
14412    var defaultLogger = null;
14413
14414    QoSLogger.GetLogger = function() {
14415        if (null == defaultLogger)
14416            defaultLogger = new QoSLogger.Logger();
14417        return defaultLogger;
14418    };
14419}
14420var RUMDelta;
14421var PerformanceLogger;
14422
14423function PerformanceLogger_module_def() {
14424    PerformanceLogger.ControlPerformanceData = function(_controlId, _startTime, _endTime, _RenderTimeCalculator, _RenderTimeRequiredDataChecker) {
14425        this.ControlId = _controlId;
14426        this.StartTime = _startTime;
14427        this.EndTime = _endTime;
14428        this.RenderTimeCalculator = _RenderTimeCalculator;
14429        this.RenderTimeRequiredDataChecker = _RenderTimeRequiredDataChecker;
14430    };
14431    PerformanceLogger.ControlPerformanceData.prototype.RenderTime = 0;
14432    PerformanceLogger.PerformanceDataState = {
14433        Incomplete: 1,
14434        ReadyToUpload: 2,
14435        Uploaded: 3,
14436        TimeOut: 4
14437    };
14438    var PerformanceDataState = PerformanceLogger.PerformanceDataState;
14439
14440    PerformanceLogger.Logger = function(cacheLogger) {
14441        this.PerformanceData = null;
14442        var controls = new Array(0);
14443        var expectedControls = new Array(0);
14444        var dataState = PerformanceDataState.Incomplete;
14445        var perfDataTimer = null;
14446        var checkInterval = 100;
14447        var errorTimeOut = 30000;
14448        var keyMetrics = ['ServerCorrelationId', 'ServerRequestDuration', 'EUPL', 'ServerUrl', 'ScenarioId', 'PageTransitionType', 'AppCache', 'FolderNav', 'W3cNavigationStart'];
14449        var dataStartTime = Number((new Date()).getTime());
14450        var isServerCorrelationIdCollected = false;
14451        var isPageTransitionCollected = false;
14452        var isServerLatencyCollected = false;
14453        var isAppCacheCollected = false;
14454        var isFolderNavCollected = false;
14455        var isEUPLCollected = false;
14456        var isMDSTimingCollected = false;
14457        var isW3cTimingCollected = false;
14458        var isW3cResourceTimingCollected = false;
14459        var isScenarioIdCollected = false;
14460        var isServerUrlCollected = false;
14461        var euplBreakDown = {};
14462        var that = this;
14463
14464        if (IsNullOrUndefined(cacheLogger)) {
14465            cacheLogger = CacheLogger.GetLogger();
14466        }
14467        this.GetPerformanceData = function() {
14468            if (!IsNullOrUndefined(that.PerformanceData)) {
14469                return that.PerformanceData;
14470            }
14471            EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
14472                if (IsNullOrUndefined(that.PerformanceData)) {
14473                    if (typeof SP === "object" && typeof SP.SlapiInternal === "object") {
14474                        var slapiInternal = SP.SlapiInternal;
14475
14476                        that.PerformanceData = new slapiInternal.RUMOne();
14477                    }
14478                }
14479            });
14480            return that.PerformanceData;
14481        };
14482        this.GetPerformanceData();
14483        function SetPerfDataTimer() {
14484            perfDataTimer = setTimeout(LoopForDataCompleteness, checkInterval);
14485        }
14486        function ClearPerfDataTimer() {
14487            if (!IsNullOrUndefined(perfDataTimer)) {
14488                clearTimeout(perfDataTimer);
14489                perfDataTimer = null;
14490            }
14491        }
14492        function LoopForDataCompleteness() {
14493            ClearPerfDataTimer();
14494            if (dataState === PerformanceDataState.Uploaded || dataState === PerformanceDataState.TimeOut) {
14495                return;
14496            }
14497            var collected = true;
14498            var missedKeyMetrics = new Array(0);
14499
14500            for (var i = 0; i < keyMetrics.length; i++) {
14501                var keyMetricValue = that.GetPerformanceDataPropertyValue(keyMetrics[i]);
14502
14503                if (IsNullOrUndefined(keyMetricValue)) {
14504                    collected = false;
14505                    missedKeyMetrics.push(keyMetrics[i]);
14506                }
14507            }
14508            dataState = collected ? PerformanceDataState.ReadyToUpload : PerformanceDataState.Incomplete;
14509            if (dataState === PerformanceDataState.Incomplete) {
14510                if (!(window["OffSwitch"] == null || OffSwitch.IsActive("5DB2EE36-96C7-495F-877E-79DCAFC6ED72"))) {
14511                    that.WriteServerCorrelationId();
14512                    WriteServerUrl();
14513                    that.LogPerformanceData('EUPLBreakdown', JSON.stringify(euplBreakDown));
14514                    if (ReadyToComputeEUPL()) {
14515                        SetEUPLAndControlData();
14516                    }
14517                }
14518                if (Number((new Date()).getTime()) - Number(dataStartTime) > errorTimeOut) {
14519                    dataState = PerformanceDataState.TimeOut;
14520                    UploadPerfData();
14521                    EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
14522                        ReportErrors('TimeOut', 'Did not get key perf metrics in ' + String(errorTimeOut) + ' milliseconds. Missed metrics: ' + missedKeyMetrics.join() + '.');
14523                    });
14524                }
14525                else {
14526                    if (window["OffSwitch"] == null || OffSwitch.IsActive("5DB2EE36-96C7-495F-877E-79DCAFC6ED72")) {
14527                        that.WriteServerCorrelationId();
14528                        WriteServerUrl();
14529                        that.LogPerformanceData('EUPLBreakdown', JSON.stringify(euplBreakDown));
14530                        if (ReadyToComputeEUPL()) {
14531                            SetEUPLAndControlData();
14532                        }
14533                    }
14534                }
14535            }
14536            else {
14537                try {
14538                    UploadPerfData();
14539                }
14540                catch (e) {
14541                    (function(errorText) {
14542                        if (typeof console != "undefined" && Boolean(console) && typeof console.error == "function") {
14543                            console.error(String(errorText));
14544                        }
14545                    })("PerformanceLogger: error writing RUMOne data.");
14546                }
14547                dataState = PerformanceDataState.Uploaded;
14548            }
14549            SetPerfDataTimer();
14550        }
14551        ;
14552        SetPerfDataTimer();
14553        function GetReadableDataState(_dataState) {
14554            if (IsNullOrUndefined(PerformanceDataState)) {
14555                return 'NaN';
14556            }
14557            for (var key in PerformanceDataState) {
14558                if (_dataState === PerformanceDataState[key]) {
14559                    return key;
14560                }
14561            }
14562            return 'NaN';
14563        }
14564        ;
14565        this.ResetPerformanceLogger = function() {
14566            dataStartTime = (new Date()).getTime();
14567            dataState = PerformanceDataState.Incomplete;
14568            isServerCorrelationIdCollected = false;
14569            isPageTransitionCollected = false;
14570            isServerLatencyCollected = false;
14571            isAppCacheCollected = false;
14572            isFolderNavCollected = false;
14573            isEUPLCollected = false;
14574            isMDSTimingCollected = false;
14575            isW3cTimingCollected = false;
14576            isW3cResourceTimingCollected = false;
14577            isScenarioIdCollected = false;
14578            isServerUrlCollected = false;
14579            controls = new Array(0);
14580            expectedControls = new Array(0);
14581            that.PerformanceData = null;
14582            that.GetPerformanceData();
14583            ClearPerfDataTimer();
14584            SetPerfDataTimer();
14585            euplBreakDown = {};
14586        };
14587        this.LogPerformanceData = function(key, value) {
14588            if (IsNullOrUndefined(key)) {
14589                return;
14590            }
14591            EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
14592                that.GetPerformanceData();
14593                if (!VerifyPropertyMatchingSchema(key)) {
14594                    return;
14595                }
14596                that.PerformanceData[key] = value;
14597                CheckLateReporting({
14598                    Name: key,
14599                    Value: value
14600                });
14601            });
14602        };
14603        this.GetPerformanceDataPropertyValue = function(key) {
14604            if (IsNullOrUndefined(that.PerformanceData) || IsNullOrUndefined(key) || !VerifyPropertyMatchingSchema(key)) {
14605                return null;
14606            }
14607            return that.PerformanceData[key];
14608        };
14609        function VerifyPropertyMatchingSchema(propertyName) {
14610            var properties = GetRUMOnePropertyNames(that.PerformanceData);
14611
14612            return (properties.join()).indexOf(propertyName) != -1;
14613        }
14614        ;
14615        function GetRUMOnePropertyNames(obj) {
14616            var names = new Array(0);
14617            var index = 0;
14618
14619            if (!IsNullOrUndefined(obj)) {
14620                for (var property in obj) {
14621                    if (obj.hasOwnProperty(property)) {
14622                        names[index++] = property;
14623                    }
14624                }
14625            }
14626            return names;
14627        }
14628        ;
14629        this.WriteServerCorrelationId = function(correlationId) {
14630            if (isServerCorrelationIdCollected) {
14631                return;
14632            }
14633            if (!IsNullOrUndefined(correlationId)) {
14634                that.LogPerformanceData('ServerCorrelationId', correlationId);
14635            }
14636            else if (typeof g_correlationId === "string" && !IsNullOrUndefined(g_correlationId)) {
14637                that.LogPerformanceData('ServerCorrelationId', g_correlationId);
14638                isServerCorrelationIdCollected = true;
14639            }
14640        };
14641        function WriteServerUrl() {
14642            if (isServerUrlCollected) {
14643                return;
14644            }
14645            if (!IsNullOrUndefined(that.PerformanceData)) {
14646                that.LogPerformanceData('ServerUrl', window.location.href);
14647                isServerUrlCollected = true;
14648            }
14649        }
14650        ;
14651        this.WriteServerSideLatency = function WriteServerSideLatency(duration, iisLatency) {
14652            if (!IsNullOrUndefined(that.PerformanceData) && !isServerLatencyCollected) {
14653                if (!IsNullOrUndefined(duration)) {
14654                    that.LogPerformanceData('ServerRequestDuration', duration);
14655                    isServerLatencyCollected = true;
14656                }
14657                if (!IsNullOrUndefined(iisLatency)) {
14658                    that.LogPerformanceData('IISLatency', iisLatency);
14659                }
14660            }
14661        };
14662        this.WriteControlPerformanceData = function(controlData) {
14663            if (IsNullOrUndefined(controlData) || IsNullOrUndefined(controls)) {
14664                return;
14665            }
14666            controls.push(controlData);
14667        };
14668        function WriteControlDataToRUMOne(controlData) {
14669            if (IsNullOrUndefined(controls) || IsNullOrUndefined(that.PerformanceData) || IsNullOrUndefined(controlData)) {
14670                return;
14671            }
14672            var controlId = controlData.ControlId;
14673            var renderTime = controlData.RenderTime;
14674
14675            if (IsNullOrUndefined(that.GetPerformanceDataPropertyValue('Control1Id'))) {
14676                that.LogPerformanceData('Control1Id', controlId);
14677                that.LogPerformanceData('Control1RenderTime', renderTime);
14678                return;
14679            }
14680            if (IsNullOrUndefined(that.GetPerformanceDataPropertyValue('Control2Id'))) {
14681                that.LogPerformanceData('Control2Id', controlId);
14682                that.LogPerformanceData('Control2RenderTime', renderTime);
14683                return;
14684            }
14685            if (IsNullOrUndefined(that.GetPerformanceDataPropertyValue('Control3Id'))) {
14686                that.LogPerformanceData('Control3Id', controlId);
14687                that.LogPerformanceData('Control3RenderTime', renderTime);
14688                return;
14689            }
14690            if (IsNullOrUndefined(that.GetPerformanceDataPropertyValue('Control4Id'))) {
14691                that.LogPerformanceData('Control4Id', controlId);
14692                that.LogPerformanceData('Control4RenderTime', renderTime);
14693                return;
14694            }
14695        }
14696        ;
14697        function ReadyToComputeEUPL() {
14698            var ready = true;
14699
14700            if (IsNullOrUndefined(expectedControls) || IsNullOrUndefined(controls) || expectedControls.length === 0 || controls.length === 0) {
14701                return false;
14702            }
14703            for (var index = 0; index < expectedControls.length; index++) {
14704                var keyControl = LookUpControls(expectedControls[index], controls);
14705
14706                if (IsNullOrUndefined(keyControl) || !keyControl.RenderTimeRequiredDataChecker(that, keyControl)) {
14707                    ready = false;
14708                    break;
14709                }
14710            }
14711            return ready;
14712        }
14713        ;
14714        function LookUpControls(_controlId, _controls) {
14715            if (IsNullOrUndefined(_controlId) || IsNullOrUndefined(_controls)) {
14716                return null;
14717            }
14718            for (var index = 0; index < _controls.length; index++) {
14719                if (_controlId === _controls[index].ControlId) {
14720                    return _controls[index];
14721                }
14722            }
14723            return null;
14724        }
14725        ;
14726        function SetEUPLAndControlData() {
14727            if (isEUPLCollected) {
14728                return;
14729            }
14730            var eupl = 0;
14731
14732            if (IsNullOrUndefined(controls) || controls.length === 0) {
14733                return;
14734            }
14735            for (var index = 0; index < controls.length; index++) {
14736                var controlData = controls[index];
14737
14738                controlData.RenderTime = controlData.RenderTimeCalculator(that, controlData);
14739                WriteControlDataToRUMOne(controlData);
14740                if (eupl < controlData.RenderTime) {
14741                    eupl = controlData.RenderTime;
14742                }
14743            }
14744            that.LogPerformanceData('EUPL', eupl);
14745            isEUPLCollected = true;
14746        }
14747        ;
14748        this.WriteAppCache = function(appCache) {
14749            if (isAppCacheCollected) {
14750                return;
14751            }
14752            that.LogPerformanceData('AppCache', appCache);
14753            isAppCacheCollected = true;
14754        };
14755        this.WriteFolderNav = function(folderNav) {
14756            if (isFolderNavCollected) {
14757                return;
14758            }
14759            that.LogPerformanceData('FolderNav', folderNav);
14760            isFolderNavCollected = true;
14761        };
14762        this.WritePageTransitionType = function(pageTransitionType) {
14763            if (isPageTransitionCollected) {
14764                return;
14765            }
14766            if (IsNullOrUndefined(pageTransitionType) || pageTransitionType < 0 || pageTransitionType > 4) {
14767                return;
14768            }
14769            that.LogPerformanceData('PageTransitionType', pageTransitionType);
14770            isPageTransitionCollected = true;
14771        };
14772        this.WriteScenarioId = function(scenarioId, overwrite) {
14773            if (isScenarioIdCollected && !overwrite) {
14774                return;
14775            }
14776            if (IsNullOrUndefined(scenarioId)) {
14777                return;
14778            }
14779            that.LogPerformanceData('ScenarioId', scenarioId);
14780            isScenarioIdCollected = true;
14781        };
14782        this.WriteMDSTiming = function(mdsIndex, timing) {
14783            if (isMDSTimingCollected) {
14784                return;
14785            }
14786            var MDSTimingName = ResolveMDSTimingName(mdsIndex);
14787
14788            if (!IsNullOrUndefined(MDSTimingName)) {
14789                that.LogPerformanceData(MDSTimingName, timing);
14790                if (MDSTimingName === 'MDSAnimationEnd') {
14791                    isMDSTimingCollected = true;
14792                }
14793            }
14794        };
14795        this.CollectW3CPerfTimings = function() {
14796            if (isW3cTimingCollected) {
14797                return;
14798            }
14799            var w3cTimeStampNames = ['navigationStart', 'unloadEventStart', 'unloadEventEnd', 'fetchStart', 'redirectStart', 'redirectEnd', 'domainLookupStart', 'domainLookupEnd', 'connectStart', 'secureConnectStart', 'connectEnd', 'requestStart', 'responseStart', 'responseEnd', 'domLoading', 'domComplete', 'loadEventStart', 'loadEventEnd'];
14800            var perfTimingObject = GetWindowPerfTimingObject();
14801
14802            if (IsNullOrUndefined(perfTimingObject)) {
14803                return;
14804            }
14805            var values = new Array(w3cTimeStampNames.length);
14806
14807            for (var index = 0; index < w3cTimeStampNames.length; index++) {
14808                var w3cObject = perfTimingObject[w3cTimeStampNames[index]];
14809
14810                if (IsNullOrUndefined(w3cObject)) {
14811                    continue;
14812                }
14813                that.LogPerformanceData(GetW3cTimingName(w3cTimeStampNames[index]), Number(w3cObject));
14814            }
14815            isW3cTimingCollected = true;
14816        };
14817        this.CollectW3cResourceTimings = function() {
14818            var index = 0;
14819
14820            if (!isW3cResourceTimingCollected) {
14821                var allRequests = GetPerfResourcesTimingObject(false, 0);
14822                var iFrames = document.getElementsByTagName("iframe");
14823
14824                for (index = 0; index < iFrames.length; index++) {
14825                    var iFramePerformance = null;
14826
14827                    try {
14828                        iFramePerformance = GetPerfResourcesTimingObject(true, index);
14829                    }
14830                    catch (e) { }
14831                    if (Boolean(iFramePerformance)) {
14832                        allRequests.concat(iFramePerformance.getEntriesByType("resource"));
14833                    }
14834                }
14835                var fromSources = {};
14836
14837                fromSources["SharePoint"] = function(element) {
14838                    return /\.sharepoint\.com|\.spoppe\.com/i.test(element.name);
14839                };
14840                fromSources["CDN"] = function(element) {
14841                    return /(cdn(ppe)?|static(ppe)?)\.sharepointonline\.com|contentstorage\.osi\.office\.net|\.akamaihd\.net/i.test(element.name);
14842                };
14843                fromSources["ThirdParty"] = function(element) {
14844                    return !fromSources["SharePoint"](element) && !fromSources["CDN"](element);
14845                };
14846                var types = {};
14847
14848                types["ASPX"] = function(element) {
14849                    return /\.aspx/i.test(element.name);
14850                };
14851                types["JS"] = function(element) {
14852                    return /script/i.test(element.initiatorType);
14853                };
14854                types["CSS"] = function(element) {
14855                    return /link|css/i.test(element.initiatorType);
14856                };
14857                types["IMG"] = function(element) {
14858                    return /img/i.test(element.initiatorType);
14859                };
14860                var sources = Object.keys(fromSources);
14861
14862                for (index = 0; index < sources.length; index++) {
14863                    var source = sources[index];
14864                    var requests = CategorizeResourceRequests(allRequests, {
14865                        from: fromSources[source],
14866                        requestType: null
14867                    });
14868
14869                    that.LogPerformanceData(source + "RequestCountTotal", requests.length);
14870                    var typeKeys = Object.keys(types);
14871
14872                    for (var typeIndex = 0; typeIndex < typeKeys.length; typeIndex++) {
14873                        var type = typeKeys[typeIndex];
14874
14875                        that.LogPerformanceData(source + "RequestCount" + type, (CategorizeResourceRequests(requests, {
14876                            from: null,
14877                            requestType: types[type]
14878                        })).length);
14879                    }
14880                    if (requests.length > 0) {
14881                        that.LogPerformanceData(source + "RequestDownloadTime", Math.round(requests.reduce(function(sum, currentVal) {
14882                            return sum + currentVal.duration;
14883                        }, 0) / requests.length));
14884                        var files = JSON.stringify(requests.map(function(timing) {
14885                            return {
14886                                name: ((((timing.name.split("/")).map(function(urlToken) {
14887                                    return (urlToken.split("?"))[0];
14888                                })).filter(function(urlToken) {
14889                                    return urlToken && urlToken.length > 0;
14890                                })).slice(-1))[0].replace(/\(.*?\)/g, '()'),
14891                                startTime: Math.round(timing.startTime),
14892                                duration: Math.round(timing.duration)
14893                            };
14894                        }));
14895
14896                        that.LogPerformanceData(source + "RequestNames", files);
14897                    }
14898                }
14899                isW3cResourceTimingCollected = true;
14900            }
14901        };
14902        function CategorizeResourceRequests(requests, categorizer) {
14903            var ret = [];
14904
14905            for (var index = 0; index < requests.length; index++) {
14906                var request = requests[index];
14907
14908                if ((!categorizer.from || categorizer.from(request)) && (!categorizer.requestType || categorizer.requestType(request))) {
14909                    ret.push(request);
14910                }
14911            }
14912            return ret;
14913        }
14914        ;
14915        function GetW3cTimingName(timingName) {
14916            return 'W3c' + (timingName.charAt(0)).toUpperCase() + timingName.slice(1);
14917        }
14918        ;
14919        function GetWindowPerfTimingObject() {
14920            var perfObject = window.self["performance"];
14921
14922            if (IsNullOrUndefined(perfObject)) {
14923                return null;
14924            }
14925            var timingObject = perfObject.timing;
14926
14927            if (IsNullOrUndefined(timingObject)) {
14928                return null;
14929            }
14930            return timingObject;
14931        }
14932        ;
14933        function GetPerfResourcesTimingObject(biframe, index) {
14934            var perfObject = null;
14935
14936            try {
14937                if (biframe) {
14938                    var iFrames = document.getElementsByTagName("iframe");
14939
14940                    perfObject = iFrames & iFrames.length > index ? iFrames[index].contentWindow["performance"] : null;
14941                }
14942                else {
14943                    perfObject = window.self["performance"];
14944                }
14945            }
14946            catch (e) { }
14947            if (IsNullOrUndefined(perfObject)) {
14948                return null;
14949            }
14950            var timingObject = perfObject.getEntriesByType("resource");
14951
14952            if (IsNullOrUndefined(timingObject)) {
14953                return null;
14954            }
14955            return timingObject;
14956        }
14957        ;
14958        function ResolveMDSTimingName(mdsIndex) {
14959            switch (mdsIndex) {
14960            case 0:
14961                return 'MDSDownloadStart';
14962            case 1:
14963            case 2:
14964                return 'MDSParseDeltaStart';
14965            case 3:
14966                return 'MDSParseDeltaEnd';
14967            case 4:
14968                return 'MDSGCStart';
14969            case 5:
14970                return 'MDSGCEnd';
14971            case 6:
14972            case 7:
14973            case 8:
14974                return 'MDSCSSStart';
14975            case 9:
14976                return 'MDSCSSEnd';
14977            case 10:
14978                return 'MDSInnerHTMLStart';
14979            case 11:
14980            case 12:
14981                return 'MDSScriptLoaderStart';
14982            case 13:
14983                return 'MDSScriptLoaderEnd';
14984            case 14:
14985                return 'MDSAnimationStart';
14986            case 15:
14987                return 'MDSAnimationEnd';
14988            case 16:
14989                return 'MDSParallelDownloadStart';
14990            case 17:
14991                return 'MDSParallelDownloadEnd';
14992            default:
14993                return null;
14994            }
14995        }
14996        ;
14997        function CheckLateReporting(metric) {
14998            if (dataState === PerformanceDataState.Uploaded || dataState === PerformanceDataState.TimeOut) {
14999                var reason = "Late Reported Data";
15000                var message = JSON.stringify(metric);
15001
15002                EnsureScriptFunc("sp.core.js", "SP.SlapiInternal", function() {
15003                    ReportErrors(reason, message);
15004                });
15005            }
15006        }
15007        ;
15008        function UploadPerfData() {
15009            if (IsNullOrUndefined(that.PerformanceData) || dataState != PerformanceDataState.ReadyToUpload && dataState != PerformanceDataState.TimeOut) {
15010                return;
15011            }
15012            if (IsNullOrUndefined(cacheLogger)) {
15013                return;
15014            }
15015            cacheLogger.WriteLog('RUMOne', that.GetPerformanceData(), true);
15016        }
15017        ;
15018        function ReportErrors(reason, message) {
15019            var slapiInternal = SP.SlapiInternal;
15020            var errorObj = new slapiInternal.RUMOneErrors();
15021
15022            errorObj.Reason = reason;
15023            errorObj.Message = message;
15024            if (IsNullOrUndefined(cacheLogger)) {
15025                return;
15026            }
15027            cacheLogger.WriteLog('RUMOneErrors', errorObj);
15028        }
15029        ;
15030        this.AddExpectedControl = function(control) {
15031            if (expectedControls.indexOf && expectedControls.indexOf(control) 
15031=== -1) {
15032                expectedControls.push(control);
15033            }
15034        };
15035        this.WriteEUPLBreakdown = function(euplBreakdown, overwrite) {
15036            if (euplBreakdown) {
15037                try {
15038                    var breakdown = JSON.parse(euplBreakdown);
15039
15040                    for (var key in breakdown) {
15041                        if (!breakdown.hasOwnProperty(key)) {
15042                            continue;
15043                        }
15044                        that.AddEUPLBreakdown(key, breakdown[key], overwrite);
15045                    }
15046                }
15047                catch (e) { }
15048            }
15049        };
15050        this.AddEUPLBreakdown = function(euplName, value, overwrite) {
15051            if (Boolean(euplName) && !IsNullOrUndefined(value)) {
15052                if (IsNullOrUndefined(euplBreakDown[euplName]) || overwrite) {
15053                    euplBreakDown[euplName] = value;
15054                }
15055            }
15056        };
15057        this.CheckControlTimeRequiredDataAvailable = function(perfLogger, controlData) {
15058            if (IsNullOrUndefined(perfLogger) || IsNullOrUndefined(controlData)) {
15059                return false;
15060            }
15061            var folderNav = perfLogger.GetPerformanceDataPropertyValue('FolderNav');
15062
15063            if (!IsNullOrUndefined(folderNav) && folderNav) {
15064                return true;
15065            }
15066            var pageTransitionType = perfLogger.GetPerformanceDataPropertyValue('PageTransitionType');
15067
15068            if (IsNullOrUndefined(pageTransitionType)) {
15069                return false;
15070            }
15071            if (pageTransitionType === 1) {
15072                var downloadStart = perfLogger.GetPerformanceDataPropertyValue('MDSDownloadStart');
15073
15074                if (IsNullOrUndefined(downloadStart)) {
15075                    return false;
15076                }
15077            }
15078            else {
15079                var navigationStart = perfLogger.GetPerformanceDataPropertyValue('W3cNavigationStart');
15080
15081                if (IsNullOrUndefined(navigationStart)) {
15082                    return false;
15083                }
15084            }
15085            return true;
15086        };
15087        this.ComputeControlRenderTime = function(perfLogger, controlData) {
15088            if (IsNullOrUndefined(perfLogger) || IsNullOrUndefined(controlData)) {
15089                return 0;
15090            }
15091            var folderNav = perfLogger.GetPerformanceDataPropertyValue('FolderNav');
15092
15093            if (!IsNullOrUndefined(folderNav) && folderNav) {
15094                return Number(controlData.EndTime) - Number(controlData.StartTime);
15095            }
15096            var pageTransitionType = perfLogger.GetPerformanceDataPropertyValue('PageTransitionType');
15097            var w3cNavigationStart = perfLogger.GetPerformanceDataPropertyValue('W3cNavigationStart');
15098            var downloadStart = perfLogger.GetPerformanceDataPropertyValue('MDSDownloadStart');
15099
15100            if (IsNullOrUndefined(controlData.ControlId) || IsNullOrUndefined(controlData.EndTime) || IsNullOrUndefined(pageTransitionType)) {
15101                return 0;
15102            }
15103            if (pageTransitionType === 1) {
15104                if (IsNullOrUndefined(downloadStart)) {
15105                    return 0;
15106                }
15107                return Number(controlData.EndTime) - Number(downloadStart);
15108            }
15109            if (pageTransitionType > 1 && pageTransitionType <= 4) {
15110                if (Boolean(controlData.StartTime)) {
15111                    return Number(controlData.EndTime) - Number(controlData.StartTime);
15112                }
15113                else {
15114                    if (IsNullOrUndefined(w3cNavigationStart)) {
15115                        return 0;
15116                    }
15117                    return Number(controlData.EndTime) - Number(w3cNavigationStart);
15118                }
15119            }
15120            return 0;
15121        };
15122    };
15123    PerformanceLogger.GetLogger = function() {
15124        if (!Flighting.VariantConfiguration.IsExpFeatureClientEnabled(517)) {
15125            return null;
15126        }
15127        if (typeof g_RUMOneLogger == "undefined" || IsNullOrUndefined(g_RUMOneLogger)) {
15128            if (typeof SP == "object" && typeof SP.CacheLogger == "object" && !IsNullOrUndefined(SP.CacheLogger)) {
15129                g_RUMOneLogger = new PerformanceLogger.Logger(SP.CacheLogger);
15130            }
15131            else {
15132                g_RUMOneLogger = new PerformanceLogger.Logger();
15133            }
15134        }
15135        return g_RUMOneLogger;
15136    };
15137}
15138var SPRUMLogger;
15139
15140function SPRUMLogger_module_def() {
15141    if (typeof SP.Performance == "undefined")
15142        SP.Performance = {};
15143    if (typeof SP.Performance.Log == "undefined") {
15144        SP.Performance.Log = function(logger) {
15145            var _rumlogger = new RUMDelta.Logger(logger);
15146            var _diTimerId = null;
15147
15148            this.UploadNonMDSPageLoadTelemetry = function(pageContext, endTime) {
15149                var startTime = GetW3CPageLoadStartTime();
15150
15151                if (Boolean(startTime)) {
15152                    var eupl = endTime - startTime;
15153                    var actionContext = GetActionContext(pageContext);
15154
15155                    _rumlogger.UploadRUMData(actionContext, startTime, 0, 0, 0, eupl);
15156                }
15157            };
15158            var GetPageContextInfo = function(propName) {
15159                if (typeof _spPageContextInfo != "undefined" && Boolean(_spPageContextInfo) && Boolean(_spPageContextInfo[propName])) {
15160                    var propVal = _spPageContextInfo[propName];
15161
15162                    if (Boolean(propVal)) {
15163                        return propVal;
15164                    }
15165                }
15166                return null;
15167            };
15168            var GetActionContext = function(pageContext) {
15169                var actionContext = (RUMDelta.Application.SharePoint << 16) + pageContext;
15170
15171                return actionContext;
15172            };
15173            var GetW3CPageLoadStartTime = function() {
15174                var SP_PLTStart = 0;
15175
15176                if (typeof performance != "undefined" && typeof performance.timing != "undefined") {
15177                    var _pt = performance.timing;
15178
15179                    SP_PLTStart = Number(_pt.navigationStart);
15180                    if (SP_PLTStart == 0)
15181                        SP_PLTStart = Number(_pt.redirectStart);
15182                    if (SP_PLTStart == 0)
15183                        SP_PLTStart = Number(_pt.fetchStart);
15184                }
15185                return SP_PLTStart;
15186            };
15187
15188            this.UploadFileXferTelemetry = function(source, startTime, endTime, byteCount) {
15189                var downloadType = -1;
15190
15191                if (source.toLowerCase() == "wacdownload")
15192                    downloadType = 1;
15193                else if (source.toLowerCase() == "download")
15194                    downloadType = 2;
15195                if (downloadType != -1) {
15196                    var action = typeof RUMDelta.Application.SharePointFileXfer != "undefined" ? RUMDelta.Application.SharePointFileXfer : 3;
15197                    var actionContext = (action << 16) + downloadType;
15198
15199                    _rumlogger.UploadRUMData(actionContext, startTime, 0, 0, byteCount, endTime - startTime);
15200                }
15201            };
15202        };
15203    }
15204}
15205var SPLoggers;
15206
15207function SPLoggers_module_def() {
15208    if (typeof SP.ReadyToUploadLogs != "undefined")
15209        return;
15210    SP.ReadyToUploadLogs = function() {
15211    };
15212    var spUploader = function(uploadFunc) {
15213        var defaultUploader = null;
15214
15215        this.CanUpload = function() {
15216            return null != defaultUploader;
15217        };
15218        this.OnLog = function() {
15219            if (null != defaultUploader)
15220                defaultUploader.OnLog();
15221        };
15222        this.OnUpload = function() {
15223            if (null != defaultUploader)
15224                defaultUploader.OnUpload();
15225        };
15226        SP.ReadyToUploadLogs = function() {
15227            if (null != defaultUploader)
15228                return;
15229            defaultUploader = new CacheLogger.DefaultUploader(uploadFunc);
15230            setTimeout(uploadFunc, 0);
15231        };
15232    };
15233    var useParent = false;
15234
15235    try {
15236        useParent = window.parent != null && typeof window.parent.SP == "object" && typeof window.parent.SP.CacheLogger == "object" && window.parent.location.protocol == window.location.protocol && window.parent.location.host == window.location.host;
15237    }
15238    catch (exParentWindow) { }
15239    if (useParent) {
15240        var parentObj = window.parent;
15241
15242        SP.DebugLogger = new DebugLogger.Logger(25, parentObj.SP.CacheLogger);
15243        SP.QoS = new QoSLogger.Logger(parentObj.SP.CacheLogger, SP.DebugLogger);
15244    }
15245    else {
15246        SP.CacheLogger = new CacheLogger.Logger("SPCacheLogger", BaseLogger.GetLogger(), spUploader);
15247        SP.DebugLogger = new DebugLogger.Logger(25, SP.CacheLogger);
15248        SP.QoS = new QoSLogger.Logger(SP.CacheLogger, SP.DebugLogger);
15249    }
15250    var baseLogger = {
15251        WriteLog: function(eventName, dictProperties) {
15252            SP.CacheLogger.WriteLog(eventName, dictProperties, true);
15253        },
15254        UploadData: function() {
15255        }
15256    };
15257    var spRUMLogger;
15258
15259    SP.Performance.Log.GetLogger = function() {
15260        if (spRUMLogger == null) {
15261            spRUMLogger = new SP.Performance.Log(baseLogger);
15262        }
15263        return spRUMLogger;
15264    };
15265}
15266function _WriteDocEngagement(teamSiteTag, oneDriveTag, dictProperties) {
15267    var context = window["ctx"];
15268
15269    if (context != null && (Boolean(context.RealSiteTemplateId) ? context.RealSiteTemplateId === 21 : context.SiteTemplateId === 21)) {
15270        SP.QoS.WriteUserEngagement(oneDriveTag, dictProperties);
15271    }
15272    else {
15273        SP.QoS.WriteUserEngagement(teamSiteTag, dictProperties);
15274    }
15275}
15276function _WriteDocDebugLog(teamSiteTag, oneDriveTag, level, e) {
15277    var context = window["ctx"];
15278
15279    if (context != null && (Boolean(context.RealSiteTemplateId) ? context.RealSiteTemplateId === 21 : context.SiteTemplateId === 21)) {
15280        SP.DebugLogger.Write(oneDriveTag, level, e);
15281    }
15282    else {
15283        SP.DebugLogger.Write(teamSiteTag, level, e);
15284    }
15285}
15286function _WriteDocStartTag(teamSiteTag, oneDriveTag) {
15287    _WriteDocEngagement(teamSiteTag, oneDriveTag);
15288}
15289function _WriteDocSuccessTag(teamSiteTag, oneDriveTag) {
15290    _WriteDocEngagement(teamSiteTag, oneDriveTag);
15291}
15292function _WriteDocFailureTag(teamSiteTag, oneDriveTag) {
15293    _WriteDocEngagement(teamSiteTag, oneDriveTag);
15294}
15295function WriteDebugLogWithEventArgs(tag, args) {
15296    SP.DebugLogger.Write(tag, SP.DebugLogger.LoggingLevel.Interesting, getLoggingInfo(args));
15297}
15298var getLoggingInfo;
15299var addToInfoIfExists;
15300var _WOPIDocLoaded;
15301var SetWOPIDocLoaded;
15302var _TelemetryEndTime;
15303var UploadFileXferTelemetry;
15304var ReadyToUploadLogs;
15305
15306function RumNonMDSHandler() {
15307    setTimeout(CollectRUMNonMDS, 0);
15308}
15309var SPThemeUtils;
15310
15311function SPThemeUtils_module_def() {
15312    SPThemeUtils.ApplyCurrentTheme = ApplyCurrentTheme;
15313    SPThemeUtils.ClearThemeCache = ClearThemeCache;
15314    SPThemeUtils.GetCurrentStyleSheetText = GetCurrentStyleSheetText;
15315    SPThemeUtils.GetCurrentThemeCacheToken = GetCurrentThemeCacheToken;
15316    SPThemeUtils.GetSiteThemedCssFolderUrl = GetSiteThemedCssFolderUrl;
15317    SPThemeUtils.GetThemedStyleSheets = GetThemedStyleSheets;
15318    SPThemeUtils.GetThemeColor = GetThemeColor;
15319    SPThemeUtils.IsSiteThemed = IsSiteThemed;
15320    SPThemeUtils.LoadThemableResources = LoadThemableResources;
15321    SPThemeUtils.RegisterAllImages = RegisterAllImages;
15322    SPThemeUtils.RegisterCssReferences = RegisterCssReferences;
15323    SPThemeUtils.ReplaceCssTextForElement = ReplaceCssTextForElement;
15324    SPThemeUtils.SetThemeRetriever = SetThemeRetriever;
15325    SPThemeUtils.Suspend = SuspendTheming;
15326    SPThemeUtils.UseClientSideTheming = UseClientSideTheming;
15327    SPThemeUtils.UseShellThemes = UseShellThemes;
15328    SPThemeUtils.WhenThemeReady = WhenThemeReady;
15329    SPThemeUtils.WithCurrentTheme = WithCurrentTheme;
15330    SPThemeUtils.WithSiteTheme = WithSiteTheme;
15331    var strUndefined = "undefined";
15332    var _attrCssOriginalHref = "data-original-href";
15333    var _withTheme = WithSiteTheme;
15334
15335    function Complain(complaint) {
15336        if (typeof console !== strUndefined && typeof console.warn !== strUndefined)
15337            console.warn(complaint);
15338    }
15339    function SuspendTheming() {
15340        (GetPageManager()).SuspendTheming();
15341    }
15342    function FlightingAvailable() {
15343        return typeof Flighting !== strUndefined && typeof Flighting.VariantConfiguration !== strUndefined && typeof Flighting.VariantConfiguration.IsExpFeatureClientEnabled !== strUndefined;
15344    }
15345    function UseClientSideTheming() {
15346        var wtGroup = 64;
15347        var wtCommSite = 68;
15348        var wtSTS3 = "STS#3";
15349        var wt;
15350        var wtConfiguration;
15351        var featureEnabled = FlightingAvailable() && (Flighting.VariantConfiguration.IsExpFeatureClientEnabled(104) || Flighting.VariantConfiguration.IsExpFeatureClientEnabled(157) || Flighting.VariantConfiguration.IsExpFeatureClientEnabled(120) && ((wt = GetWebTemplate()) == wtGroup || wt == wtCommSite || (wtConfiguration = GetWebTemplateConfiguration()) == wtSTS3));
15352        var useCST = featureEnabled && typeof Theming !== strUndefined;
15353
15354        return useCST;
15355    }
15356    function UseShellThemes() {
15357        return UseClientSideTheming() && Flighting.VariantConfiguration.IsExpFeatureClientEnabled(107);
15358    }
15359    function GetPageManager() {
15360        return Theming.GetPageManager();
15361    }
15362    function GetCurrentStyleSheetText(styleSheetUrl) {
15363        return (GetPageManager()).GetCurrentStyleSheetText(styleSheetUrl);
15364    }
15365    function GetThemedStyleSheets() {
15366        return (GetPageManager()).GetThemedStyleSheets();
15367    }
15368    function GetThemeColor(colorSlot, opacity) {
15369        return (GetPageManager()).GetColorFromPalette(colorSlot, opacity);
15370    }
15371    function WhenImagesThemed(callback) {
15372        if (UseClientSideTheming())
15373            (GetPageManager()).WhenImagesThemed(callback);
15374        else
15375            callback();
15376    }
15377    function WhenThemeReady(callback) {
15378        if (UseClientSideTheming())
15379            (GetPageManager()).WhenReady(callback);
15380        else
15381            callback();
15382    }
15383    function GetResponseText(xhr) {
15384        var strResponseText;
15385
15386        try {
15387            strResponseText = xhr.responseText;
15388        }
15389        catch (exResponseText) { }
15390        return strResponseText;
15391    }
15392    function GetErrorPropertiesFromXHR(xhrError) {
15393        var errorProps = {
15394            PageCorrelation: window["g_correlationId"],
15395            PageURL: Nav.ajaxNavigate.get_href(),
15396            IsAppWeb: GetPageContextInfoProperty("isAppWeb"),
15397            XHR_Correlation: xhrError.getResponseHeader("SPRequestGuid"),
15398            XHR_Status: xhrError.status,
15399            WebTemplate: GetPageContextInfoProperty("webTemplate")
15400        };
15401
15402        return errorProps;
15403    }
15404    function RequestHeader(header, value) {
15405        this.header = header;
15406        this.value = value;
15407    }
15408    function WithLoadedXMLHttpRequest(url, xhrResultCallback, requestHeaders) {
15409        var req = new XMLHttpRequest();
15410
15411        req.onreadystatechange = function() {
15412            if (req != null && req.readyState != 4)
15413                return;
15414            xhrResultCallback(req);
15415            req = null;
15416        };
15417        try {
15418            req.open("GET", url, true);
15419            if (requestHeaders != null) {
15420                for (var i = 0; i < requestHeaders.length; i++) {
15421                    var rh = requestHeaders[i];
15422
15423                    req.setRequestHeader(rh.header, rh.value);
15424                }
15425            }
15426            req.send("");
15427        }
15428        catch (exSendRequest) {
15429            xhrResultCallback(req);
15430            req = null;
15431        }
15432    }
15433    function WithUrlContents(url, resultCallback, xhrErrorCallback, requestHeaders) {
15434        WithLoadedXMLHttpRequest(url, CallbackWithUrlContents, requestHeaders);
15435        function CallbackWithUrlContents(req) {
15436            var responseText = null;
15437
15438            if (req.status != 200 && Boolean(xhrErrorCallback)) {
15439                xhrErrorCallback(req);
15440            }
15441            else {
15442                if (req.status == 200) {
15443                    responseText = req.responseText;
15444                }
15445                resultCallback(responseText);
15446            }
15447        }
15448    }
15449    function WithUrlContentsMonitored(url, monitoredResultCallback, xhrMonitoredErrorCallback, requestHeaders, scenarioName, startTag, successTag, failureTag, noResultTag) {
15450        if (!scenarioName)
15451            scenarioName = "WithUrlContents";
15452        if (!startTag)
15453            startTag = scenarioName + "_Start";
15454        if (!successTag)
15455            successTag = scenarioName + "_Success";
15456        if (!failureTag)
15457            failureTag = scenarioName + "_Failure";
15458        if (!noResultTag)
15459            noResultTag = scenarioName + "_NoResult";
15460        var urlRequestMonitor = new SP.QoS.ScenarioMonitor(scenarioName, startTag, successTag, failureTag, noResultTag);
15461
15462        WithUrlContents(url, ResultCallbackForMonitoring, ErrorCallbackForMonitoring, _restHeaders);
15463        function ResultCallbackForMonitoring(strResult) {
15464            monitoredResultCallback(strResult, urlRequestMonitor);
15465            if (urlRequestMonitor != null) {
15466                urlRequestMonitor.Success();
15467                urlRequestMonitor.Dispose();
15468            }
15469        }
15470        function ErrorCallbackForMonitoring(xhrError) {
15471            if (Boolean(xhrMonitoredErrorCallback)) {
15472                xhrMonitoredErrorCallback(xhrError, urlRequestMonitor);
15473            }
15474            else if (urlRequestMonitor != null) {
15475                urlRequestMonitor.UnexpectedFailure();
15476                monitoredResultCallback(null, urlRequestMonitor);
15477                urlRequestMonitor.Dispose();
15478            }
15479        }
15480    }
15481    var _restHeaders = [new RequestHeader("Content-Type", "application/x-www-form-urlencoded"), new RequestHeader("ACCEPT", "application/json; odata = verbose")];
15482
15483    function WithRestValue(url, resultCallback, xhrErrorCallback) {
15484        WithUrlContents(url, resultCallback, xhrErrorCallback, _restHeaders);
15485    }
15486    function WithRestValueMonitored(url, monitoredResultCallback, xhrMonitoredErrorCallback, scenarioName, startTag, successTag, failureTag, noResultTag) {
15487        WithUrlContentsMonitored(url, monitoredResultCallback, xhrMonitoredErrorCallback, _restHeaders, scenarioName, startTag, successTag, failureTag, noResultTag);
15488    }
15489    function GetPageContextInfoProperty(propName) {
15490        var prop = null;
15491
15492        if (typeof _spPageContextInfo != 'undefined') {
15493            prop = _spPageContextInfo[propName];
15494        }
15495        return prop;
15496    }
15497    function GetCurrentLcid() {
15498        var lcid = Number(GetPageContextInfoProperty("currentLanguage"));
15499
15500        if (isNaN(lcid))
15501            lcid = 1033;
15502        return lcid;
15503    }
15504    function GetSiteThemeCacheToken() {
15505        return GetPageContextInfoProperty("themeCacheToken");
15506    }
15507    function GetSiteThemedCssFolderUrl() {
15508        return GetPageContextInfoProperty("themedCssFolderUrl");
15509    }
15510    function GetWebServerRelativeUrl() {
15511        var webUrl = GetPageContextInfoProperty("webServerRelativeUrl");
15512
15513        if (!Boolean(webUrl))
15514            webUrl = "/";
15515        return webUrl;
15516    }
15517    function GetWebTemplate() {
15518        var webTemplate = -1;
15519        var strWebTemplate = GetPageContextInfoProperty("webTemplate");
15520
15521        if (strWebTemplate != null) {
15522            webTemplate = parseInt(strWebTemplate);
15523        }
15524        return webTemplate;
15525    }
15526    function GetWebTemplateConfiguration() {
15527        var webTemplateConfiguration = null;
15528        var strWebTemplateConfiguration = GetPageContextInfoProperty("webTemplateConfiguration");
15529
15530        if (strWebTemplateConfiguration != null) {
15531            webTemplateConfiguration = strWebTemplateConfiguration;
15532        }
15533        return webTemplateConfiguration;
15534    }
15535    function UserCannotFetchTheme() {
15536        var SPBasePermissions_Open = 0x10000;
15537        var nonMDSPage = false;
15538
15539        try {
15540            nonMDSPage = !Nav.isMDSUrl(window.location.href);
15541        }
15542        catch (exIgnore) { }
15543        return nonMDSPage && GetPageContextInfoProperty("webPermMasks") != null && !UserHasPermissionLow(SPBasePermissions_Open);
15544    }
15545    function UserHasPermissionLow(permissionLevel) {
15546        var webPermMasks = GetPageContextInfoProperty("webPermMasks");
15547        var webPermMasksLow = webPermMasks != null ? Number(webPermMasks["Low"]) : 0;
15548        var hasPerm = (webPermMasksLow & permissionLevel) == permissionLevel;
15549
15550        return hasPerm;
15551    }
15552    function IsSiteThemed() {
15553        return GetSiteThemedCssFolderUrl() != null;
15554    }
15555    function ParseJsonOrUndefined(strJson) {
15556        var result;
15557
15558        if (strJson != null) {
15559            try {
15560                result = JSON.parse(strJson);
15561            }
15562            catch (exParsingJson) { }
15563        }
15564        return result;
15565    }
15566    var _key_ThemeCache = "SPThemeCache";
15567    var _key_ThemeCacheToken = "SPThemeCacheToken";
15568
15569    function ClearThemeCache() {
15570        BrowserStorage.local.removeItem(_key_ThemeCache);
15571        BrowserStorage.local.removeItem(_key_ThemeCacheToken);
15572    }
15573    function CacheTheme(strThemeData, cacheToken) {
15574        try {
15575            if (cacheToken != null && JSON.parse(strThemeData) != null) {
15576                BrowserStorage.local.setItem(_key_ThemeCache, strThemeData);
15577                BrowserStorage.local.setItem(_key_ThemeCacheToken, cacheToken);
15578            }
15579        }
15580        catch (exThemeDataParsing) { }
15581    }
15582    function GetCachedTheme() {
15583        var result = null;
15584        var currentCacheToken = GetSiteThemeCacheToken();
15585        var storedCacheToken = BrowserStorage.local.getItem(_key_ThemeCacheToken);
15586
15587        if (Boolean(storedCacheToken) && storedCacheToken == currentCacheToken) {
15588            result = BrowserStorage.local.getItem(_key_ThemeCache);
15589        }
15590        return result;
15591    }
15592    function GetCurrentThemeCacheToken() {
15593        return (GetPageManager()).GetCacheToken();
15594    }
15595    function ExtractThemeDataFromREST(strData) {
15596        var themeJson = null;
15597        var objRestData = ParseJsonOrUndefined(strData);
15598
15599        if (objRestData != null && objRestData.d != null)
15600            themeJson = objRestData.d.GetContextWebThemeData;
15601        return themeJson;
15602    }
15603    function ParseThemeData(strThemeData) {
15604        var themeInfo = null;
15605        var themeData = ParseJsonOrUndefined(strThemeData);
15606
15607        themeInfo = new Theming.ThemeInfo(themeData);
15608        return themeInfo;
15609    }
15610    function SetThemeRetriever(withTheme) {
15611        _withTheme = withTheme == null ? WithSiteTheme : withTheme;
15612    }
15613    function WithCurrentTheme(themeCallback, bForceLoad) {
15614        _withTheme(themeCallback, bForceLoad);
15615    }
15616    var _strThemeOverride = "ThemeOverride";
15617
15618    function WithSiteTheme(themeCallback, bForceLoad) {
15619        if (window["Theming"] == null || !bForceLoad && !Theming.Utilities.CanRecolorImages()) {
15620            themeCallback(null);
15621            return;
15622        }
15623        var overrideTheme = Nav.getUrlKeyValue(_strThemeOverride);
15624        var hasOverride = Boolean(overrideTheme);
15625        var cachedTheme = !hasOverride ? GetCachedTheme() : null;
15626
15627        if (cachedTheme == null && !UserCannotFetchTheme()) {
15628            var CombinePathFragments = Theming.Utilities.CombinePathFragments;
15629            var requestedTheme = hasOverride ? "&" + _strThemeOverride + "=" + encodeURIComponent(overrideTheme) : '';
15630            var themeDataUrl = CombinePathFragments(GetWebServerRelativeUrl(), '_api/SP.Web.GetContextWebThemeData?lcid=' + String(GetCurrentLcid()) + requestedTheme);
15631
15632            WithRestValueMonitored(themeDataUrl, CallbackWithCurrentTheme, ErrorLoadingCurrentTheme, "ClientSideTheming_FetchTheme", "ClientSideTheming_StartFetchTheme", "ClientSideTheming_SuccessFetchTheme", "ClientSideTheming_FailureFetchTheme");
15633        }
15634        else {
15635            themeCallback(ParseThemeData(cachedTheme));
15636        }
15637        function CallbackWithCurrentTheme(strTheme, monitor) {
15638            if (strTheme !== null) {
15639                var strData = ExtractThemeDataFromREST(strTheme);
15640
15641                if (!Boolean(strData)) {
15642                    monitor.UnexpectedFailure("ClientSideTheming_FetchTheme_InvalidResponse");
15643                    Complain("SPThemeUtils: Could not load theme data.");
15644                    strData = null;
15645                }
15646                else {
15647                    if (!Boolean(Nav.getUrlKeyValue(_strThemeOverride))) {
15648                        CacheTheme(strData, GetSiteThemeCacheToken());
15649                    }
15650                }
15651            }
15652            themeCallback(ParseThemeData(strData));
15653        }
15654        function ErrorLoadingCurrentTheme(xhrError, monitor) {
15655            var xhrStatusCode = xhrError.status;
15656
15657            if (xhrStatusCode == 401 || xhrStatusCode == 403) {
15658                monitor.ExpectedFailure("ClientSideTheming_FailureFetchTheme_Unauthorized", GetErrorPropertiesFromXHR(xhrError), GetResponseText(xhrError));
15659            }
15660            else {
15661                monitor.UnexpectedFailure(null, GetErrorPropertiesFromXHR(xhrError), GetResponseText(xhrError));
15662            }
15663            monitor.Dispose();
15664            themeCallback(ParseThemeData(null));
15665        }
15666    }
15667    function RegisterDefaultSharePointCss() {
15668        var linkElements = document.getElementsByTagName("link");
15669        var lElements = linkElements.length;
15670
15671        for (var i = 0; i < lElements; i++) {
15672            var linkElement = linkElements[i];
15673            var linkHref = linkElement.href;
15674
15675            if (linkHref != null && (linkHref.toUpperCase()).indexOf("/DEFAULTCSS.ASHX") >= 0) {
15676                var originalHref = linkElement.getAttribute(_attrCssOriginalHref);
15677
15678                (GetPageManager()).AddCssLink(linkHref, originalHref, linkElement);
15679                break;
15680            }
15681        }
15682    }
15683    function RegisterAllImages(bSync) {
15684        if (UseClientSideTheming()) {
15685            (GetPageManager()).RegisterAllImages(bSync);
15686        }
15687    }
15688    function MakeCSSRelativeUrl(originalUrl) {
15689        return Theming.Utilities.MakeFixupCallbackForCssFile(originalUrl);
15690    }
15691    function RegisterCssReferences(cssRefs) {
15692        if (!(window["OffSwitch"] == null || OffSwitch.IsActive("B11B9DA7-DAFA-4237-B593-ECBA1E3B888D")) && cssRefs != null) {
15693            var tmpLink = document.createElement("a");
15694
15695            for (var i = 0; i < cssRefs.length; i++) {
15696                var cssRef = cssRefs[i];
15697
15698                if (cssRef == null)
15699                    continue;
15700                var url = cssRef.Url;
15701                var originalUrl = cssRef.OriginalUrl;
15702                var id = cssRef.Id;
15703
15704                if (Boolean(url) && Boolean(id)) {
15705                    tmpLink.href = url;
15706                    var normalizedUrl = tmpLink.href;
15707                    var element = document.getElementById(id);
15708
15709                    if (element != null && element.href != normalizedUrl) {
15710                        cssRef.Url = element.href;
15711                        if (originalUrl == url) {
15712                            cssRef.OriginalUrl = element.href;
15713                        }
15714                    }
15715                }
15716            }
15717        }
15718        (GetPageManager()).RegisterCssReferences(cssRefs, null);
15719    }
15720    function RestoreCssLinksToOriginalUrls() {
15721        var linkElements = document.getElementsByTagName("link");
15722        var numLinks = linkElements.length;
15723
15724        for (var iLinkElement = 0; iLinkElement < numLinks; iLinkElement++) {
15725            var linkElement = linkElements[iLinkElement];
15726            var originalHrefValue = linkElement.getAttribute(_attrCssOriginalHref);
15727
15728            if (Boolean(originalHrefValue) && linkElement.rel != null && linkElement.rel.toLowerCase() == "stylesheet") {
15729                linkElement.href = originalHrefValue;
15730            }
15731        }
15732    }
15733    function RemoveElementFromDom(element) {
15734        if (element != null && element.parentNode != null)
15735            element = element.parentNode.removeChild(element);
15736        return element;
15737    }
15738    function OnWindowUnload(fn) {
15739        DOM.AddEventHandler(window, "onunload", fn, false);
15740    }
15741    function RemoveAllElementsWithId(elementId) {
15742        var removalAttempts = 100;
15743
15744        while (RemoveElementFromDom(document.getElementById(elementId)) && --removalAttempts >= 0) { }
15745    }
15746    function TemporaryStyle(elementId, cssText) {
15747        var _element = null;
15748
15749        RemoveAllElementsWithId(elementId);
15750        if (Boolean(cssText)) {
15751            _element = document.createElement("style");
15752            _element.type = "text/css";
15753            _element.id = elementId;
15754            Theming.ReplaceCssTextForElement(_element, cssText);
15755            var head = (document.getElementsByTagName("head"))[0];
15756
15757            _element = head.appendChild(_element);
15758            OnWindowUnload(Remove);
15759            setTimeout(Remove, 7000);
15760        }
15761        this.Remove = Remove;
15762        function Remove() {
15763            RemoveElementFromDom(_element);
15764            _element = null;
15765        }
15766    }
15767    function CancelableLogger(strSuccess, strCanceled) {
15768        var _startTime = GetCurrentTime();
15769        var _logged = false;
15770
15771        this.cancel = function() {
15772            LogResult(true);
15773        };
15774        this.success = function() {
15775            LogResult(false);
15776        };
15777        function LogResult(bCanceled) {
15778            if (!_logged) {
15779                _logged = true;
15780                var timeSinceStart = GetCurrentTime() - _startTime;
15781
15782                if (!bCanceled) {
15783                    LogSuccess(strSuccess, timeSinceStart);
15784                }
15785                else {
15786                    LogFailure(strCanceled, timeSinceStart);
15787                }
15788            }
15789        }
15790        ;
15791    }
15792    var _cssThemeLogger;
15793    var _imagesThemeLogger;
15794    var _themingTimeout;
15795
15796    function CancelPendingLoggers() {
15797        if (_themingTimeout != null) {
15798            clearTimeout(_themingTimeout);
15799            _themingTimeout = null;
15800        }
15801        if (_cssThemeLogger != null) {
15802            _cssThemeLogger.cancel();
15803            _cssThemeLogger = null;
15804        }
15805        if (_imagesThemeLogger != null) {
15806            _imagesThemeLogger.cancel();
15807            _imagesThemeLogger = null;
15808        }
15809    }
15810    function ApplyCurrentTheme(hideContentWhileTheming) {
15811        var idThemingCurtain = "SPThemeHideForms";
15812
15813        if (UseClientSideTheming()) {
15814            var styleHideForms = new TemporaryStyle(idThemingCurtain, hideContentWhileTheming ? "form {opacity:0 !important}" : "");
15815            var styleHideImages = new TemporaryStyle("SPThemeHideImages", "img {opacity:0 !important}");
15816
15817            RegisterDefaultSharePointCss();
15818            _withTheme(function ApplyThemeInfo(themeInfo) {
15819                if (themeInfo == null) {
15820                    themeInfo = new Theming.ThemeInfo(null);
15821                }
15822                if (!Theming.Utilities.CanRecolorImages()) {
15823                    themeInfo.NoImageRecoloring = true;
15824                }
15825                CancelPendingLoggers();
15826                SuspendTheming();
15827                WhenThemeReady(styleHideForms.Remove);
15828                WhenImagesThemed(styleHideImages.Remove);
15829                if (!themeInfo.IsDefault) {
15830                    LogStart("ClientSideTheming_StartTheme");
15831                    _cssThemeLogger = new CancelableLogger("ClientSideTheming_SuccessTheme", "ClientSideTheming_FailureTheme_Cancel");
15832                    (GetPageManager()).WhenReady(_cssThemeLogger.success);
15833                    if (!themeInfo.NoImageRecoloring) {
15834                        LogStart("ClientSideTheming_StartThemeImages");
15835                        _imagesThemeLogger = new CancelableLogger("ClientSideTheming_SuccessThemeImages", "ClientSideTheming_FailureThemeImages_Cancel");
15836                        WhenImagesThemed(_imagesThemeLogger.success);
15837                    }
15838                }
15839                else {
15840                    var startTime = GetCurrentTime();
15841                    var capturedThemingTimeout = _themingTimeout = setTimeout(function() {
15842                        LogFailure("ClientSideTheming_FailureApplyDefault", GetCurrentTime() - startTime);
15843                    }, 1000);
15844
15845                    WhenThemeReady(function() {
15846                        clearTimeout(capturedThemingTimeout);
15847                    });
15848                }
15849                (GetPageManager()).SetTheme(themeInfo);
15850            });
15851            if (IsSiteThemed())
15852                LoadThemableResources();
15853        }
15854        else if (!(window["OffSwitch"] == null || OffSwitch.IsActive("DCF7FB71-8493-4615-8A9A-53F9E7ED0210"))) {
15855            RemoveAllElementsWithId(idThemingCurtain);
15856        }
15857    }
15858    function LoadThemableResources() {
15859        (GetPageManager()).LoadThemableResources();
15860    }
15861    function LogStart(tag) {
15862        SP.QoS.WriteStart(tag, null, SP.QoS.LogType.Diagnostic);
15863    }
15864    function LogSuccess(tag, duration) {
15865        SP.QoS.WriteSuccess(tag, null, SP.QoS.LogType.Diagnostic, duration);
15866    }
15867    function LogFailure(tag, duration) {
15868        SP.QoS.WriteFailure(tag, null, SP.QoS.LogType.Diagnostic, duration);
15869    }
15870    function GetCurrentTime() {
15871        return (new Date).getTime();
15872    }
15873    function RemoveChildNodes(element) {
15874        while (element.lastChild != null)
15875            element.removeChild(element.lastChild);
15876    }
15877    function TryReplaceStyleSheetCssText(element, newCss) {
15878        var success = false;
15879
15880        if (element != null) {
15881            try {
15882                if (typeof element.styleSheet != "undefined" && element.styleSheet != null && typeof element.styleSheet.cssText != "undefined") {
15883                    element.styleSheet.cssText = newCss;
15884                    success = true;
15885                }
15886            }
15887            catch (exCannotSetCssText) { }
15888        }
15889        return success;
15890    }
15891    function ReplaceCssTextForElement(element, newCss) {
15892        var success = TryReplaceStyleSheetCssText(element, newCss);
15893
15894        if (!success) {
15895            RemoveChildNodes(element);
15896            element.appendChild(document.createTextNode(newCss));
15897        }
15898    }
15899}
15900var SuiteNavRendering;
15901
15902function SuiteNavRendering_module_def() {
15903    var _jsProtocol = "javascript:";
15904    var c_defaultSuiteDataVersion = 2;
15905    var hasSiteSettingsMenuItem = false;
15906
15907    SuiteNavRenderingOptions.prototype = {
15908        brandingLogo: "",
15909        brandingLogoLink: "",
15910        brandingLogoTitle: "",
15911        brandingText: "",
15912        culture: "",
15913        dataEndpoint: "",
15914        signInLink: "",
15915        top: "",
15916        version: c_defaultSuiteDataVersion
15917    };
15918    function SuiteNavRenderingOptions() {
15919    }
15920    SuiteNavRendering.SuiteNavRenderingOptions = SuiteNavRenderingOptions;
15921    SuiteNavRendering.RenderSuiteNav = function RenderSuiteNav(renderingOptions) {
15922        var suiteLinksDiv = renderingOptions.top;
15923        var shellDataRestMethod = renderingOptions.dataEndpoint;
15924        var cultureName = renderingOptions.culture;
15925        var signInLink = renderingOptions.signInLink;
15926        var suiteDataVersion = renderingOptions.version;
15927
15928        if (!(suiteDataVersion > 0))
15929            suiteDataVersion = c_defaultSuiteDataVersion;
15930        if (!!shellDataRestMethod && !!cultureName) {
15931            shellDataRestMethod += (shellDataRestMethod.indexOf("?") < 0 ? "?" : "&") + "v=" + String(suiteDataVersion) + "&Locale=" + cultureName;
15932        }
15933        var additionalCssText = "";
15934        var suiteDataObject = null;
15935        var suiteNavThemingModuleDefined = window["SuiteNavTheming"] != null;
15936        var suiteIsThemed = SPThemeUtils.IsSiteThemed() || suiteNavThemingModuleDefined && SuiteNavTheming.GetSuiteNavThemeColorsOverride() != null;
15937
15938        if (suiteNavThemingModuleDefined) {
15939            SuiteNavTheming.WithSuiteThemingCss(function(suiteThemingCss) {
15940                additionalCssText = suiteThemingCss;
15941                if (suiteDataObject != null)
15942                    RenderSuiteNavWithData(suiteDataObject);
15943            });
15944        }
15945        WithSuiteNavData(function HandleSuiteNavData(suiteData) {
15946            suiteDataObject = suiteData;
15947            if (!suiteIsThemed || Boolean(additionalCssText)) {
15948                RenderSuiteNavWithData(suiteData);
15949            }
15950        }, shellDataRestMethod, suiteDataVersion);
15951        function RenderSuiteNavWithData(suiteData) {
15952            var o365Shell = window["O365Shell"];
15953
15954            if (o365Shell == null) {
15955                return;
15956            }
15957            var linksData = SuiteNavCommon.ExtractSuiteNavBarData(suiteData);
15958
15959            AddMenuItemsFromDOM(linksData);
15960            UpdateActiveLink(linksData);
15961            UpdateHelpLink(linksData);
15962            UpdateStringsAndBranding(linksData, renderingOptions);
15963            var helpLink = linksData.HelpLink;
15964
15965            if (helpLink != null && !Boolean(linksData.HelpLink.Text))
15966                linksData.HelpLink.Text = GetStsString("L_SuiteNav_Help_Link_Text");
15967            if (Boolean(linksData.UserDisplayName))
15968                linksData.IsAuthenticated = true;
15969            var objSignInLink = null;
15970
15971            if (!linksData.IsAuthenticated && Boolean(signInLink)) {
15972                objSignInLink = {
15973                    "Text": GetStsString("L_SuiteNav_SignIn"),
15974                    "Url": signInLink
15975                };
15976            }
15977            linksData.ClientData = JSON.stringify({
15978                "IsRTL": document.documentElement.getAttribute('dir') == "rtl",
15979                "IsFallbackShell": true,
15980                "ShowAppLauncherV3": true,
15981                "SignInLink": objSignInLink
15982            });
15983            RemoveEmtpyArraysFromSuiteNavData(linksData);
15984            o365Shell.SetData(linksData);
15985            var renderSettings = {
15986                "top": suiteLinksDiv,
15987                "layout": "Mouse"
15988            };
15989
15990            o365Shell.RenderSync(renderSettings, OnSuiteRendered, OnSuiteLoaded);
15991        }
15992        function OnSuiteLoaded() {
15993        }
15994        function OnSuiteRendered() {
15995            try {
15996                ThemeSuiteNav();
15997            }
15998            catch (exThemeSuiteNav) { }
15999        }
16000        function UpdateStringsAndBranding(linksData, opts) {
16001            var brandingLogo = opts.brandingLogo;
16002            var brandingLogoLink = opts.brandingLogoLink;
16003            var brandingLogoTitle = opts.brandingLogoTitle;
16004
16005            linksData.StringsOverride = MakeStringsOverride(opts.brandingText);
16006            if (brandingLogo) {
16007                if (!brandingLogoTitle) {
16008                    brandingLogoTitle = "";
16009                }
16010                linksData.HasTenantBranding = true;
16011                linksData.TenantLogoUrl = {
16012                    Title: brandingLogoTitle,
16013                    Url: brandingLogo
16014                };
16015                if (brandingLogoLink)
16016                    linksData.LogoNavigationUrl = brandingLogoLink;
16017            }
16018        }
16019        function ThemeSuiteNav() {
16020            var suiteNavRenderingDiv = document.getElementById(suiteLinksDiv);
16021
16022            CSSUtil.RemoveClass(suiteNavRenderingDiv, "ms-TopBarBackgroun
16022d-bgColor");
16023            if (Boolean(additionalCssText) && suiteNavRenderingDiv != null) {
16024                var firstChildOfSuiteLinksDiv = suiteNavRenderingDiv.firstChild;
16025                var styleElement = document.createElement("style");
16026
16027                styleElement.id = "SuiteNavThemeStyle";
16028                styleElement.type = "text/css";
16029                SPThemeUtils.ReplaceCssTextForElement(styleElement, additionalCssText);
16030                if (firstChildOfSuiteLinksDiv != null) {
16031                    suiteNavRenderingDiv.insertBefore(styleElement, firstChildOfSuiteLinksDiv);
16032                }
16033                else {
16034                    suiteNavRenderingDiv.appendChild(styleElement);
16035                }
16036            }
16037        }
16038    };
16039    LinkData.prototype.TargetWindow = "";
16040    LinkData.prototype.Text = "";
16041    LinkData.prototype.Url = "";
16042    function LinkData() {
16043    }
16044    function GetStsString(locKey) {
16045        var stsStrings = typeof Strings != "undefined" && Strings.STS != null ? Strings.STS : {};
16046
16047        return stsStrings[locKey];
16048    }
16049    var c_stringsOverride = MakeStringsOverride();
16050
16051    function MakeStringsOverride(productName) {
16052        if (!productName)
16053            productName = GetStsString("L_SuiteNav_ProductName");
16054        return {
16055            "l_ShellCore_App_Provision_Alt_Text": GetStsString("L_SuiteNav_App_Provision_Alt_Text"),
16056            "l_ShellCore_App_Provision_Text": GetStsString("L_SuiteNav_App_Provision_Text"),
16057            "l_ShellCore_ContextualTitleFormat_Text": GetStsString("L_SuiteNav_ContextualTitleFormat_Text"),
16058            "l_ShellCore_Help_Title_Text": GetStsString("L_SuiteNav_Help_Title_Text"),
16059            "l_ShellCore_MeTile_Title_Text": GetStsString("L_OpenMenu_Text"),
16060            "l_ShellCore_NavMenu_MyApps_Text": GetStsString("L_SuiteNav_NavMenu_MyApps_Text"),
16061            "l_ShellCore_NavMenu_Title_Text": GetStsString("L_SuiteNav_NavMenu_Title_Text"),
16062            "l_ShellCore_O365_Text": productName,
16063            "l_ShellCore_O365_Title_Text": "",
16064            "l_ShellCore_Settings_Title_Text": GetStsString("L_SuiteNav_Settings_Title_Text")
16065        };
16066    }
16067    SuiteNavData.prototype.AboutMeLink = null;
16068    SuiteNavData.prototype.ClientData = "";
16069    SuiteNavData.prototype.CurrentMainLinkElementID = "";
16070    SuiteNavData.prototype.CurrentWorkloadHelpSubLinks = [];
16071    SuiteNavData.prototype.CurrentWorkloadSettingsSubLinks = [];
16072    SuiteNavData.prototype.CurrentWorkloadUserSubLinks = [];
16073    SuiteNavData.prototype.HelpLink = null;
16074    SuiteNavData.prototype.IsAuthenticated = false;
16075    SuiteNavData.prototype.PinnedApps = null;
16076    SuiteNavData.prototype.SignOutLink = null;
16077    SuiteNavData.prototype.StringsOverride = c_stringsOverride;
16078    SuiteNavData.prototype.UserDisplayName = null;
16079    SuiteNavData.prototype.WorkloadLinks = null;
16080    function SuiteNavData() {
16081        var _this = this;
16082
16083        _this.CurrentWorkloadHelpSubLinks = [];
16084        _this.CurrentWorkloadSettingsSubLinks = [];
16085        _this.CurrentWorkloadUserSubLinks = [];
16086        _this.HelpLink = new LinkData;
16087        _this.SignOutLink = new LinkData;
16088    }
16089    SuiteData.prototype.DoNotCache = false;
16090    SuiteData.prototype.NavBarData = null;
16091    SuiteData.prototype.SPSuiteVersion = c_defaultSuiteDataVersion;
16092    function SuiteData() {
16093        this.NavBarData = new SuiteNavData;
16094    }
16095    SuiteNavRendering.SuiteNavData = SuiteNavData;
16096    function IsNullOrEmptyArray(arrValue) {
16097        return arrValue == null || !(arrValue.length > 0);
16098    }
16099    function RemoveEmtpyArraysFromSuiteNavData(linksData) {
16100        var propsToCheck = ["CurrentWorkloadHelpSubLinks", "CurrentWorkloadSettingsSubLinks", "CurrentWorkloadUserSubLinks", "PinnedApps", "WorkloadLinks"];
16101        var lPropsToCheck = propsToCheck.length;
16102
16103        for (var iProp = 0; iProp < lPropsToCheck; iProp++) {
16104            var propNameToCheck = propsToCheck[iProp];
16105
16106            if (IsNullOrEmptyArray(linksData[propNameToCheck]))
16107                linksData[propNameToCheck] = null;
16108        }
16109    }
16110    function GenerateDefaultSuiteNavData() {
16111        var defaultSuiteData = new SuiteData;
16112
16113        defaultSuiteData.DoNotCache = true;
16114        return defaultSuiteData;
16115    }
16116    function MakeSuiteNavDataLoader(shellDataRestMethod, onDataLoadError) {
16117        function SuiteNavDataLoader(resultCallback) {
16118            if (Boolean(shellDataRestMethod)) {
16119                var shellDataRestUrl = "/_api/" + shellDataRestMethod;
16120
16121                if (typeof _spPageContextInfo != "undefined") {
16122                    var webServerRelativeUrl = _spPageContextInfo.webServerRelativeUrl;
16123
16124                    if (Boolean(webServerRelativeUrl))
16125                        shellDataRestUrl = Nav.combineUrl(webServerRelativeUrl, shellDataRestUrl);
16126                }
16127                RequestUtil.WithRestValue(function(strShellData) {
16128                    var strSuiteData;
16129
16130                    try {
16131                        var parsedResponse = JSON.parse(strShellData);
16132
16133                        strSuiteData = parsedResponse.d.GetSuiteNavData;
16134                    }
16135                    catch (exParseShellData) {
16136                        if (onDataLoadError != null) {
16137                            onDataLoadError("ParseResponse");
16138                        }
16139                    }
16140                    if (!strSuiteData) {
16141                        var defaultSuiteData = GenerateDefaultSuiteNavData();
16142
16143                        strSuiteData = JSON.stringify(defaultSuiteData);
16144                    }
16145                    resultCallback(strSuiteData);
16146                }, shellDataRestUrl);
16147            }
16148            else {
16149                resultCallback(JSON.stringify(GenerateDefaultSuiteNavData()));
16150            }
16151        }
16152        return SuiteNavDataLoader;
16153    }
16154    function WithSuiteNavData(shellDataCallback, shellDataRestMethod, suiteVersion) {
16155        var monitorName = "SuiteNavRendering_LoadData";
16156        var suiteNavDataMonitor = new SP.QoS.ScenarioMonitor(monitorName, monitorName + "_Start", monitorName + "_Success", monitorName + "_Failure", monitorName + "_NoResult");
16157        var loadSuiteNavData = MakeSuiteNavDataLoader(shellDataRestMethod, function(errorType) {
16158            suiteNavDataMonitor.UnexpectedFailure(monitorName + "_Fail" + errorType);
16159        });
16160
16161        SuiteNavCommon.GetSuiteLinks(loadSuiteNavData, function(strSuiteNavData) {
16162            var suiteNavData = null;
16163
16164            try {
16165                suiteNavData = JSON.parse(strSuiteNavData);
16166                if (suiteNavData == null) {
16167                    suiteNavData = GenerateDefaultSuiteNavData();
16168                }
16169                suiteNavDataMonitor.Success();
16170            }
16171            catch (exParseNavData) {
16172                suiteNavDataMonitor.UnexpectedFailure(monitorName + "_FailParseData");
16173            }
16174            suiteNavDataMonitor.Dispose();
16175            shellDataCallback(suiteNavData);
16176        }, suiteVersion);
16177    }
16178    function ExtractItemsFromMenu(menuElement, itemsContainer, linksData) {
16179        function UrlFromOnclick(clickHandler) {
16180            if (clickHandler == null) {
16181                return clickHandler;
16182            }
16183            else {
16184                clickHandler = (clickHandler.replace(/^javascript:/i, "")).replace(/return (true|false);?$/i, "");
16185                return _jsProtocol + "SuiteOnClick(" + Encoding.ScriptEncodeWithQuote(clickHandler) + ")";
16186            }
16187        }
16188        function MenuItemToLinkData(domMenuItem) {
16189            return {
16190                "Id": "SuiteMenu_" + domMenuItem.id,
16191                "MenuName": null,
16192                "Sublinks": null,
16193                "TargetWindow": null,
16194                "Text": domMenuItem.getAttribute("text"),
16195                "Url": UrlFromOnclick(domMenuItem.getAttribute("onmenuclick"))
16196            };
16197        }
16198        if (menuElement != null) {
16199            var menuItems = menuElement.getElementsByTagName("ie:menuitem");
16200
16201            if (menuItems == null || menuItems.length == 0)
16202                menuItems = menuElement.getElementsByTagName("menuitem");
16203            var lMenuItems = menuItems.length;
16204            var previousGroupId;
16205
16206            for (var iMenuItem = 0; iMenuItem < lMenuItems; iMenuItem++) {
16207                var menuItem = menuItems[iMenuItem];
16208                var hiddenScript = menuItem.getAttribute("hidden");
16209                var itemHidden = hiddenScript != null && Boolean(eval(hiddenScript));
16210                var itemType = menuItem.getAttribute("type");
16211
16212                if (menuItem.id.indexOf("ID_PersonalInformation") > 0) {
16213                    hasSiteSettingsMenuItem = true;
16214                    itemHidden = itemHidden || linksData.AboutMeLink != null;
16215                }
16216                else if (menuItem.id.indexOf("ID_AboutMe") >= 0) {
16217                    if (linksData.AboutMeLink == null) {
16218                        linksData.AboutMeLink = MenuItemToLinkData(menuItem);
16219                    }
16220                    continue;
16221                }
16222                if (!itemHidden && itemType == "option") {
16223                    var groupId = menuItem.getAttribute("menugroupid");
16224
16225                    if (previousGroupId !== groupId) {
16226                        if (previousGroupId != null) {
16227                            itemsContainer.push(null);
16228                        }
16229                        previousGroupId = groupId;
16230                    }
16231                    itemsContainer.push(MenuItemToLinkData(menuItem));
16232                }
16233            }
16234        }
16235    }
16236    SuiteNavRendering.AddMenuItemsFromDOM = AddMenuItemsFromDOM;
16237    function AddMenuItemsFromDOM(linksData) {
16238        if (linksData.UserDisplayName == null) {
16239            var userNameDiv = document.getElementById("SuiteNavUserName");
16240
16241            if (userNameDiv != null && Boolean(userNameDiv.textContent)) {
16242                linksData.UserDisplayName = userNameDiv.textContent;
16243            }
16244        }
16245        var scriptEncodedSlashUppercase = "\\U002F";
16246        var menuItems = {
16247            welcomeItems: [],
16248            settingsItems: []
16249        };
16250        var menuData = document.getElementById("suiteMenuData");
16251
16252        if (menuData == null) {
16253            return;
16254        }
16255        var menus = menuData.getElementsByTagName("menu");
16256        var itemsContainer = menuItems.welcomeItems;
16257        var lMenus = menus.length;
16258
16259        hasSiteSettingsMenuItem = false;
16260        for (var iMenu = 0; iMenu < lMenus; iMenu++) {
16261            var menu = menus[iMenu];
16262
16263            if (menu.id.indexOf("PersonalActionMenu") >= 0) {
16264                if (linksData.CurrentWorkloadUserSubLinks == null) {
16265                    linksData.CurrentWorkloadUserSubLinks = [];
16266                }
16267                var currentWorkloadUserSubLinks = linksData.CurrentWorkloadUserSubLinks;
16268                var userMenuLinks = [];
16269
16270                ExtractItemsFromMenu(menu, userMenuLinks, linksData);
16271                var lUserLinks = userMenuLinks.length;
16272
16273                for (var iUserLink = 0; iUserLink < lUserLinks; iUserLink++) {
16274                    var linkData = userMenuLinks[iUserLink];
16275                    var uppercaseUrl = "";
16276
16277                    if (linkData != null && Boolean(linkData)) {
16278                        uppercaseUrl = linkData.Url.toUpperCase();
16279                    }
16280                    if (uppercaseUrl.indexOf(scriptEncodedSlashUppercase + "SIGNOUT.ASPX") >= 0) {
16281                        if (linksData.SignOutLink != null) {
16282                            linksData.SignOutLink.Url = linkData.Url;
16283                            if (!Boolean(linksData.SignOutLink.Text))
16284                                linksData.SignOutLink.Text = linkData.Text;
16285                        }
16286                    }
16287                    else if (uppercaseUrl.indexOf(scriptEncodedSlashUppercase + "PERSON.ASPX") >= 0) {
16288                        if (linksData.AboutMeLink == null)
16289                            linksData.AboutMeLink = linkData;
16290                    }
16291                    else {
16292                        currentWorkloadUserSubLinks.push(linkData);
16293                    }
16294                }
16295            }
16296            else if (menu.id.indexOf("SiteActionsMenu") >= 0) {
16297                if (linksData.CurrentWorkloadSettingsSubLinks == null) {
16298                    linksData.CurrentWorkloadSettingsSubLinks = [];
16299                }
16300                ExtractItemsFromMenu(menu, linksData.CurrentWorkloadSettingsSubLinks, linksData);
16301            }
16302        }
16303        if (Boolean(linksData.AboutMeLink) && Boolean(window["_spPageContextInfo"]) && !Boolean(_spPageContextInfo["ProfileUrl"])) {
16304            _spPageContextInfo["ProfileUrl"] = linksData.AboutMeLink.Url;
16305        }
16306        if (!hasSiteSettingsMenuItem)
16307            linksData.AboutMeLink = null;
16308    }
16309    SuiteNavRendering.UpdateHelpLink = UpdateHelpLink;
16310    function UpdateHelpLink(linksData) {
16311        var helpKey = typeof g_navBarHelpDefaultKey == "undefined" ? "HelpHome" : g_navBarHelpDefaultKey;
16312
16313        if (linksData.HelpLink != null) {
16314            linksData.HelpLink.Url = _jsProtocol + "TopHelpButtonClick(" + Encoding.ScriptEncodeWithQuote(helpKey) + ")";
16315            linksData.HelpLink.TargetWindow = "";
16316        }
16317    }
16318    SuiteNavRendering.GetWebTemplate = GetWebTemplate;
16319    function GetWebTemplate() {
16320        var webTemplate = -1;
16321
16322        if (typeof _spPageContextInfo != "undefined") {
16323            webTemplate = parseInt(_spPageContextInfo.webTemplate);
16324        }
16325        return webTemplate;
16326    }
16327    SuiteNavRendering.UpdateActiveLink = UpdateActiveLink;
16328    function UpdateActiveLink(navData) {
16329        var _allDocumentsLinkId = "ShellDocuments";
16330        var _allSitesLinkId = "ShellSites";
16331        var _defaultLinkId = "ShellSharepoint";
16332        var _mySiteHostWebTemplate = 54;
16333        var _mySitePersonalWebTemplate = 21;
16334        var _groupsWebTemplate = 64;
16335        var _adminLinkId = "ShellAdmin";
16336        var _newsfeedLinkId = "ShellNewsfeed";
16337        var _newsfeedLinkIdRegex = /^(?:Shell)?Newsfeed$/i;
16338        var _projectLinkId = "ShellProject";
16339        var _videoLinkId = "ShellVideo";
16340        var _adminSiteWebTemplate = 16;
16341        var _projectWebAppTemplate = 6221;
16342        var _mySiteDocumentLibraryListTemplateID = 700;
16343        var _hubWebTemplate = 65;
16344
16345        if (navData == null) {
16346            return;
16347        }
16348        var _newsfeedOrSitesLinkId = (function() {
16349            var iLinks, wLinks = navData.WorkloadLinks || [];
16350
16351            for (iLinks = 0; iLinks < wLinks.length; iLinks++)
16352                if (wLinks[iLinks].Id === _newsfeedLinkId)
16353                    return _newsfeedLinkId;
16354            var aLinks = navData.PinnedApps || [];
16355
16356            for (iLinks = 0; iLinks < aLinks.length; iLinks++)
16357                if (_newsfeedLinkIdRegex.test(aLinks[iLinks].Id))
16358                    return _newsfeedLinkId;
16359            return _allSitesLinkId;
16360        })();
16361        var webTemplate = GetWebTemplate();
16362        var uri;
16363        var urlPath;
16364
16365        switch (webTemplate) {
16366        case _adminSiteWebTemplate:
16367            navData.CurrentMainLinkElementID = _adminLinkId;
16368            break;
16369        case _mySiteHostWebTemplate:
16370            navData.CurrentMainLinkElementID = _newsfeedOrSitesLinkId;
16371            uri = new URI(Nav.ajaxNavigate.get_href());
16372            urlPath = uri.getPath(true);
16373            if (Boolean(urlPath)) {
16374                if ((urlPath.toLowerCase()).endsWith("/mybraryfirstrun.aspx")) {
16375                    navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16376                }
16377            }
16378            break;
16379        case _projectWebAppTemplate:
16380            navData.CurrentMainLinkElementID = _projectLinkId;
16381            break;
16382        case _hubWebTemplate:
16383            if (document.getElementById('O365VideoPage') != null) {
16384                navData.CurrentMainLinkElementID = _videoLinkId;
16385            }
16386            else {
16387                navData.CurrentMainLinkElementID = _allSitesLinkId;
16388            }
16389            break;
16390        case _mySitePersonalWebTemplate:
16391            if (typeof g_wsaListTemplateId != "unde
16391fined" && g_wsaListTemplateId == _mySiteDocumentLibraryListTemplateID) {
16392                navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16393            }
16394            else {
16395                navData.CurrentMainLinkElementID = _newsfeedOrSitesLinkId;
16396                uri = new URI(Nav.ajaxNavigate.get_href());
16397                urlPath = uri.getPath(true);
16398                if (Boolean(urlPath)) {
16399                    urlPath = urlPath.toLowerCase();
16400                    if (urlPath.endsWith("/social/followedcontent.aspx")) {
16401                        navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16402                    }
16403                    else if (urlPath.endsWith("/social/sites.aspx")) {
16404                        navData.CurrentMainLinkElementID = _allSitesLinkId;
16405                    }
16406                    else if (urlPath.endsWith("/social/sitesdocuments.aspx")) {
16407                        navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16408                    }
16409                    else if (urlPath.endsWith("/mybraryfirstrun.aspx")) {
16410                        navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16411                    }
16412                    else if (urlPath.endsWith("/groupdocuments.aspx")) {
16413                        navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16414                    }
16415                }
16416            }
16417            break;
16418        case _groupsWebTemplate:
16419            uri = new URI(Nav.ajaxNavigate.get_href());
16420            urlPath = uri.getPath(true);
16421            if (Boolean(urlPath) && (urlPath.toLowerCase()).endsWith("/groupsdocuments.aspx")) {
16422                navData.CurrentMainLinkElementID = _allDocumentsLinkId;
16423            }
16424            else {
16425                navData.CurrentMainLinkElementID = _defaultLinkId;
16426            }
16427            break;
16428        default:
16429            navData.CurrentMainLinkElementID = _allSitesLinkId;
16430            break;
16431        }
16432    }
16433}
16434var ModuleLink;
16435
16436function ModuleLink_module_def() {
16437    var manifestRequestMap = {};
16438    var configuredRequireJS = false;
16439
16440    ModuleLink.loadManifest = function(manifestName, scenarioName, callback) {
16441        if (typeof scenarioName === "function") {
16442            callback = scenarioName;
16443            scenarioName = void 0;
16444        }
16445        else if (typeof callback !== "function") {
16446            callback = function() {
16447            };
16448        }
16449        ensureRequireJS(function() {
16450        });
16451        if (!Boolean(manifestRequestMap[manifestName])) {
16452            manifestRequestMap[manifestName] = new ManifestInfoRequest(manifestName);
16453        }
16454        var request = manifestRequestMap[manifestName];
16455
16456        request.getManifestInfo(function(manifestInfo) {
16457            ensureRequireJS(function() {
16458                if (!configuredRequireJS) {
16459                    var configFunc = new Function(manifestInfo.d.RequireJsScriptBlock);
16460
16461                    configFunc.call(this);
16462                    configuredRequireJS = true;
16463                }
16464                if (Boolean(scenarioName)) {
16465                    var scenarios = manifestInfo.d.ScenarioMapping.results;
16466
16467                    for (var i = 0; i < scenarios.length; i++) {
16468                        if (scenarios[i].Key === scenarioName) {
16469                            var moduleList = scenarios[i].Value.split(',');
16470
16471                            require(moduleList);
16472                        }
16473                    }
16474                }
16475                callback.call(this, manifestInfo);
16476            });
16477        });
16478    };
16479    function ensureRequireJS(callback) {
16480        if (Boolean(window["requirejs"])) {
16481            callback();
16482        }
16483        else {
16484            if (typeof EnsureScriptFunc !== "undefined") {
16485                EnsureScriptFunc("require.js", "requirejs", function() {
16486                    callback();
16487                });
16488            }
16489        }
16490    }
16491    var ManifestInfoRequest = function(manifestName) {
16492        var manifestInfo;
16493        var xhr;
16494        var pendingCallbacks = [];
16495
16496        this.getManifestInfo = function(callback) {
16497            if (isReady()) {
16498                callback(manifestInfo);
16499            }
16500            else {
16501                pendingCallbacks.push(callback);
16502                if (!isLoading()) {
16503                    startRequest();
16504                }
16505            }
16506        };
16507        function startRequest() {
16508            var url = "/_api/web/GetResourceManifestInformation(manifestName='";
16509
16510            url += encodeURIComponent(manifestName);
16511            url += "')";
16512            xhr = new XMLHttpRequest();
16513            xhr.open("GET", url, true);
16514            xhr.setRequestHeader("Content-Type", "application/json;odata=verbose");
16515            xhr.setRequestHeader("Accept", "application/json;odata=verbose");
16516            xhr.onload = function requestListener() {
16517                manifestInfo = JSON.parse(xhr.responseText);
16518                pendingCallbacks.forEach(function(callback) {
16519                    callback(manifestInfo);
16520                });
16521                pendingCallbacks = [];
16522                xhr = void 0;
16523            };
16524            xhr.send();
16525        }
16526        function isReady() {
16527            return Boolean(manifestInfo);
16528        }
16529        function isLoading() {
16530            return Boolean(xhr);
16531        }
16532    };
16533}
16534function AllowCSSFiltersOnIE8() {
16535    var elem = document.getElementById("ms-hcTest");
16536    var isHC = false;
16537
16538    if (Boolean(elem) && Boolean(elem.currentStyle) && elem.currentStyle["borderColor"] != "#f00") {
16539        isHC = true;
16540        CSSUtil.AddClass(document.body, "ms-core-isHC");
16541    }
16542    if (browseris.ie8down) {
16543        CSSUtil.AddClass(document.body, "ms-core-needIEFilter");
16544        if (isHC) {
16545            var s4ws = document.getElementById("s4-workspace");
16546
16547            if (Boolean(s4ws))
16548                s4ws.style.filter = "";
16549        }
16550    }
16551    else {
16552        CSSUtil.AddClass(document.body, "ms-backgroundImage");
16553    }
16554}
16555function notifyScriptsLoadedAndExecuteWaitingJobs(scriptName) {
16556    if (typeof Sys != "undefined" && Boolean(Sys) && Boolean(Sys.Application)) {
16557        Sys.Application.notifyScriptLoaded();
16558    }
16559    NotifyScriptLoadedAndExecuteWaitingJobs(scriptName);
16560}
16561var initJsLoaded;
16562
16563$_global_init();

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.