PageSourceSearch

https://www.pueblo.us/959848165.js

js pueblo.us collected 2026-09-24 18:33:58 UTC 206,986 bytes, 3,840 lines download raw bytes

1/*
2The following errors were found when attempting to minify this file:
3- Line 1451: Parse error. missing : after property id
4- Line 1451: Parse error. illegal character
5- Line 1451: Parse error. missing ; before statement
6- Line 1451: Parse error. illegal character
7- Line 1451: Parse error. syntax error
8- Line 1452: Parse error. syntax error
9- Line 1453: Parse error. syntax error
10- Line 1454: Parse error. syntax error
11- Line 1456: Parse error. syntax error
12- Line 1457: Parse error. illegal character
13- Line 1457: Parse error. missing ) after argument list
14- Line 1457: Parse error. illegal character
15- Line 1457: Parse error. syntax error
16- Line 1458: Parse error. syntax error
17- Line 1459: Parse error. syntax error
18- Line 1460: Parse error. syntax error
19- Line 1461: Parse error. syntax error
20- Line 1463: Parse error. syntax error
21- Line 1465: Parse error. missing ; before statement
22- Line 1473: Parse error. syntax error
23- Line 1475: Parse error. syntax error
24- Line 1480: Parse error. invalid return
25- Line 1481: Parse error. syntax error
26- Line 1483: Parse error. missing ; before statement
27- Line 1487: Parse error. syntax error
28- Line 1488: Parse error. syntax error
29- Line 1489: Parse error. syntax error
30- Line 1491: Parse error. syntax error
31- Line 1493: Parse error. missing ; before statement
32- Line 1499: Parse error. illegal character
33- Line 1499: Parse error. missing ; before statement
34- Line 1499: Parse error. illegal character
35- Line 1500: Parse error. syntax error
36- Line 1501: Parse error. syntax error
37- Line 1504: Parse error. syntax error
38- Line 1507: Parse error. illegal character
39- Line 1507: Parse error. missing ; before statement
40- Line 1507: Parse error. illegal character
41- Line 1511: Parse error. invalid return
42- Line 1512: Parse error. syntax error
43- Line 1514: Parse error. missing ; before statement
44- Line 1515: Parse error. syntax error
45- Line 1516: Parse error. syntax error
46- Line 1517: Parse error. syntax error
47- Line 1522: Parse error. invalid return
48- Line 1527: Parse error. missing ; after for-loop initializer
49- Line 1527: Parse error. missing ; before statement
50- Line 1534: Parse error. syntax error
51- Line 1538: Parse error. syntax error
52- Line 1541: Parse error. syntax error
53- Line 1543: Parse error. syntax error
54- Line 1545: Parse error. syntax error
55- Line 1546: Parse error. syntax error
56- Line 1547: Parse error. syntax error
57*/
58/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */�
vendor: 11,260 bytes, lines 58-59
58
59!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)}
vendor: 4,763 bytes, line 59
59,I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)}
vendor: 6,770 bytes, line 59
59,input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}
vendor: 6,600 bytes, line 59
59return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;
vendor: 13,727 bytes, line 59
59if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);
vendor: 6,944 bytes, line 59
59n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;
vendor: 25,800 bytes, line 59
59left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);
vendor: 11,580 bytes, line 59
59if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
59
60;
61// This file contains javascript functions for the "External Integration" field type.
62// REQUIREMENTS:
63//		FieldSetDesigner.js
64
65// These values must match the values provided in CivicPlus.Entities.Modules.FormCenter.Enums.ExternalIntegrationCommandType
66var ExternalIntegrationCommandType = {
67	XMLCommand: 1,
68	EchoCommand: 2
69};
70
71// Closure containing the client-side functionality for the External Integration field type.
72// * externalIntegrationClass - The name of the CSS class that is used to identify external integration buttons.
73function ExternalIntegration(externalIntegrationClassname, fieldSetDesigner) {
74	this.cssClassname = externalIntegrationClassname;
75	this.fieldSetDesigner = fieldSetDesigner;
76
77	this.hookEvents = function () {
78		var my = this;
79		if (my.cssClassname == null)
80			throw 'No external integration button CSS class name has been specified.'
81
82		$('.' + this.cssClassname).click(function (event) {
83			var fieldID = null;
84			fieldID = event.target.id;
85			my.sendRequest(fieldID);
86		});
87	};
88
89	this.sendRequest = function (fieldID) {
90		var params = this.getFormData();
91        var formID = $('#Item_FormID').val();
92        var intFieldID = fieldID.replace('e_', '');
93
94		var my = this;
95		var sendData = {
96		    id: formID,
97		    fieldID: intFieldID,
98			parameters: JSON.stringify(params)
99		};
100
101		$.ajax({
102			type: 'post',
103			url: '/FormCenter/ExecuteExternalIntegrationCommand',
104			data: sendData,
105			success: function (data) { my.updateFormData(data, my); },
106			error: function (xhr, status, error) { alert('An error occurred while sending the request.'); },
107		    beforeSend: function () {
108		        ajaxPostBackStart('Loading');
109		    },
110	        complete: function () {
111		        ajaxPostBackEnd();
112		    }
113		});
114	};
115
116	// This function takes the values from the JSON result and sets the appropriate
117	// form field values.
118	this.updateFormData = function (responseFromController, externalIntegrationObject) {
119
120		if (responseFromController.error) {
121			alert('An error occurred: ' + responseFromController.errorMessage);
122			return;
123		}
124
125		for (var i = 0, len = responseFromController.length; i < len; i++) {
126			var param = responseFromController[i];
127			switch (responseFromController[i].Type) {
128				case FieldTypes.ShortAnswer:
129					externalIntegrationObject.updateShortAnswerField(param);
130					break;
131				case FieldTypes.LongAnswer:
132					externalIntegrationObject.updateLongAnswerField(param);
133					break;
134				case FieldTypes.Checkboxes:
135					externalIntegrationObject.updateCheckboxField(param);
136					break;
137				case FieldTypes.Dropdown:
138					externalIntegrationObject.updateDropdownField(param);
139					break;
140				case FieldTypes.Password:
141					externalIntegrationObject.updatePasswordField(param);
142					break;
143				case FieldTypes.RadioButtons:
144					externalIntegrationObject.updateRadioField(param);
145					break;
146			    case FieldTypes.DateTime:
147			        externalIntegrationObject.updateDateField(param);
148			        break;
149			}
150		}
151	}
152
153	this.getFormData = function () {
154		var params = [];
155
156		this.appendShortAnswerFields(params);
157		this.appendCheckboxFields(params);
158		this.appendRadioFields(params);
159		this.appendDropdowns(params);
160		this.appendTextAreaFields(params);
161		this.appendPasswordFields(params);
162
163		return params;
164	};
165
166	this.createFieldValue = function (fieldID, type, value, externalName) {
167		return { ID: fieldID, Type: type, Value: value, ExternalName: externalName};
168	};
169
170	this.appendShortAnswerFields = function (params) {
171		var my = this;
172		$('input[id^="e_"][type="text"]').each(function (i) {
173			var element = $(this);
174			params.push(my.createFieldValue(element.attr('id'), FieldTypes.ShortAnswer, element.val(), my.externalSubmissionName(element)));
175		});
176	};
177
178	this.externalSubmissionName = function($element) {
179	    return $element.parents('*[data-external-submission-name]').attr('data-external-submission-name');
180	};
181
182	this.updateShortAnswerField = function (param) {
183		var id = param.ID;
184		$('#' + param.ID).val(param.Value);
185	}
186
187	this.appendCheckboxFields = function (params) {
188		var my = this;
189		$('input[id^="e_"][type="checkbox"]').each(function (index) {
190			var item = $(this);
191			var value = item.attr('value');
192			var checked = false;
193			if (item.is(':checked')) {
194			    checked = true;
195			}
196			var fieldValue = my.createFieldValue(item.attr('id'), FieldTypes.Checkboxes, value, my.externalSubmissionName(item));
197			fieldValue.Checked = checked;
198			params.push(fieldValue);
199		});
200	};
201
202	this.updateCheckboxField = function (param) {
203		var id = param.ID;
204		if (param.Checked == true)
205			$('#' + param.ID).prop('checked', true);
206		else
207			$('#' + param.ID).prop('checked', false);
208	};
209
210	this.appendRadioFields = function (params) {
211		var my = this;
212		$('input[id^="e_"][type="radio"]').each(function (index) {
213			var item = $(this);
214			var value = item.attr('value');
215			var checked = false;
216			if (item.is(':checked')) {
217			    checked = true;
218			}
219			var fieldValue = my.createFieldValue(item.attr('id'), FieldTypes.RadioButtons, value, my.externalSubmissionName(item));
220			fieldValue.Checked = checked;
221
222			params.push(fieldValue);
223		});
224	};
225
226	this.updateRadioField = function (param) {
227	    var id = param.ID;
228	    var value = param.Value;
229	    var button = $('input[id^="' + id + '"][value="' + value + '"]');
230	    button.prop('checked', true);
231	};
232
233	this.appendDropdowns = function (params) {
234		var my = this;
235		$('select[id^="e_"]').each(function (index) {
236			var item = $(this);
237			params.push(my.createFieldValue(item.attr('id'), FieldTypes.Dropdown, item.val(), my.externalSubmissionName(item)));
238		});
239	};
240
241	this.updateDropdownField = function (param) {
242		$('#' + param.ID).val(param.Value);
243	}
244
245	this.appendTextAreaFields = function (params) {
246		var my = this;
247		$('textarea[id^="e_"]').each(function (index) {
248			var element = $(this);
249
250			if (element.closest('li.LongAnswer').length > 0) {
251				params.push(my.createFieldValue(element.attr('id'), FieldTypes.LongAnswer, element.text(), my.externalSubmissionName(element)));
252			}
253		});
254	};
255
256	this.updateLongAnswerField = function (param) {
257		$('#' + param.ID).text(param.Value);
258	}
259
260	this.appendPasswordFields = function (params) {
261		var my = this;
262		$('input[id^="e_"][type="password"').each(function (i) {
263			var element = $(this);
264			params.push(my.createFieldValue(element.attr('id'), FieldTypes.Password, element.val(), my.externalSubmissionName(element)));
265		});
266	}
267
268	this.updatePasswordField = function (param) {
269		// We don't want to update password information with values returned from the remote service.
270		return;
271	}
272
273	this.updateDateField = function (param) {
274	    var my = this;
275	    var isSpan = (param.Value.indexOf(',') >= 0);
276
277	    var dateID = param.ID + '_date';
278	    var timeID = param.ID + '_time';
279	    var endDateID = param.ID + '_dateSpan';
280	    var endTimeID = param.ID + '_timeSpan';
281        
282	    var updateDate = function (selector, val) {
283	        var datePicker = $('#' + selector);
284	        if (datePicker.length == 0)
285	            return;
286
287	        datePicker.data('tDatePicker').value(val);
288	    };
289
290	    var updateTime = function (selector, val) {
291	        var timePicker = $('#' + selector);
292	        if (timePicker.length == 0)
293	            return;
294	        timePicker.data('tTimePicker').value(val);
295	    };
296
297	    if (isSpan) {
298	        var dateArray = param.Value.split(',');
299	        var startDate = new Date(dateArray[0]);
300	        var endDate = new Date(dateArray[1]);
301            
302	        updateDate(dateID, startDate);
303	        updateTime(timeID, startDate);
304
305	        updateDate(endDateID, endDate);
306	        updateTime(endTimeID, endDate);
307	    } else {
308	        var startDate = new Date(param.Value);
309	        updateDate(dateID, startDate);
310	        updateTime(timeID, startDate);
311	    }
312	}
313};
314
315// Calls subroutines used to initialize the ExternalIntegration javascript object.
316ExternalIntegration.prototype.initialize = function () {
317	this.hookEvents();
318};
319/*
320	http://www.JSON.org/json2.js
321	2011-02-23
322
323	Public Domain.
324
325	NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
326
327	See http://www.JSON.org/js.html
328
329
330	This code should be minified before deployment.
331	See http://javascript.crockford.com/jsmin.html
332
333	USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
334	NOT CONTROL.
335
336
337	This file creates a global JSON object containing two methods: stringify
338	and parse.
339
340		JSON.stringify(value, replacer, space)
341			value       any JavaScript value, usually an object or array.
342
343			replacer    an optional parameter that determines how object
344						values are stringified for objects. It can be a
345						function or an array of strings.
346
347			space       an optional parameter that specifies the indentation
348						of nested structures. If it is omitted, the text will
349						be packed without extra whitespace. If it is a number,
350						it will specify the number of spaces to indent at each
351						level. If it is a string (such as '\t' or '&nbsp;'),
352						it contains the characters used to indent at each level.
353
354			This method produces a JSON text from a JavaScript value.
355
356			When an object value is found, if the object contains a toJSON
357			method, its toJSON method will be called and the result will be
358			stringified. A toJSON method does not serialize: it returns the
359			value represented by the name/value pair that should be serialized,
360			or undefined if nothing should be serialized. The toJSON method
361			will be passed the key associated with the value, and this will be
362			bound to the value
363
364			For example, this would serialize Dates as ISO strings.
365
366				Date.prototype.toJSON = function (key) {
367					function f(n) {
368						// Format integers to have at least two digits.
369						return n < 10 ? '0' + n : n;
370					}
371
372					return this.getUTCFullYear()   + '-' +
373						 f(this.getUTCMonth() + 1) + '-' +
374						 f(this.getUTCDate())      + 'T' +
375						 f(this.getUTCHours())     + ':' +
376						 f(this.getUTCMinutes())   + ':' +
377						 f(this.getUTCSeconds())   + 'Z';
378				};
379
380			You can provide an optional replacer method. It will be passed the
381			key and value of each member, with this bound to the containing
382			object. The value that is returned from your method will be
383			serialized. If your method returns undefined, then the member will
384			be excluded from the serialization.
385
386			If the replacer parameter is an array of strings, then it will be
387			used to select the members to be serialized. It filters the results
388			such that only members with keys listed in the replacer array are
389			stringified.
390
391			Values that do not have JSON representations, such as undefined or
392			functions, will not be serialized. Such values in objects will be
393			dropped; in arrays they will be replaced with null. You can use
394			a replacer function to replace those with JSON values.
395			JSON.stringify(undefined) returns undefined.
396
397			The optional space parameter produces a stringification of the
398			value that is filled with line breaks and indentation to make it
399			easier to read.
400
401			If the space parameter is a non-empty string, then that string will
402			be used for indentation. If the space parameter is a number, then
403			the indentation will be that many spaces.
404
405			Example:
406
407			text = JSON.stringify(['e', {pluribus: 'unum'}]);
408			// text is '["e",{"pluribus":"unum"}]'
409
410
411			text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
412			// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
413
414			text = JSON.stringify([new Date()], function (key, value) {
415				return this[key] instanceof Date ?
416					'Date(' + this[key] + ')' : value;
417			});
418			// text is '["Date(---current time---)"]'
419
420
421		JSON.parse(text, reviver)
422			This method parses a JSON text to produce an object or array.
423			It can throw a SyntaxError exception.
424
425			The optional reviver parameter is a function that can filter and
426			transform the results. It receives each of the keys and values,
427			and its return value is used instead of the original value.
428			If it returns what it received, then the structure is not modified.
429			If it returns undefined then the member is deleted.
430
431			Example:
432
433			// Parse the text. Values that look like ISO date strings will
434			// be converted to Date objects.
435
436			myData = JSON.parse(text, function (key, value) {
437				var a;
438				if (typeof value === 'string') {
439					a =
440/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
441					if (a) {
442						return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
443							+a[5], +a[6]));
444					}
445				}
446				return value;
447			});
448
449			myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
450				var d;
451				if (typeof value === 'string' &&
452						value.slice(0, 5) === 'Date(' &&
453						value.slice(-1) === ')') {
454					d = new Date(value.slice(5, -1));
455					if (d) {
456						return d;
457					}
458				}
459				return value;
460			});
461
462
463	This is a reference implementation. You are free to copy, modify, or
464	redistribute.
465*/
466
467/*jslint evil: true, strict: false, regexp: false */
468
469/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
470	call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
471	getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
472	lastIndex, length, parse, prototype, push, replace, slice, stringify,
473	test, toJSON, toString, valueOf
474*/
475
476
477// Create a JSON object only if one does not already exist. We create the
478// methods in a closure to avoid creating global variables.
479
480var JSON;
481if (!JSON) {
482	JSON = {};
483}
484
485(function () {
486	"use strict";
487
488	function f(n) {
489		// Format integers to have at least two digits.
490		return n < 10 ? '0' + n : n;
491	}
492
493	if (typeof Date.prototype.toJSON !== 'function') {
494
495		Date.prototype.toJSON = function (key) {
496
497			return isFinite(this.valueOf()) ?
498				this.getUTCFullYear()     + '-' +
499				f(this.getUTCMonth() + 1) + '-' +
500				f(this.getUTCDate())      + 'T' +
501				f(this.getUTCHours())     + ':' +
502				f(this.getUTCMinutes())   + ':' +
503				f(this.getUTCSeconds())   + 'Z' : null;
504		};
505
506		String.prototype.toJSON      =
507			Number.prototype.toJSON  =
508			Boolean.prototype.toJSON = function (key) {
509				return this.valueOf();
510			};
511	}
512
513	var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
514		escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
515		gap,
516		indent,
517		meta = {    // table of character substitutions
518			'\b': '\\b',
519			'\t': '\\t',
520			'\n': '\\n',
521			'\f': '\\f',
522			'\r': '\\r',
523			'"' : '\\"',
524			'\\': '\\\\'
525		},
526		rep;
527
528
529	function quote(string) {
530
vendor: 4,489 bytes, lines 531-698
531// If the string contains no control characters, no quote characters, and no
532// backslash characters, then we can safely slap some quotes around it.
533// Otherwise we must also replace the offending characters with safe escape
534// sequences.
535
536		escapable.lastIndex = 0;
537		return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
538			var c = meta[a];
539			return typeof c === 'string' ? c :
540				'\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
541		}) + '"' : '"' + string + '"';
542	}
543
544
545	function str(key, holder) {
546
547// Produce a string from holder[key].
548
549		var i,          // The loop counter.
550			k,          // The member key.
551			v,          // The member value.
552			length,
553			mind = gap,
554			partial,
555			value = holder[key];
556
557// If the value has a toJSON method, call it to obtain a replacement value.
558
559		if (value && typeof value === 'object' &&
560				typeof value.toJSON === 'function') {
561			value = value.toJSON(key);
562		}
563
564// If we were called with a replacer function, then call the replacer to
565// obtain a replacement value.
566
567		if (typeof rep === 'function') {
568			value = rep.call(holder, key, value);
569		}
570
571// What happens next depends on the value's type.
572
573		switch (typeof value) {
574		case 'string':
575			return quote(value);
576
577		case 'number':
578
579// JSON numbers must be finite. Encode non-finite numbers as null.
580
581			return isFinite(value) ? String(value) : 'null';
582
583		case 'boolean':
584		case 'null':
585
586// If the value is a boolean or null, convert it to a string. Note:
587// typeof null does not produce 'null'. The case is included here in
588// the remote chance that this gets fixed someday.
589
590			return String(value);
591
592// If the type is 'object', we might be dealing with an object or an array or
593// null.
594
595		case 'object':
596
597// Due to a specification blunder in ECMAScript, typeof null is 'object',
598// so watch out for that case.
599
600			if (!value) {
601				return 'null';
602			}
603
604// Make an array to hold the partial results of stringifying this object value.
605
606			gap += indent;
607			partial = [];
608
609// Is the value an array?
610
611			if (Object.prototype.toString.apply(value) === '[object Array]') {
612
613// The value is an array. Stringify every element. Use null as a placeholder
614// for non-JSON values.
615
616				length = value.length;
617				for (i = 0; i < length; i += 1) {
618					partial[i] = str(i, value) || 'null';
619				}
620
621// Join all of the elements together, separated with commas, and wrap them in
622// brackets.
623
624				v = partial.length === 0 ? '[]' : gap ?
625					'[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
626					'[' + partial.join(',') + ']';
627				gap = mind;
628				return v;
629			}
630
631// If the replacer is an array, use it to select the members to be stringified.
632
633			if (rep && typeof rep === 'object') {
634				length = rep.length;
635				for (i = 0; i < length; i += 1) {
636					if (typeof rep[i] === 'string') {
637						k = rep[i];
638						v = str(k, value);
639						if (v) {
640							partial.push(quote(k) + (gap ? ': ' : ':') + v);
641						}
642					}
643				}
644			} else {
645
646// Otherwise, iterate through all of the keys in the object.
647
648				for (k in value) {
649					if (Object.prototype.hasOwnProperty.call(value, k)) {
650						v = str(k, value);
651						if (v) {
652							partial.push(quote(k) + (gap ? ': ' : ':') + v);
653						}
654					}
655				}
656			}
657
658// Join all of the member texts together, separated with commas,
659// and wrap them in braces.
660
661			v = partial.length === 0 ? '{}' : gap ?
662				'{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
663				'{' + partial.join(',') + '}';
664			gap = mind;
665			return v;
666		}
667	}
668
669// If the JSON object does not yet have a stringify method, give it one.
670
671	if (typeof JSON.stringify !== 'function') {
672		JSON.stringify = function (value, replacer, space) {
673
674// The stringify method takes a value and an optional replacer, and an optional
675// space parameter, and returns a JSON text. The replacer can be a function
676// that can replace values, or an array of strings that will select the keys.
677// A default replacer method can be provided. Use of the space parameter can
678// produce text that is more easily readable.
679
680			var i;
681			gap = '';
682			indent = '';
683
684// If the space parameter is a number, make an indent string containing that
685// many spaces.
686
687			if (typeof space === 'number') {
688				for (i = 0; i < space; i += 1) {
689					indent += ' ';
690				}
691
692// If the space parameter is a string, it will be used as the indent string.
693
694			} else if (typeof space === 'string') {
695				indent = space;
696			}
697
698// If there is a replacer, it must be a function or an array.
699// Otherwise, throw an error.
700
701			rep = replacer;
702			if (replacer && typeof replacer !== 'function' &&
703					(typeof replacer !== 'object' ||
704					typeof replacer.length !== 'number')) {
705				throw new Error('JSON.stringify');
706			}
707
708// Make a fake root object containing our value under the key of ''.
709// Return the result of stringifying the value.
710
711			return str('', {'': value});
712		};
713	}
714
715
716// If the JSON object does not yet have a parse method, give it one.
717
718	if (typeof JSON.parse !== 'function') {
719		JSON.parse = function (text, reviver) {
720
721// The parse method takes a text and an optional reviver function, and returns
722// a JavaScript value if the text is a valid JSON text.
723
724			var j;
725
726			function walk(holder, key) {
727
728// The walk method is used to recursively walk the resulting structure so
729// that modifications can be made.
730
731				var k, v, value = holder[key];
732				if (value && typeof value === 'object') {
733					for (k in value) {
734						if (Object.prototype.hasOwnProperty.call(value, k)) {
735							v = walk(value, k);
736							if (v !== undefined) {
737								value[k] = v;
738							} else {
739								delete value[k];
740							}
741						}
742					}
743				}
744				return reviver.call(holder, key, value);
745			}
746
747
748// Parsing happens in four stages. In the first stage, we replace certain
749// Unicode characters with escape sequences. JavaScript handles many characters
750// incorrectly, either silently deleting them, or treating them as line endings.
751
752			text = String(text);
753			cx.lastIndex = 0;
754			if (cx.test(text)) {
755				text = text.replace(cx, function (a) {
756					return '\\u' +
757						('0000' + a.charCodeAt(0).toString(16)).slice(-4);
758				});
759			}
760
761// In the second stage, we run the text against regular expressions that look
762// for non-JSON patterns. We are especially concerned with '()' and 'new'
763// because they can cause invocation, and '=' because it can cause mutation.
764// But just to be safe, we want to reject all unexpected forms.
765
766// We split the second stage into 4 regexp operations in order to work around
767// crippling inefficiencies in IE's and Safari's regexp engines. First we
768// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
769// replace all simple value tokens with ']' characters. Third, we delete all
770// open brackets that follow a colon or comma or that begin the text. Finally,
771// we look to see that the remaining characters are only whitespace or ']' or
772// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
773
774			if (/^[\],:{}\s]*$/
775					.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
776						.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
777						.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
778
779// In the third stage we use the eval function to compile the text into a
780// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
781// in JavaScript: it can begin a block or an object literal. We wrap the text
782// in parens to eliminate the ambiguity.
783
784				j = eval('(' + text + ')');
785
786// In the optional fourth stage, we recursively walk the new structure, passing
787// each name/value pair to a reviver function for possible transformation.
788
789				return typeof reviver === 'function' ?
790					walk({'': j}, '') : j;
791			}
792
793// If the text is not JSON parseable, then a SyntaxError is thrown.
794
795			throw new SyntaxError('JSON.parse');
796		};
797	}
798}());
799;
800var fb_busy = false;
801$(document).ready(function () {
802	if ($('#makeToolbarSignInButtonDisappear').val() == 'True') {
803		if ($('#loggedOutToolbarSignInButton')) {
804			$('#loggedOutToolbarSignInButton').hide();
805			$('#signedOutToolbarMoreInformationButtons').hide();
806		}
807	}
808
809	var userName;
810
811	if (document.layers)
812		document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT)
813
814	document.onmouseover = hidestatus;
815	document.onmouseout = hidestatus;
816
817	userName = document.getElementById('UserName');
818	if (userName) {
819		if (userName.value == '') {
820			userName.focus();
821		} else {
822			document.getElementById('Password').focus();
823		}
824	}
825
826	if (document.getElementById('fb-root')) {
827		if (typeof (FB) != "undefined") {
828			FB.init({
829				appId: $('#AppID').val(),
830				cookie: true,
831				status: true,
832				oauth: true
833			});
834		}
835		$('.fb-login').click(function (evt) {
836			var from;
837			var url;
838			var anchor;
839			var signInURL;
840
841			if (fb_busy) return;
842			fb_busy = true;
843
844			$('.fb-login').fadeOut(100);
845			$('.loginBox').fadeOut(100);
846			$('#login-fb-waiting-text').delay(100).text('Signing in with Facebook...');
847			$('#login-fb-waiting').delay(100).fadeIn(100);
848
849			try {
850				FB.login(function (response) {
851					if (response.authResponse) {
852						var res = HasAcceptedTerms('/MyAccount/HasAcceptedTermsFacebook?access_token=' 
852+ response.authResponse.accessToken + '&orgName=' + (document.getElementById('Organization') != null ? document.getElementById('Organization').value : ''));
853						if (res.status != 1) {
854							alert(res.msg);
855						} else if (!res.HasAcceptedTerms) {
856							ShowTerms(function () {
857								PerformFacebookSignIn(response.authResponse.accessToken);
858							});
859						} else {
860							PerformFacebookSignIn(response.authResponse.accessToken);
861						}
862					} else {
863						// user is not logged in
864						LoginFailed('Sign in with Facebook cancelled.');
865					}
866				}, {
867					scope: 'email'
868				});
869			} catch (e) {
870
871			}
872		});
873	}
874
875	$('.performSignIn').unbind('click').click(function (e) {
876		performSignIn();
877	});
878
879	$('.forgot').unbind('click').click(function (e) {
880		var $self = $(this);
881		var uniqueID = $self.parents('ol.loginBox').find('.UniqueID').val();
882		var username = $('#UserName' + uniqueID).val();
883		recover(username);
884	});
885});
886
887function PerformFacebookSignIn(accessToken) {
888	// user is logged in and granted permission.
889	signInURL = '/MyAccount/FacebookSignIn?access_token=' + accessToken;
890	from = GetQueryStringParameter('from');
891	var dn = GetQueryStringParameter('dn');
892	if (dn != "") {
893		signInURL = signInURL + '&dn=' + dn;
894	}
895	if (from != "") {
896		url = GetQueryStringParameter('url');
897		anchor = GetQueryStringParameter('anchor');
898		signInURL = signInURL + '&from=' + from + '&url=' + url + '&anchor=' + anchor;
899
900	}
901
902	window.location.href = signInURL;
903}
904
905function LoginFailed(message) {
906	$('#login-fb-waiting-text').fadeOut(250);
907	$('#login-fb-waiting-text').text(message);
908	$('#login-fb-waiting-text').fadeIn(250).delay(2000).fadeOut(250);
909	$('#login-fb-waiting').delay(2250).fadeOut(250);
910	$('.loginBox').delay(2250).fadeIn(250);
911	$('.fb-login').delay(2250).fadeIn(250);
912	fb_busy = false;
913}
914
915function hidestatus() {
916	window.status = ''
917	return true
918}
919
920function performSignIn() {
921	var res = HasAcceptedTerms('/MyAccount/HasAcceptedTerms?userName=' + document.getElementById('UserName').value + '&orgName=' + (document.getElementById('Organization') != null ? document.getElementById('Organization').value : ''));
922	if (res.status != 1) {
923		alert(res.msg);
924	} else if (!res.HasAcceptedTerms) {
925		ShowTerms(function () {
926			if (window.chrome !== null && window.chrome !== undefined && window.navigator.vendor === "Google Inc.") {
927				setTimeout(function () { //issue with chrome where the form submit doesn't respect the form's action. SetTimeout is a workaround.
928					$('#aspnetForm:first').submit();
929				}, 0);
930			} else {
931				$('#aspnetForm:first').submit();
932			}
933
934		});
935	} else {
936		//This call is necessary here since when we do programatic submits, it does not remove the placeholder and the submit handler automatically. Refer to removePlaceHolder() in GlobalJSFunctionDetail.js for detailed comment.
937		removePlaceHolders();
938		setDaysSinceLastLoginCookie();
939		if (window.chrome !== null && window.chrome !== undefined && window.navigator.vendor === "Google Inc.") {
940			setTimeout(function () { //issue with chrome where the form submit doesn't respect the form's action. SetTimeout is a workaround.
941				$('#aspnetForm:first').submit();
942			}, 0);
943		} else {
944			$('#aspnetForm:first').submit();
945		}
946	}
947}
948
949function signInOnEnter(ev) {
950	ev = (window.event ? window.event : ev);
951
952	if (ev.keyCode == 10 || ev.keyCode == 13)
953		performSignIn();
954}
955
956function VerifyUserOnEnter(ev) {
957	ev = (window.event ? window.event : ev);
958
959	if (ev.keyCode == 10 || ev.keyCode == 13)
960		VerifyEditUser();
961}
962
963function VerifyEditUser(isNew) {
964	var alertMsg = "";
965	var errString = 'The form can not be submitted due to the following error(s):\n';
966	errString += "-----------------------------------------------------------------------\n\n";
967	var doSubmit = true;
968
969	txtPassword = TrimString(document.getElementById('Password').value);
970	txtConfirmPassword = TrimString(document.getElementById('ConfirmPassword').value);
971
972	if (FieldIsEmpty(document.getElementById('UserName').value)) {
973		doSubmit = false;
974		alertMsg += "Your email cannot be blank.\n";
975	}
976
977	if (FieldIsEmpty(document.getElementById('FirstName').value)) {
978		doSubmit = false;
979		alertMsg += "Your first name cannot be blank.\n";
980	}
981
982	if (FieldIsEmpty(document.getElementById('LastName').value)) {
983		doSubmit = false;
984		alertMsg += "Your last name cannot be blank.\n";
985	}
986
987	if (txtPassword != txtConfirmPassword) {
988		doSubmit = false;
989		alertMsg += "Passwords do not match.\n";
990	}
991
992	if ((txtPassword.length > 0) && (txtPassword.length < 5)) {
993		doSubmit = false;
994		alertMsg += "Password needs to be 5 characters or longer.\n";
995	}
996
997	if (isNew) {
998		if (FieldIsEmpty(document.getElementById('Password').value)) {
999			doSubmit = false;
1000			alertMsg += "Your password cannot be blank.\n";
1001		}
1002
1003		if (!$('#HasAcceptedTerms').is(':checked')) {
1004			doSubmit = false;
1005			alertMsg += "You must agree to the policies, terms and conditions.\n";
1006		}
1007	}
1008
1009	if (alertMsg.length > 0) {
1010		errString += alertMsg;
1011		errString += "\n-----------------------------------------------------------------------\n";
1012		errString += "Please correct them and re-submit.";
1013		alert(errString)
1014	}
1015
1016	if (doSubmit) {
1017		if (isNew) {
1018			performSignIn();
1019		} else {
1020			document.forms[0].submit();
1021		}
1022	}
1023}
1024
1025function validateContact(idPrepend) {
1026	var alertMessage = "";
1027
1028	if ($(idPrepend + 'FirstName').val() == '' || $(idPrepend + 'FirstName').val() == 'First Name') {
1029		alertMessage += "Please enter a valid first name.\n";
1030	}
1031
1032	if ($(idPrepend + 'LastName').val() == '' || $(idPrepend + 'LastName').val() == 'Last Name') {
1033		alertMessage += "Please enter a valid last name.\n";
1034	}
1035
1036	if ($(idPrepend + 'Address1').val() == '' || $(+'Address1').val() == 'Address') {
1037		alertMessage += "Please enter a valid address.\n";
1038	}
1039
1040	if ($(idPrepend + 'City').val() == '' || $(idPrepend + 'City').val() == 'City') {
1041		alertMessage += "Please enter a valid city.\n";
1042	}
1043
1044	if ($(idPrepend + 'State').val() == '' || $(idPrepend + 'State').val() == 'ST') {
1045		alertMessage += "Please enter a valid " + getLowerCaseStateString() + ".\n";
1046	} else if (!RegExValidate('^[A-Z]{2}$', $(idPrepend + 'State').val(), 'i') || !RegExValidate('^[a-z]{2}$', $(idPrepend + 'State').val(), 'i')) {
1047		alertMessage += "Please enter a valid " + getLowerCaseStateString() + ".\n";
1048	}
1049
1050	if ($(idPrepend + 'PostalCode').val() == '' || (!isZipCode($(idPrepend + 'PostalCode').val(), intCountryCode))) {
1051		if (intCountryCode == 840)
1052			alertMessage += "Please enter a valid US zip code.\n";
1053		else if (intCountryCode == 124)
1054			alertMessage += "Please enter a valid Canadian postal code.\n";
1055		else
1056			alertMessage += "Please enter a valid zip code.\n";
1057
1058	}
1059
1060	if ($(idPrepend + 'Phone').val() == '' || !phoneValidate($(idPrepend + 'Phone').val())) {
1061		alertMessage += "Please enter a valid phone number.\n";
1062	}
1063
1064	return alertMessage;
1065}
1066
1067function validateRequiredProfile(alertMsgDetail) {
1068
1069	if (txtCompany != null) {
1070		if (txtCompany.value == '') {
1071			alertMsgDetail.doSubmit = false;
1072			alertMsgDetail.alertMsg += "Your company name cannot be blank.\n";
1073		}
1074	}
1075	if (txtAddress1.value == 'Address' || txtAddress1.value == '') {
1076		alertMsgDetail.doSubmit = false;
1077		alertMsgDetail.alertMsg += "Please enter Contact address.\n";
1078	}
1079	if (txtCity.value == 'City' || txtCity.value == '') {
1080		alertMsgDetail.doSubmit = false;
1081		alertMsgDetail.alertMsg += "Please enter City for contact address.\n";
1082	}
1083	if (txtState.value == 'ST' || txtState.value == '') {
1084		alertMsgDetail.doSubmit = false;
1085		alertMsgDetail.alertMsg += "Please enter State for contact address.\n";
1086	} else if (!RegExValidate('^[A-Z]{2}$', txtState.value, 'i') || !RegExValidate('^[a-z]{2}$', txtState.value, 'i')) {
1087		alertMsgDetail.doSubmit = false;
1088		alertMsgDetail.alertMsg += "Please enter a valid State for contact address.\n";
1089	}
1090	if (txtZip.value == 'Zip' || txtZip.value == '') {
1091		alertMsgDetail.doSubmit = false;
1092		alertMsgDetail.alertMsg += "Please enter Zip for contact address.\n";
1093	} else if (!RegExValidate('^[0-9]{5}$', txtZip.value, 'i')) {
1094		alertMsgDetail.doSubmit = false;
1095		alertMsgDetail.alertMsg += "Please enter a valid Zip for contact address.\n";
1096	}
1097
1098}
1099
1100//Get the contact list
1101function contactList(contactID) {
1102	$.ajax({
1103		url: '/MyAccount/ContactList?contactID=' + contactID,
1104		type: 'GET',
1105		success: function (data) {
1106			if (data.RedirectURL)
1107				window.location = data.RedirectURL;
1108			else {
1109				$('#addressesBlock').html(data);
1110				$('.section.selfClear').css('display', 'block');
1111				// some address blocks were not enhanced by Jquery.Mobile libraries so, solution
1112				// seems to be triggering pagecreate event
1113				$('#mainProfileCreate').trigger('pagecreate');
1114			}
1115		},
1116		error: function (jqXHR, textStatus, errorThrown) {
1117			alert('An error occurred');
1118		},
1119		beforeSend: function () {
1120			ajaxPostBackStart('Loading');
1121		},
1122		complete: function () {
1123			ajaxPostBackEnd();
1124		}
1125	});
1126}
1127
1128//Removes a contact
1129function contactDelete(contactID) {
1130	if (confirm('Are you sure you want to delete this address?')) {
1131		$.ajax({
1132			url: '/MyAccount/ContactDelete?contactID=' + contactID,
1133			type: 'GET',
1134			success: function (data) {
1135				$('#addressesBlock').html(data);
1136			},
1137			error: function (jqXHR, textStatus, errorThrown) {
1138				alert('The address could not be deleted.');
1139			},
1140			beforeSend: function () {
1141				ajaxPostBackStart('Loading');
1142			},
1143			complete: function () {
1144				ajaxPostBackEnd();
1145			}
1146		});
1147	}
1148}
1149
1150//Saves a contact
1151function contactSave(contactID, isMobileView, idPrepend, isEdit) {
1152
1153	isEdit = isEdit || false;
1154
1155	if (arguments.length == 1 && typeof isMobileView == 'undefined') {
1156		isMobileView = false;
1157	}
1158
1159	if (arguments.length >= 1 && arguments.length <= 2 && typeof idPrepend == 'undefined') {
1160
1161		idPrepend = "";
1162	}
1163
1164	idPrepend = "#" + idPrepend;
1165
1166	var result = validateContact(idPrepend);
1167
1168	var firstName = $(idPrepend + 'FirstName');
1169	var lastName = $(idPrepend + 'LastName');
1170	var address1 = $(idPrepend + 'Address1');
1171	var address2 = $(idPrepend + 'Address2');
1172	var city = $(idPrepend + 'City');
1173	var state = $(idPrepend + 'State');
1174	var postalcode = $(idPrepend + 'PostalCode');
1175	var phone = $(idPrepend + 'Phone');
1176
1177	var isDefault;
1178
1179	if (result == "") {
1180		isDefault = firstName.parents('.address').find('.isDefault').is(':checked');
1181		var token = $("#addressesBlock input[name='__RequestVerificationToken']").val();
1182		$.ajax({
1183			url: '/MyAccount/ContactSave',
1184			contentType: 'application/x-www-form-urlencoded',
1185			type: 'POST',
1186			dataType: 'json',
1187			data: {
1188				__RequestVerificationToken: token,
1189				ContactID: contactID,
1190				FirstName: firstName.val(),
1191				LastName: lastName.val(),
1192				Address1: address1.val(),
1193				Address2: address2.val(),
1194				City: city.val(),
1195				State: state.val(),
1196				PostalCode: postalcode.val(),
1197				Phone: phone.val(),
1198				IsDefault: isDefault
1199			},
1200			success: function (data) {
1201				if (data != null && data != undefined && data.RedirectURL) {
1202					window.location = data.RedirectURL;
1203				} else {
1204
1205					//var obj = jQuery.parseJSON(data);
1206					if (data.Successful == false) {
1207
1208						alert(data.ErrorMessage);
1209						return false;
1210
1211					} else {
1212
1213						contactList(0);
1214					}
1215
1216				}
1217			},
1218			error: function (jqXHR, textStatus, errorThrown) {
1219				alert('The address could not be saved.');
1220			},
1221			beforeSend: function () {
1222				ajaxPostBackStart('Loading');
1223			},
1224			complete: function () {
1225				ajaxPostBackEnd();
1226			}
1227		});
1228	} else {
1229		alert(result);
1230
1231		if (isMobileView) return false;
1232	}
1233
1234
1235	if (isMobileView && !isEdit) {
1236
1237		firstName.val("");
1238		lastName.val("");
1239		address1.val("");
1240		address2.val("");
1241		city.val("");
1242		//state = ...
1243		postalcode.val("");
1244		phone.val("");
1245
1246		return true;
1247	}
1248
1249}
1250
1251//Changes the default address on myaccount screen.
1252function changeDefaultContact(checkBox, contactID) {
1253	if (contactID == 0) {
1254		setDefaultContact(checkBox);
1255	} else {
1256		$.ajax({
1257			url: '/MyAccount/ContactSetDefault?contactID=' + contactID,
1258			type: 'GET',
1259			success: function (data) {
1260				setDefaultContact(checkBox);
1261			},
1262			error: function (jqXHR, textStatus, errorThrown) {
1263				alert('The default address could not be changed.');
1264			},
1265			beforeSend: function () {
1266				ajaxPostBackStart('Loading');
1267			},
1268			complete: function () {
1269				ajaxPostBackEnd();
1270			}
1271		});
1272	}
1273}
1274
1275//Changes the default address on myaccount screen.
1276function changeDefaultContactMobile(contactID) {
1277
1278	$.ajax({
1279		url: '/MyAccount/ContactSetDefault?contactID=' + contactID,
1280		type: 'GET',
1281		success: function (data) {
1282
1283		},
1284		error: function (jqXHR, textStatus, errorThrown) {
1285			alert('The default address could not be changed.');
1286		},
1287		beforeSend: function () {
1288			ajaxPostBackStart('Loading');
1289		},
1290		complete: function () {
1291			ajaxPostBackEnd();
1292		}
1293	});
1294
1295}
1296
1297function setDefaultContact(checkBox) {
1298	var $addressBlock;
1299	$('.address input[type=checkbox]').each(function () {
1300		this.checked = false;
1301		this.disabled = false;
1302	});
1303
1304	checkBox.checked = true;
1305	checkBox.disabled = true;
1306
1307	$('.address.active').removeClass('active');
1308	$addressBlock = $(checkBox).parents('.address');
1309	$addressBlock.addClass('active');
1310}
1311
1312function recover(username) {
1313	var responseFN = function (ajaxRequest) {
1314		alert(ajaxRequest);
1315	}
1316
1317	makeHttpRequestEx('/Services/ForgotPassword.ashx?Username=' +
1318        encodeURIComponent(username) + '&set=admin', null, responseFN, false);
1319}
1320
1321function SetPhotoMobile(photoType, createProfile) {
1322	SetPhoto(photoType, createProfile);
1323}
1324
1325
1326function SetPhoto(photoType, createProfile) {
1327	if (createProfile.toLowerCase() == 'true') {
1328		$.post('/MyAccount/CreateProfilePhoto?photoType=' + photoType, function (response) {
1329			$('.photo.fbPhoto').html(response);
1330			switch (photoType) {
1331				case 0:
1332					$('#SetRemovePhoto').val('False');
1333					break;
1334				case 1:
1335					$('#SetRemovePhoto').val('False');
1336					break;
1337				case 2:
1338					$('#SetRemovePhoto').val('True');
1339					break;
1340			}
1341		});
1342	} else {
1343		$.post('/MyAccount/ProfilePhoto?photoType=' + photoType, function (response) {
1344			if (response.RedirectURL)
1345				window.location.href = response.RedirectURL;
1346			else {
1347				$('.photo.fbPhoto').html(response);
1348				switch (photoType) {
1349					case 0:
1350						$('#SetRemovePhoto').val('False');
1351						break;
1352					case 1:
1353						$('#SetRemovePhoto').val('False');
1354						break;
1355					case 2:
1356						$('#SetRemovePhoto').val('True');
1357						break;
1358				}
1359			}
1360		});
1361	}
1362}
1363
1364function HasAcceptedTerms(url) {
1365
1366	var result = {
1367		status: 1,
1368		HasAcceptedTerms: true
1369	};
1370	if ($('#HasAcceptedTerms').is(':checked')) {
1371		return result;
1372	}
1373
1374	$.ajax({
1375		url: location.origin + url,
1376		type: 'POST',
1377		async: false,
1378		dataType: 'json',
1379		success: function (data) {
1380			result = data;
1381		},
1382		error: function (jqXHR, textStatus, errorThrown) {
1383			result = {
1384				status: 0,
1385				msg: 'Error encountered while checking terms acceptance.'
1386			};
1387		}
1388	});
1389
1390	return result;
1391}
1392
1393function openCpModalMobile(options) {
1394
1395	var msg;
1396	var title = options.title;
1397
1398	$.ajax({
1399		url: options.url,
1400		type: 'GET',
1401		async: false,
1402		cache: false,
1403		success: function (result) {
1404			msg = result;
1405		},
1406		error: function (xhr, textStatus, exception) {
1407			alert('Error encountered while loading modal.');
1408		}
1409	});
1410
1411	$('#popupBasic .header').html(title);
1412	$('#popupBasic .content').html(msg);
1413	$("#popupBasic").popup('open', {
1414		positionTo: 'window',
1415		overlayTheme: 'a'
1416	});
1417}
1418
1419function ShowTerms(onAccept) {
1420
1421	if ($('#IsMobile').val() == 'True') {
1422
1423		openCpModalMobile({
1424			title: 'Our Terms Have Changed',
1425			className: 'legalUpdate',
1426			isFrontEnd: true,
1427			url: '/MyAccount/Terms'
1428		});
1429
1430		$('.legalUpdate .button.accept').click(onAccept);
1431		$('.legalUpdate .button.cancel').click(DoNotAcceptMobile);
1432
1433	} else {
1434
1435		openCpModal({
1436			title: 'Our Privacy Policy/Terms and Conditions Have Changed',
1437			className: 'legalUpdate',
1438			isFrontEnd: true,
1439			url: '/MyAccount/Terms'
1440		});
1441
1442		$('.legalUpdate .button.accept').click(onAccept);
1443		$('.legalUpdate .modalClose').click(DoNotAccept);
1444	}
1445}
1446
1447
1448function DoNotAccept() {
1449	$('#login-fb-waiting-text').hide();
1450	$('#login-fb-waiting').hide();
1451	$('.loginBox').show();
1452	$('.fb-login').show();
1453	fb_busy = false;
1454	closeCpModal();
1455
1456	return false;
1457}
1458
1459function DoNotAcceptMobile() {
1460
1461	window.location = '/MyAccount';
1462
1463}
1464
1465// Returns TRUE if the password and confirm password field match.
1466function passwordFieldsMatch() {
1467	// NOTE: e_5 and e_6 are hard-coded IDs
1468	var passwordField = $('#e_5');
1469	var confirmPasswordField = $('#e_6');
1470	return passwordField.val() == confirmPasswordField.val();
1471};
1472// Gets Json object using a given url.
1473function GetJson(url) {
1474	var result;
1475	$.ajaxSetup({ async: false });
1476	$.post(url, function (data) {
1477		result = data;
1478	});
1479	$.ajaxSetup({ async: true });
1480	return result;
1481}
1482
1483function maxLength(field, maxChars) {
1484	if (field.value.length >= maxChars) {
1485		event.returnValue = false;
1486		return false;
1487	}
1488}
1489
1490function maxLengthPaste(field, maxChars) {
1491	var copyText = field.value + window.clipboardData.getData("Text");
1492	field.value = copyText.substr(0, maxChars);
1493	if ((copyText.length) > maxChars) {
1494		return false;
1495	}
1496	event.returnValue = true;
1497}
1498
1499function appendFilesToInput(appendInput, mainFileInput) {
1500	const valid = validateMultiFileUpload(appendInput, true);
1501	if (!valid) {
1502		alert("The file you are trying to upload is not an allowed file type or has an invalid file name. These are the accepted characters: A-z 0-9 ~ ! ( ) - + = [ ] { } , . _");
1503		appendInput.value = null;
1504		return;
1505	}
1506	const dt = new DataTransfer();
1507	const originalFiles = Array.from(mainFileInput.files);
1508	const existingSet = new Set(originalFiles.map(({ name, size, lastModified }) => `${name}-${size}-${lastModified}`));
1509	originalFiles.forEach(file => {
1510		dt.items.add(file);
1511	})
1512	const addedFiles = Array.from(appendInput.files);
1513	addedFiles.forEach(file => {
1514		if (!existingSet.has(`${file.name}-${file.size}-${file.lastModified}`)) {
1515			dt.items.add(file);
1516		}
1517	})
1518	mainFileInput.files = dt.files;
1519	mainFileInput.dispatchEvent(new Event("change"));
1520}
1521
1522function fileAppender(mainFileInput) {
1523	const li = document.createElement("li");
1524	const label = document.createElement("label");
1525	label.innerHTML = '<span class="visuallyhidden">Add Files</span><svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" aria-hidden="true"><path d="M440-440H200v-80h240v-240h80v240h240v80H520v240h-80v-240Z"/></svg>'
1526	const appendInput = document.createElement("input");
1527	appendInput.type = "file";
1528	appendInput.multiple = true;
1529	appendInput.className = "visuallyhidden";
1530	appendInput.addEventListener("change", e => {
1531		appendFilesToInput(appendInput, mainFileInput);
1532	});
1533	label.appendChild(appendInput);
1534	const placeholder = document.createElement("span");
1535	li.appendChild(placeholder);
1536	li.appendChild(label);
1537	return li;
1538}
1539
1540function removeFileFromInput(input, idx) {
1541	const dt = new DataTransfer();
1542	const files = Array.from(input.files);
1543	files.splice(idx, 1);
1544	files.forEach(file => {
1545		dt.items.add(file);
1546	});
1547	input.files = dt.files;
1548}
1549
1550function listItemFile(input, file, idx) {
1551	const li = document.createElement("li");
1552	const fileNameSpan = document.createElement("span");
1553	fileNameSpan.textContent = file.name;
1554	li.appendChild(fileNameSpan);
1555	const removeButton = document.createElement("button");
1556	removeButton.title = `Remove ${file.name}`;
1557	removeButton.addEventListener("click", e => {
1558		e.preventDefault();
1559		removeFileFromInput(input, idx);
1560		input.dispatchEvent(new Event("change"));
1561	});
1562	removeButton.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="darkred" aria-hidden="true"><path d="m336-280 144-144 144 144 56-56-144-144 144-144-56-56-144 144-144-144-56 56 144 144-144 144 56 56ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"></path></svg>';
1563	const removeButtonSpan = document.createElement("span");
1564	removeButtonSpan.textContent = `Remove ${file.name}`;
1565	removeButtonSpan.className = "visuallyhidden";
1566	removeButton.appendChild(removeButtonSpan);
1567	li.appendChild(removeButton);
1568	return li;
1569}
1570
1571function listFileInputFiles(fileInput) {
1572	if (fileInput.nextElementSibling?.className === "file-list") {
1573		fileInput.nextElementSibling.remove();
1574	}
1575	const files = fileInput.files || [];
1576	const valid = files.length && validateMultiFileUpload(fileInput, true)
1577	if (!valid) {
1578		fileInput.value = null;
1579		return;
1580	}
1581	if (files.length > 1) {
1582		const ul = document.createElement("ul");
1583		ul.className = "file-list";
1584		for (let i = 0; i < files.length; i++) {			
1585			const li = listItemFile(fileInput, files[i], i);
1586			ul.appendChild(li);
1587		}
1588		const fileAppenderLi = fileAppender(fileInput);
1589		ul.appendChild(fileAppenderLi);
1590		fileInput.after(ul);
1591	}
1592}
1593
1594function initFileInputs() {
1595	if (!((window?.FeatureToggles?.isActive?.("CMS.FormCenter.MultipleFileUploadEnhancement")) || (window?.FeatureToggles?.features?.["CMS.FormCenter.MultipleFileUploadEnhancement"]))) {
1596		return;
1597	}
1598	document.querySelectorAll(".FileUpload input[type='file']").forEach(fileInput => {
1599		listFileInputFiles(fileInput);
1600		fileInput.addEventListener("change", e => {
1601			listFileInputFiles(fileInput)
1602		})
1603	});
1604}
1605;
1606
1607/// <reference path="../../../../Scripts/json2.js" />
1608/// <reference path="../../../../Scripts/HtmlExtensionSupport.js" />
1609/// <reference path="../../../../Common/GlobalJSFunctionsDetail.js" />
1610/// <reference path="../../../../Assets/Scripts/InappropriateWords.js" />
1611/// <reference path="Home.js" />
1612
1613// Overridden on a per-form basis. Retrieves validator information for submission validation.
1614//function getFormValidatorData() {
1615//	return [];
1616//}
1617
1618var FormCenterHomeScriptResources = GetJson("/FormCenter/Localization");
1619var originalTextColorRadio;
1620var originalTextColorCheckBox;
1621
1622$.getScript("/Assets/Scripts/InappropriateWords.js");
1623
1624// Used to properly localize strings.
1625String.prototype.format = function () {
1626	var args = arguments;
1627	return this.replace(/{(\d+)}/g, function (match, number) {
1628		return typeof args[number] != 'undefined'
1629			? args[number]
1630			: match
1631			;
1632	});
1633};
1634
1635
1636// Performs validation for a form field.
1637function FieldValidator(elemInput, id, fieldType, isInternal, isRequired, formatValidation, formatValidationCustom, minAnswer, maxAnswer, maxLength) {
1638	var self = this;
1639	this.elemInputIsArray = $.isArray(elemInput);
1640
1641	if (this.elemInputIsArray) {
1642		for (var i = 0, len = elemInput.length; i < len; i++) {
1643			if (typeof (elemInput[i]) == "string")
1644				elemInput[i] = document.getElementById(elemInput[i]);
1645		}
1646
1647		if (elemInput.length > 0 && elemInput[0]) {
1648			this.elemContainer = elemInput[0].parentNode.parentNode.parentNode.parentNode;
1649			this.elemInput = elemInput;
1650		}
1651	}
1652	else {
1653		if (typeof (elemInput) == "string")
1654			elemInput = document.getElementById(elemInput);
1655
1656		if (elemInput) {
1657			if (fieldType === FieldTypes.DatePicker)
1658				this.elemContainer = elemInput.parentNode.parentNode.parentNode.parentNode;
1659			else
1660				this.elemContainer = elemInput.parentNode.parentNode;
1661			this.elemInput = elemInput;
1662		}
1663	}
1664
1665	this.enabled = true;
1666	this.$elemContainer = $(this.elemContainer);
1667	this.fieldType = fieldType;
1668	if (this.fieldType === FieldTypes.FileUpload) {
1669		//When validating <input type="file" />, we need to update the elemInput reference since it is created a new one when failing inside validateFileUpload method - LC
1670		var validateInputFileUpload = function () {
1671			var $this = $(this);
1672			if (!validateMultiFileUpload($this[0], true)) {
1673				alert("The file you are trying to upload is not an allowed file type or has an invalid file name. These are the accepted characters: A-z 0-9 ~ ! ( ) - + = [ ] { } , . _");
1674				self.elemInput.value = null;
1675				self.elemInput.focus();
1676			}
1677		};
1678		$(this.elemInput).attr("change", "").removeAttr("onChange").unbind("change").change(validateInputFileUpload);
1679	}
1680	this.id = id;
1681	this.isInternal = isInternal;
1682	this.isRequired = isRequired;
1683	this.formatValidation = formatValidation;
1684	this.formatValidationCustom = formatValidationCustom;
1685	this.elemErrorNote = null;
1686	this.minAnswer = minAnswer;
1687	this.maxAnswer = maxAnswer;
1688	this.maxLength = maxLength;
1689	this.focusElementIndex = 0;
1690	this.alreadySetFocus = false;
1691	var isRequiredInfoLableDisplayed = false;
1692	if (this.isRequired && !isRequiredInfoLableDisplayed) {
1693		$('#liRequiredFieldInfo').show();
1694		isRequiredInfoLableDisplayed = true;
1695	}
1696}
1697
1698// Static. Creates a single validation object from an options object.
1699FieldValidator.createSingle = function (options) {
1700	return new FieldValidator(
1701		options.elemInput,
1702		options.id,
1703		options.fieldType,
1704		options.isInternal,
1705		options.isRequired,
1706		options.formatValidation,
1707		options.formatValidationCustom,
1708		options.minAnswer,
1709		options.maxAnswer,
1710		options.maxLength);
1711};
1712
1713// Static. Creates array of validation objects from array of option objects.
1714FieldValidator.createMulti = function (optionsArray) {
1715	var key = null;
1716
1717	var ret = {
1718		keys: [],
1719		add: function (validator) {
1720			var key = validator.id;
1721			this[key] = validator;
1722			this.keys.push(key);
1723		}
1724	};
1725
1726	for (var i = 0, len = optionsArray.length; i < len; i++)
1727		ret.add(FieldValidator.createSingle(optionsArray[i]));
1728
1729	return ret;
1730};
1731
1732// Internal.  Used by validation() to ensure the input does not exceed the max length.
1733FieldValidator.prototype.validateMaxLength = function (errorMsg) {
1734	var ERROR_MSG = FormCenterHomeScriptResources.MaxLengthErrorMessage.format(this.maxLength);
1735	if (this.maxLength == null)
1736		return true;
1737	var cleanValue = this.elemInput.value.trim();
1738	if (cleanValue != null && cleanValue.length > this.maxLength) {
1739		errorMsg.push(ERROR_MSG);
1740		return false;
1741	}
1742	return true;
1743};
1744
1745// Internal. Used by validate() to ensure user-enterable fields are phone numbers (of NANP format).
1746FieldValidator.prototype.validatePhone = function (errorMsg) {
1747	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidPhoneNumberFormat);
1748	var origLen = errorMsg.length;
1749
1750	switch (this.fieldType) {
1751		case FieldTypes.ShortAnswer:
1752		case FieldTypes.LongAnswer:
1753		case FieldTypes.Password:
1754			var cleanValue = this.elemInput.value.trim();
1755			if (cleanValue != '' && !phoneValidate(cleanValue, intCountryCode))
1756				errorMsg.push(ERROR_MSG);
1757			break;
1758	}
1759
1760	// Return false if validation check failed (number of errors changed).
1761	return origLen == errorMsg.length;
1762}
1763
1764// Internal. Used by validate() to ensure user-enterable fields are postal codes.
1765FieldValidator.prototype.validatePostal = function (errorMsg) {
1766	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidPostalCode);
1767	var origLen = errorMsg.length;
1768
1769	switch (this.fieldType) {
1770		case FieldTypes.ShortAnswer:
1771		case FieldTypes.LongAnswer:
1772		case FieldTypes.Password:
1773			var cleanValue = this.elemInput.value.trim();
1774
1775			if (cleanValue != '' && !isZipCode(cleanValue, intCountryCode))
1776				errorMsg.push(ERROR_MSG);
1777
1778			break;
1779	}
1780
1781	// Return false if validation check failed (number of errors changed).
1782	return origLen == errorMsg.length;
1783}
1784
1785// Internal. Used by validate() to ensure user-enterable fields are email addresses.
1786FieldValidator.prototype.validateEmail = function (errorMsg) {
1787	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidEmailAddressFormat2);
1788	var origLen = errorMsg.length;
1789
1790	switch (this.fieldType) {
1791		case FieldTypes.ShortAnswer:
1792		case FieldTypes.LongAnswer:
1793		case FieldTypes.Password:
1794		case FieldTypes.ReplyEmail:
1795			var cleanValue = this.elemInput.value.trim();
1796
1797			if (cleanValue != '' && !emailValidate(cleanValue))
1798				errorMsg.push(ERROR_MSG);
1799
1800			break;
1801	}
1802
1803	// Return false if validation check failed (number of errors changed).
1804	return origLen == errorMsg.length;
1805}
1806function getNumericThousandsSeparator() {
1807	var dummy = new Number(11111111);
1808	var thousandSep = dummy.toLocaleString().replace(/1/g, '');
1809	return (thousandSep.length > 0 ? thousandSep.charAt(0) : ',');
1810}
1811// Internal. Used by validate() to ensure user-enterable fields match custom expression.
1812FieldValidator.prototype.validateCustom = function (expr, errorMsg) {
1813	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidGenericField);
1814	var origLen = errorMsg.length;
1815
1816	var customRegExp = new RegExp(expr);
1817
1818	switch (this.fieldType) {
1819		case FieldTypes.ShortAnswer:
1820		case FieldTypes.LongAnswer:
1821		case FieldTypes.Password:
1822			var cleanValue = this.elemInput.value.trim();
1823
1824			if (cleanValue != '' && (!customRegExp.test(cleanValue)))
1825				errorMsg.push(ERROR_MSG);
1826
1827			break;
1828	}
1829
1830	// Return false if validation check failed (number of errors changed).
1831	return origLen == errorMsg.length;
1832}
1833
1834// Internal. Used by validate() to ensure user-enterable fields are letters only.
1835FieldValidator.prototype.validateLetters = function (errorMsg) {
1836	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.LettersOnl
1836yField);
1837	var origLen = errorMsg.length;
1838
1839	var letterRegExp = /^[a-zA-Z ]+$/;
1840
1841	switch (this.fieldType) {
1842		case FieldTypes.ShortAnswer:
1843		case FieldTypes.LongAnswer:
1844		case FieldTypes.Password:
1845			var cleanValue = this.elemInput.value.trim();
1846
1847			if (cleanValue != '' && (!letterRegExp.test(cleanValue)))
1848				errorMsg.push(ERROR_MSG);
1849
1850			break;
1851	}
1852
1853	// Return false if validation check failed (number of errors changed).
1854	return origLen == errorMsg.length;
1855}
1856
1857// Internal. Used by validate() to ensure user-enterable fields are numeric (numbers, decimal separators, and group separators allowed).
1858FieldValidator.prototype.validateNumeric = function (errorMsg) {
1859	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.NumericOnlyField);
1860	var origLen = errorMsg.length;
1861
1862	var numericRegExp = new RegExp("^(([0-9]+?[0-9%G]+?[0-9](|%D[0-9]+))|([0-9]*(|%D[0-9]+)))$"
1863		.replace(/%G/g, RegExp.metaEscape(getNumericThousandsSeparator()))
1864		.replace(/%D/g, RegExp.metaEscape(getNumericDecimalSeparator())));
1865
1866	switch (this.fieldType) {
1867		case FieldTypes.ShortAnswer:
1868		case FieldTypes.LongAnswer:
1869		case FieldTypes.Password:
1870			var cleanValue = this.elemInput.value.trim();
1871
1872			if (cleanValue != '' && (!numericRegExp.test(cleanValue)))
1873				errorMsg.push(ERROR_MSG);
1874
1875			break;
1876	}
1877
1878	// Return false if validation check failed (number of errors changed).
1879	return origLen == errorMsg.length;
1880}
1881
1882FieldValidator.prototype.validateCurrency = function (errorMsg) {
1883	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.CurrencyOnlyField);
1884	var origLen = errorMsg.length;
1885
1886	var value = this.elemInput.value.trim();
1887
1888	if (!this.isValidMoney(value)) {
1889		errorMsg.push(ERROR_MSG);;
1890	}
1891
1892	// Return false if validation check failed (nubmer of errors changed).
1893	return origLen == errorMsg.length;
1894}
1895
1896FieldValidator.prototype.isValidMoney = function (value) {
1897	if (value && value != '')
1898		return /^\$?\s*\d+(,\d{3})*(\.\d{1,2})?$/.test(value);
1899	else
1900		return true;
1901};
1902
1903//#region Date Validation
1904
1905FieldValidator.prototype.validateDate = function (errorMsg) {
1906	var origLen = errorMsg.length;
1907
1908	var date = $(this.elemInput[0]).val();
1909	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidDate);
1910
1911	if (!this.isValidDate(date, this.isRequired)) {
1912		errorMsg.push(ERROR_MSG);
1913	}
1914
1915	// Return false if validation check failed (nubmer of errors changed).
1916	return origLen == errorMsg.length;
1917}
1918
1919FieldValidator.prototype.validateTime = function (errorMsg) {
1920	var origLen = errorMsg.length;
1921
1922	var time = $(this.elemInput[0]).val();
1923	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidTime);
1924
1925	if (!this.isValidTime(time, this.isRequired)) {
1926		errorMsg.push(ERROR_MSG);
1927	}
1928
1929	// Return false if validation check failed (nubmer of errors changed).
1930	return origLen == errorMsg.length;
1931}
1932
1933FieldValidator.prototype.validateDateTime = function (errorMsg) {
1934	var origLen = errorMsg.length;
1935
1936	var date = $(this.elemInput[0]).val();
1937
1938	var time = $(this.elemInput[1]).val();
1939
1940	var validDate = this.isValidDate(date, this.isRequired);
1941
1942	var validTime = this.isValidTime(time, this.isRequired);
1943	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.InvalidDateTime);
1944
1945	if (!validDate && !validTime) {
1946		if (!this.alreadySetFocus) {
1947			this.focusElementIndex = 0;
1948			this.alreadySetFocus = true;
1949		}
1950		errorMsg.push(ERROR_MSG);
1951	}
1952	else if (!validDate) {
1953		if (!this.alreadySetFocus) {
1954			this.focusElementIndex = 0;
1955			this.alreadySetFocus = true;
1956		}
1957		errorMsg.push(ERROR_MSG);
1958	}
1959	else if (!validTime) {
1960		if (!this.alreadySetFocus) {
1961			this.focusElementIndex = 1;
1962			this.alreadySetFocus = true;
1963		}
1964		errorMsg.push(ERROR_MSG);
1965	}
1966
1967	// Return false if validation check failed (nubmer of errors changed).
1968	return origLen == errorMsg.length;
1969}
1970
1971FieldValidator.prototype.validateDateSpan = function (errorMsg) {
1972	var origLen = errorMsg.length;
1973
1974	var date = $(this.elemInput[0]).val();
1975
1976	var dateSpan = $(this.elemInput[1]).val();
1977
1978	if (!this.isValidDate(date, this.isRequired)) {
1979		if (!this.alreadySetFocus) {
1980			this.focusElementIndex = 0;
1981			this.alreadySetFocus = true;
1982		}
1983		errorMsg.push(FormCenterHomeScriptResources.InvalidStartDate);
1984	}
1985	if (!this.isValidDate(dateSpan, this.isRequired)) {
1986		if (!this.alreadySetFocus) {
1987			this.focusElementIndex = 1;
1988			this.alreadySetFocus = true;
1989		}
1990		errorMsg.push(FormCenterHomeScriptResources.InvalidEndDate);
1991	}
1992	if (!this.isValidDateRange(date, dateSpan, this.isRequired, this.isRequired)) {
1993		if (!this.alreadySetFocus) {
1994			this.focusElementIndex = 0;
1995			this.alreadySetFocus = true;
1996		}
1997		errorMsg.push(FormCenterHomeScriptResources.InvalidDateSpan);
1998	}
1999
2000	// Return false if validation check failed (nubmer of errors changed).
2001	return origLen == errorMsg.length;
2002}
2003
2004FieldValidator.prototype.validateTimeSpan = function (errorMsg) {
2005	var origLen = errorMsg.length;
2006
2007	var time = $(this.elemInput[0]).val();
2008
2009	var timeSpan = $(this.elemInput[1]).val();
2010
2011	if (!this.isValidTime(time, this.isRequired)) {
2012		if (!this.alreadySetFocus) {
2013			this.focusElementIndex = 0;
2014			this.alreadySetFocus = true;
2015		}
2016		errorMsg.push(FormCenterHomeScriptResources.InvalidStartTime);
2017	}
2018
2019	if (!this.isValidTime(timeSpan, this.isRequired)) {
2020		if (!this.alreadySetFocus) {
2021			this.focusElementIndex = 1;
2022			this.alreadySetFocus = true;
2023		}
2024		errorMsg.push(FormCenterHomeScriptResources.InvalidEndTime);
2025	}
2026
2027	if (!this.isValidTimeRange(time, timeSpan, this.isRequired, this.isRequired)) {
2028		if (!this.alreadySetFocus) {
2029			this.focusElementIndex = 0;
2030			this.alreadySetFocus = true;
2031		}
2032		errorMsg.push(FormCenterHomeScriptResources.InvalidTimeSpan);
2033	}
2034
2035	// Return false if validation check failed (nubmer of errors changed).
2036	return origLen == errorMsg.length;
2037}
2038
2039FieldValidator.prototype.validateDateTimeSpan = function (errorMsg) {
2040	var origLen = errorMsg.length;
2041
2042	var date = $(this.elemInput[0]).val();
2043
2044	var dateSpan = $(this.elemInput[1]).val();
2045
2046	var time = $(this.elemInput[2]).val();
2047
2048	var timeSpan = $(this.elemInput[3]).val();
2049
2050	var validDate = this.isValidDate(date, this.isRequired);
2051
2052	var validTime = this.isValidTime(time, this.isRequired);
2053
2054	if (!validDate && !validTime) {
2055		if (!this.alreadySetFocus) {
2056			this.focusElementIndex = 0;
2057			this.alreadySetFocus = true;
2058		}
2059		errorMsg.push(FormCenterHomeScriptResources.InvalidStartDateTime);
2060	}
2061	else if (!validDate) {
2062		if (!this.alreadySetFocus) {
2063			this.focusElementIndex = 0;
2064			this.alreadySetFocus = true;
2065		}
2066		errorMsg.push(FormCenterHomeScriptResources.InvalidStartDate);
2067	}
2068	else if (!validTime) {
2069		if (!this.alreadySetFocus) {
2070			this.focusElementIndex = 2;
2071			this.alreadySetFocus = true;
2072		}
2073		errorMsg.push(FormCenterHomeScriptResources.InvalidStartTime);
2074	}
2075
2076	var validSpanDate = this.isValidDate(dateSpan, this.isRequired);
2077
2078	var validSpanTime = this.isValidTime(timeSpan, this.isRequired);
2079
2080	if (!validSpanDate && !validSpanTime) {
2081		if (!this.alreadySetFocus) {
2082			this.focusElementIndex = 1;
2083			this.alreadySetFocus = true;
2084		}
2085		errorMsg.push(FormCenterHomeScriptResources.InvalidEndDateTime);
2086	}
2087	else if (!validSpanDate) {
2088		if (!this.alreadySetFocus) {
2089			this.focusElementIndex = 1;
2090			this.alreadySetFocus = true;
2091		}
2092		errorMsg.push(FormCenterHomeScriptResources.InvalidEndDate);
2093	}
2094	else if (!validSpanTime) {
2095		if (!this.alreadySetFocus) {
2096			this.focusElementIndex = 3;
2097			this.alreadySetFocus = true;
2098		}
2099		errorMsg.push(FormCenterHomeScriptResources.InvalidEndTime);
2100	}
2101	var isDayBeforeMonth = getDateFormat().toLocaleLowerCase() == "dd/mm/yyyy" ? true : false;
2102	if (!this.isValidDateTimeRange(getDateFromInput(this.elemInput[0], isDayBeforeMonth), getDateFromInput(this.elemInput[1], isDayBeforeMonth), this.isRequired, this.isRequired, time, timeSpan, this.isRequired, this.isRequired)) {
2103		if (!this.alreadySetFocus) {
2104			this.focusElementIndex = 1;
2105			this.alreadySetFocus = true;
2106		}
2107		errorMsg.push(FormCenterHomeScriptResources.InvalidDateTimeSpan);
2108	}
2109
2110	// Return false if validation check failed (nubmer of errors changed).
2111	return origLen == errorMsg.length;
2112}
2113
2114FieldValidator.prototype.isValidDate = function (date, dateRequired) {
2115	var objDate = new dateValidator();
2116
2117	return objDate.dateValidateNew(date, dateRequired, '');
2118}
2119
2120FieldValidator.prototype.isValidTime = function (time, timeRequired) {
2121	var objDate = new dateValidator();
2122
2123	var amIndex = time.toLowerCase().indexOf('am');
2124	var pmIndex = time.toLowerCase().indexOf('pm');
2125
2126	if (amIndex != -1) {
2127		time = time.substring(0, amIndex).replace(" ", "");
2128
2129		if (time.trim() === "") {
2130			return false;
2131		}
2132	}
2133	else if (pmIndex != -1) {
2134		time = time.substring(0, pmIndex).replace(" ", "");
2135
2136		if (time.trim() === "") {
2137			return false;
2138		}
2139	}
2140
2141	return objDate.timeValidate(time, timeRequired, '');
2142}
2143
2144FieldValidator.prototype.isValidTimeRange = function (startTime, endTime, startTimeRequired, endTimeRequired) {
2145	var objDate = new dateValidator();
2146
2147	objDate.ysnAllowTimeOnly = true;
2148	objDate.dtiStartTime = this.stripAMPM(startTime);
2149	objDate.ysnStartTimeRequired = startTimeRequired;
2150	objDate.dtiEndTime = this.stripAMPM(endTime);
2151	objDate.ysnEndTimeRequired = endTimeRequired;
2152	objDate.ysnDatesAreEqual = true;
2153	objDate.strStartAMPM = this.getAMPMString(startTime);
2154	objDate.strEndAMPM = this.getAMPMString(endTime);
2155	objDate.timesAlreadyValidated = true;
2156
2157	return objDate.timeOrderValidate();
2158
2159}
2160
2161FieldValidator.prototype.isValidDateRange = function (startDate, endDate, startDateRequired, endDateRequired) {
2162	var objDate = new dateValidator();
2163	objDate.setStartDate(checkDateFormatReturnUSString(startDate, false));
2164	objDate.setEndDate(checkDateFormatReturnUSString(endDate, false));
2165	objDate.setStartDateRequired(startDateRequired);
2166	objDate.setEndDateRequired(endDateRequired);
2167	objDate.datesAlreadyValidated = true;
2168
2169	return objDate.dateOrderValidateNew();
2170}
2171
2172FieldValidator.prototype.isValidDateTimeRange = function (startDate, endDate, startDateRequired, endDateRequired, startTime, endTime, startTimeRequired, endTimeRequired) {
2173	var objDate = new dateValidator();
2174
2175
2176	objDate.setStartDate(checkDateFormatReturnUSString(startDate, false));
2177	objDate.setEndDate(checkDateFormatReturnUSString(endDate, false));
2178	objDate.setStartDateRequired(startDateRequired);
2179	objDate.setEndDateRequired(endDateRequired);
2180	objDate.ysnAllowEqualDates = true;
2181	objDate.datesAlreadyValidated = true;
2182
2183	var validDateOrder = objDate.dateOrderValidateNew();
2184
2185	objDate.strStartAMPM = this.getAMPMString(startTime);
2186	objDate.strEndAMPM = this.getAMPMString(endTime);
2187	objDate.ysnAllowTimeOnly = true;
2188	objDate.ysnAllowEqualTimes = !objDate.ysnDatesAreEqual;
2189	objDate.dtiStartTime = this.stripAMPM(startTime);
2190	objDate.ysnStartTimeRequired = startTimeRequired;
2191	objDate.dtiEndTime = this.stripAMPM(endTime);
2192	objDate.ysnEndTimeRequired = endTimeRequired;
2193	objDate.timesAlreadyValidated = true;
2194
2195	var validTimeOrder = objDate.timeOrderValidate();
2196
2197	return validDateOrder && validTimeOrder;
2198}
2199
2200FieldValidator.prototype.stripAMPM = function (time) {
2201	var amIndex = time.toLowerCase().indexOf('am');
2202	var pmIndex = time.toLowerCase().indexOf('pm');
2203
2204	if (amIndex != -1) {
2205		time = time.substring(0, amIndex).replace(" ", "");
2206	}
2207	else if (pmIndex != -1) {
2208		time = time.substring(0, pmIndex).replace(" ", "");
2209	}
2210
2211	return time;
2212}
2213
2214FieldValidator.prototype.getAMPMString = function (time) {
2215	var amIndex = time.toLowerCase().indexOf('am');
2216	var pmIndex = time.toLowerCase().indexOf('pm');
2217
2218	var AMPM = '';
2219
2220	if (amIndex != -1) {
2221		AMPM = time.substring(amIndex).replace(" ", "");
2222	}
2223	else if (pmIndex != -1) {
2224		AMPM = time.substring(pmIndex).replace(" ", "");
2225	}
2226	return AMPM;
2227}
2228
2229//#endregion Date Validation
2230
2231//checkbox validation done for min and max answer selcted
2232FieldValidator.prototype.checkBoxValidation = function (errorMsg) {
2233	var origLen = errorMsg.length;
2234	if (this.fieldType == FieldTypes.Checkboxes && ((this.minAnswer != "" && this.minAnswer != undefined) || (this.maxAnswer != "" && this.maxAnswer != undefined))) {
2235		var i = 0, len = this.elemInput.length;
2236		var checkedCount = 0;
2237		for (; i < len; i++) {
2238			if (this.elemInput[i].checked)
2239				checkedCount++;
2240		}
2241		//validation for checkbox min max fields
2242		if (this.minAnswer != "" && this.minAnswer != undefined) {
2243			if (checkedCount < parseInt(this.minAnswer, 10)) // the message is not localized on purpose as this has text and dynamic value
2244				errorMsg.push("This field must have at least " + parseInt(this.minAnswer, 10) + " options selected");
2245		}
2246
2247		if (origLen == errorMsg.length && this.maxAnswer != "" && this.maxAnswer != undefined) {
2248			if (checkedCount > parseInt(this.maxAnswer, 10)) // the message is not localized on purpose as this has text and dynamic value
2249				errorMsg.push("This field can have at most " + parseInt(this.maxAnswer, 10) + " options selected");
2250		}
2251	}
2252
2253	// Return false if validation check failed (number of errors changed).
2254	return origLen == errorMsg.length;
2255};
2256
2257// Internal. Used by validate() to ensure required fields are set.
2258FieldValidator.prototype.validateRequired = function (errorMsg) {
2259	var ERROR_MSG = this.getErrorMessage(FormCenterHomeScriptResources.RequiredField);//FormCenterHomeScriptResources.RequiredField;
2260	var origLen = errorMsg.length;
2261	switch (this.fieldType) {
2262		case FieldTypes.ShortAnswer:
2263		case FieldTypes.LongAnswer:
2264		case FieldTypes.ReplyEmail:
2265		case FieldTypes.Password:
2266		case FieldTypes.FileUpload:
2267		case FieldTypes.CodeSnippet:
2268		case FieldTypes.InputLink:
2269		case FieldTypes.DatePicker:
2270		case FieldTypes.InputImage:
2271			if (this.elemInput != 'undefined' && this.elemInput.value != undefined) {
2272				if (this.elemInput.value.trim() == '')
2273					errorMsg.push(ERROR_MSG);
2274			}
2275			break;
2276		case FieldTypes.Checkboxes:
2277		case FieldTypes.RadioButtons:
2278			var i = 0, len = this.elemInput.length;
2279
2280			for (; i < len; i++) {
2281				if (this.elemInput[i].checked)
2282					break;
2283			}
2284
2285			if (i == len)
2286				errorMsg.push(ERROR_MSG);
2287
2288			break;
2289		case FieldTypes.Dropdown:
2290		case FieldTypes.FormLink:
2291			if (this.elemInput.selectedIndex <= 0)
2292				errorMsg.push(ERROR_MSG);
2293
2294			break;
2295		case FieldTypes.DateTime:
2296			var i = 0, len = this.elemInput.length;
2297
2298			for (; i < len; i++) {
2299				if (this.elemInput[i].value.trim() == '') {
2300					errorMsg.push(ERROR_MSG);
2301					this.focusElementIndex = i;
2302					break;
2303				}
2304			}
2305	}
2306	// Return false if validation check failed (number of errors changed).
2307	return origLen == errorMsg.length;
2308};
2309
2310// Performs validation for field and updates format if necessary.
2311FieldValidator.prototype.validate = function (assignFocusOnFailure, checkForInappropriateWords) {
2312	var errorMsg = [];
2313
2314	// Element not present OR disabled, pass (skipped).
2315	if (this.elemInput == null || !this.enabled)
2316		return true;
2317
2318	if (!this.isRequired || (this.isRequired && this.validateRequired(errorMsg))) {
2319		//checkbox validation done for min and max answer selected
2320		if (this.checkBoxValidation(errorMsg)) {
2321			switch (this.formatValidation) {
2322				case FieldValidation.Letters:
2323					this.validateLetters(errorMsg);
2324					break;
2325				case FieldValidation.Numeric:
2326					this.validateNumeric(errorMsg);
2327					break;
2328				case FieldValidation.Currency:
2329					this.validateCurrency(errorMsg);
2330					break;
2331				case FieldValidation.PhoneNumber:
2332					this.validatePhone(errorMsg);
2333					break;
2334				case FieldValidation.PostalCode:
2335					this.validatePostal(errorMsg);
2336					break;
2337				case FieldValidation.EmailAddress:
2338					this.validateEmail(errorMsg);
2339					break;
2340				case FieldValidation.RegEx:
2341					this.validateCustom(this.formatValidationCustom, errorMsg);
2342					break;
2343				case FieldValidation.Date:
2344					this.validateDate(errorMsg);
2345					break;
2346				case FieldValidation.Time:
2347					this.validateTime(errorMsg);
2348					break;
2349				case FieldValidation.DateTime:
2350					this.validateDateTime(errorMsg);
2351					break;
2352				case FieldValidation.DateSpan:
2353					this.validateDateSpan(errorMsg);
2354					break;
2355				case FieldValidation.TimeSpan:
2356					this.validateTimeSpan(errorMsg);
2357					break;
2358				case FieldValidation.DateTimeSpan:
2359					this.validateDateTimeSpan(errorMsg);
2360					break;
2361			}
2362		}
2363	}
2364	if (this.fieldType === FieldTypes.DatePicker && this.elemInput.value.trim() != '') {
2365		//validate date picker value (based on telerik mvc datePicker)
2366		var datepicker = $(this.elemInput).data("tDatePicker");
2367		if ($(this.elemInput).hasClass('t-state-error') || datepicker.parse(this.elemInput.value.trim()) == null)
2368			errorMsg.push("Invalid date format");
2369	}
2370	if (this.fieldType === FieldTypes.ShortAnswer || this.fieldType === FieldTypes.LongAnswer) {
2371		var validator = this;
2372
2373		if (checkForInappropriateWords != null && typeof (checkForInappropriateWords.push) == 'function') {
2374			checkForInappropriateWords.push(validator);
2375		} else {
2376			if (HasInappropriateWords(this.elemInput.value.trim())) {
2377				$(this.elemInput).addClass('t-state-error');
2378				errorMsg.push(FormCenterHomeScriptResources.InappropriateWords);
2379			}
2380		}
2381	}
2382
2383	if (FeatureToggles.isActive("CMS.FormCenter.EnableServerSideValidationsForSubmissions")
2384		&& this.fieldType === FieldTypes.FileUpload
2385		&& this.elemInput.value.trim() != '') {
2386		if (Math.round((this.elemInput.files[0].size / 1024)) > 20480)
2387			errorMsg.push("Files cannot be larger than 20 MB.");
2388	}
2389
2390	this.validateMaxLength(errorMsg);
2391
2392	if (errorMsg.length > 0 && $(this.elemInput).is(":visible")) {
2393		this.errorShow(errorMsg);
2394
2395		if (assignFocusOnFailure) {
2396			this.focusErrorElement();
2397		}
2398
2399		return false;
2400	} else {
2401		this.errorClear();
2402		return true;
2403	}
2404
2405};
2406
2407// Performs validation for admin edit internal only fields and updates format if necessary.
2408FieldValidator.prototype.validateInternal = function (assignFocusOnFailure, checkForInappropriateWords) {
2409	if (this.isInternal) {
2410		var errorMsg = [];
2411
2412		// Element not present OR disabled, pass (skipped).
2413		if (this.elemInput == null || !this.enabled)
2414			return true;
2415
2416		if (!this.isRequired || (this.isRequired && this.validateRequired(errorMsg))) {
2417			//checkbox validation done for min and max answer selected
2418			if (this.checkBoxValidation(errorMsg)) {
2419				switch (this.formatValidation) {
2420					case FieldValidation.Letters:
2421						this.validateLetters(errorMsg);
2422						break;
2423					case FieldValidation.Numeric:
2424						this.validateNumeric(errorMsg);
2425						break;
2426					case FieldValidation.Currency:
2427						this.validateCurrency(errorMsg);
2428						break;
2429					case FieldValidation.PhoneNumber:
2430						this.validatePhone(errorMsg);
2431						break;
2432					case FieldValidation.PostalCode:
2433						this.validatePostal(errorMsg);
2434						break;
2435					case FieldValidation.EmailAddress:
2436						this.validateEmail(errorMsg);
2437						break;
2438					case FieldValidation.RegEx:
2439						this.validateCustom(this.formatValidationCustom, errorMsg);
2440						break;
2441					case FieldValidation.Date:
2442						this.validateDate(errorMsg);
2443						break;
2444					case FieldValidation.Time:
2445						this.validateTime(errorMsg);
2446						break;
2447					case FieldValidation.DateTime:
2448						this.validateDateTime(errorMsg);
2449						break;
2450					case FieldValidation.DateSpan:
2451						this.validateDateSpan(errorMsg);
2452						break;
2453					case FieldValidation.TimeSpan:
2454						this.validateTimeSpan(errorMsg);
2455						break;
2456					case FieldValidation.DateTimeSpan:
2457						this.validateDateTimeSpan(errorMsg);
2458						break;
2459				}
2460			}
2461		}
2462		if (this.fieldType === FieldTypes.DatePicker && this.elemInput.value.trim() != '') {
2463			//validate date picker value (based on telerik mvc datePicker)
2464			var datepicker = $(this.elemInput).data("tDatePicker");
2465			if ($(this.elemInput).hasClass('t-state-error') || datepicker.parse(this.elemInput.value.trim()) == null)
2466				errorMsg.push("Invalid date format");
2467		}
2468		if (this.fieldType === FieldTypes.ShortAnswer || this.fieldType === FieldTypes.LongAnswer) {
2469			var validator = this;
2470
2471			if (checkForInappropriateWords != null && typeof (checkForInappropriateWords.push) == 'function') {
2472				checkForInappropriateWords.push(validator);
2473			} else {
2474				if (HasInappropriateWords(this.elemInput.value.trim())) {
2475					$(this.elemInput).addClass('t-state-error');
2476					errorMsg.push(FormCenterHomeScriptResources.InappropriateWords);
2477				}
2478			}
2479		}
2480
2481		this.validateMaxLength(errorMsg);
2482
2483		if (errorMsg.length > 0 && $(this.elemInput).is(":visible")) {
2484			this.errorShow(errorMsg);
2485
2486			if (assignFocusOnFailure) {
2487				this.focusErrorElement();
2488			}
2489
2490			return false;
2491		} else {
2492			this.errorClear();
2493			return true;
2494		}
2495	}
2496	else {
2497		return true;
2498	}
2499};
2500
2501FieldValidator.prototype.handleInappropriateWords = function (focus) {
2502	var errorMsg = [];
2503	$(this.elemInput).addClass('t-state-error');
2504	errorMsg.push(FormCenterHomeScriptResources.InappropriateWords);
2505	this.errorShow(errorMsg);
2506	if (focus) {
2507		this.focusErrorElement();
2508	}
2509};
2510
2511FieldValidator.prototype.focusErrorElement = function () {
2512	var scrollIntoView = function (element) {
2513		var offset = $(element).offset();
2514		var elementTop = offset.top;
2515		// Add a 50px padding to the top of the element, just for aesthetics
2516		$(document).scrollTop(elementTop - 150);
2517	};
2518
2519	if (this.elemInputIsArray) {
2520		if ($(this.elemInput).is(":visible")) {
2521			if (this.elemInput.length > this.focusElementIndex) {
2522				this.elemInput[this.focusElementIndex].focus();
2523			}
2524			else {
2525				this.elemInput[0].focus();
2526			}
2527			scrollIntoView(this.elemInput[0]);
2528		}
2529		this.alreadySetFocus = false;
2530		this.focusElementIndex = 0;
2531	}
2532	else {
2533		if ($(this.elemInput).is(":visible")) {
2534			this.elemInput.focus();
2535			scrollIntoView(this.elemInput);
2536		}
2537	}
2538}
2539
2540// Shows error message for field. Called by validate() if field value fails validation.
2541FieldValidator.prototype.errorShow = function (messages) {
2542	if (this.elemErrorNote)
2543		this.errorClear();
2544
2545	// Element not defined, cannot perform operation.
2546	if (this.elemInput == null)
2547		return;
2548
2549	this.$elemContainer.addClass('error');
2550	this.elemErrorNote = [];
2551
2552	$('ol li.error div').addClass('selfClear');
2553
2554	if (this.elemInput != undefined) {
2555		if (this.elemInput["0"] != undefined) {
2556			//Check current element is radio
2557			if (this.elemInput["0"].type == "radio" & !(this.$elemContainer.closest('li').hasClass('error'))) {
2558				this.$elemContainer.closest('li').addClass('error');
2559				originalTextColorRadio = this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color;
2560				this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color = "#800000";
2561			}
2562			else //Check current element is checkbox
2563				if (this.elemInput["0"].type == "checkbox" & !(this.$elemContainer.closest('li').hasClass('error'))) {
2564					this.$elemContainer.closest('li').addClass('error');
2565					originalTextColorCheckBox = this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color;
2566					this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color = "#800000";
2567				}
2568		}
2569	}
2570
2571	for (var i = 0, len = messages.length; i < len; i++) {
2572		var errorElemMsg = document.createElement('p');
2573
2574		errorElemMsg.className = 'explanation';
2575
2576		var multiSelectable = this.elemInput[0] !== undefined && this.elemInput.tagName !== "SELECT";
2577		if (multiSelectable) {
2578			errorElemMsg.id = 'errorMsg' + this.elemInput[0].id;
2579		}
2580		else {
2581			errorElemMsg.id = 'errorMsg' + this.elemInput.id;
2582		}
2583
2584		errorElemMsg.innerHTML = messages[i];
2585
2586		if (this.elemInput != undefined) {
2587			if (this.elemInput["0"] != undefined) {
2588				if (this.elemInput["0"].type == "radio" || this.elemInput["0"].type == "checkbox") {
2589					errorElemMsg.style.backgroundColor = "#940E0D"
2590					errorElemMsg.style.color = "#FFFFFF";
2591					errorElemMsg.style.fontWeight = "bold"
2592					errorElemMsg.style.lineHeight = "1.2"
2593					errorElemMsg.style.width = "94%"
2594					errorElemMsg.style.margin = ".5em 0 0"
2595					errorElemMsg.style.padding = ".5em"
2596				}
2597			}
2598		}
2599
2600		this.elemContainer.appendChild(errorElemMsg);
2601
2602		this.elemErrorNote.push(errorElemMsg);
2603	}
2604	!window.isRemoveSetHeights && typeof SetHeights === "function" && SetHeights();
2605};
2606
2607// Clears error message for field. Called by validate() if field value passes validation.
2608FieldValidator.prototype.errorClear = function () {
2609	if (this.elemInput != undefined) {
2610		if (this.elemInput["0"] != undefined) {
2611			var i = 0, len = this.elemInput.length;
2612			for (; i < len; i++) {
2613				if (this.elemInput[i].checked)
2614					break;
2615			}
2616
2617			if (i != len) {
2618				if (this.elemInput["0"].type == "radio") {
2619					this.$elemContainer.closest('li').removeClass('error');
2620					this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color = originalTextColorRadio;
2621				}
2622				else if (this.elemInput["0"].type == "checkbox") {
2623					this.$elemContainer.closest('li').removeClass('error');
2624					this.$elemContainer.closest("fieldset")[0].childNodes[0].style.color = originalTextColorCheckBox;
2625				}
2626			}
2627		}
2628	}
2629	if (this.elemErrorNote == null)
2630		return;
2631	else if (this.elemInput == null)
2632		return;
2633
2634	if (this.elemErrorNote.length > 0) {
2635		var errorParent = this.elemErrorNote[0].parentNode;
2636
2637		for (var i = 0, len = this.elemErrorNote.length; i < len; i++)
2638			errorParent.removeChild(this.elemErrorNote[i]);
2639
2640		this.elemErrorNote = null;
2641	}
2642
2643	this.$elemContainer.removeClass('error');
2644	!window.isRemoveSetHeights && typeof SetHeights === "function" && SetHeights();
2645};
2646
2647FieldValidator.prototype.getErrorMessage = function (errorTemplateMsg) {
2648	var $fieldElemContainer = $(this.elemContainer);
2649
2650	if (!$fieldElemContainer.hasClass('formFieldContainer'))
2651	{
2652		$fieldElemContainer = $fieldElemContainer.parents('.formFieldContainer');
2653	}
2654
2655	var $fieldLabelElem = $fieldElemContainer.find('.labelForFieldElement');
2656	var fieldLabel = '';
2657
2658	if ($fieldLabelElem.length > 0)
2659	{
2660		fieldLabel = $fieldLabelElem.text().replace(/\*/g, '');
2661	}
2662	else
2663	{
2664		$fieldLabelElem = $fieldElemContainer.find('legend');
2665		if ($fieldLabelElem.length > 0)
2666		{
2667			fieldLabel = $fieldLabelElem.text().replace(/\*/g, '');
2668		}
2669	}
2670
2671	var errorMsg = errorTemplateMsg.format(fieldLabel);
2672
2673	return errorMsg;
2674}
2675;
2676/// <reference path="../../../../Scripts/json2.js"/>
2677/// <reference path="../../../../Scripts/HtmlExtensionSupport.js"/>
2678/// <reference path="../../../../Common/GlobalJSFunctionsDetail.js" />
2679/// <reference path="Home.js" />
2680
2681// Configurable in debug console. Controls behavior of FieldConditionsRunner.log().
2682var condRunnerHideLogDupes = true;
2683
2684// Missing methods for IE
2685if (!Element.prototype.matches) {
2686	Element.prototype.matches =
2687		Element.prototype.msMatchesSelector ||
2688		Element.prototype.webkitMatchesSelector;
2689}
2690
2691if (!Element.prototype.closest) {
2692	Element.prototype.closest = function (s) {
2693		var el = this;
2694
2695		do {
2696			if (Element.prototype.matches.call(el, s)) return el;
2697			el = el.parentElement || el.parentNode;
2698		} while (el !== null && el.nodeType === 1);
2699		return null;
2700	};
2701}
2702
2703////////// Helper Functions ///////////////
2704
2705$("*").focus(function () {
2706	var inputs = $("input[type=text][cp5ph=true], textarea[cp5ph=true]");
2707	if (inputs != null) {
2708		for (var i = 0; i < inputs.length; i++) {
2709			var elementName = inputs[i].getAttribute('id');
2710			if (elementName != null) {
2711				var top = $('#' + elementName).offset().top;
2712				var left = $('#' + elementName).offset().left;
2713				if (top != -2 && left != -2)
2714					$('#ph_' + elementName).offset({ left: (left + 5), top: (top + 5) });
2715			}
2716		}
2717	}
2718});
2719
2720// Helper that handles replacement of special characters.
2721// * value - variable to handle characters of.
2722function HandleCharacters(value) {
2723	return value.replace(/,/g, '_d');
2724}
2725
2726if (Array.prototype.any == null && !$.isFunction(Array.prototype.any)) {
2727	// Returns true if callback condition returns true for any items in array.
2728	// * callback - Callback function with single argument for current index. The 'this' reference points to the array.
2729	Array.prototype.any = function (callback) {
2730		if (this == null)
2731			return false;
2732
2733		for (var i = 0, len = this.length; i < len; i++) {
2734			if (callback.call(this, i))
2735				return true;
2736		}
2737
2738		return false;
2739	}
2740}
2741
2742if (Array.prototype.all == null && !$.isFunction(Array.prototype.all)) {
2743	// Returns true if callback condition returns true for all items in array.
2744	// * callback - Callback function with single argument for current index. The 'this' reference points to the array.
2745	Array.prototype.all = function (callback) {
2746		if (this == null)
2747			return false;
2748
2749		for (var i = 0, len = this.length; i < len; i++) {
2750			if (!callback.call(this, i))
2751				return false;
2752		}
2753
2754		return true;
2755	};
2756}
2757
2758if (Error.argNull == null || !$.isFunction(Error.argNull)) {
2759	// Static helper that creates error when null argument that should not be null is encountered.
2760	// * argName - Name of problematic null argument.
2761	Error.argNull = function (argName) {
2762		return new ReferenceError(argName + " cannot be null");
2763	}
2764}
2765
2766// Overridden on a per-form basis. Retrieves validator information for submission validation.
2767// * validators - Validator dictionary.
2768function getFormConditionData() {
2769	return [];
2770}
2771
2772// Prints useful debugging information for FieldConditionsRunner.run() results. Use as done callback.
2773// Note: When minifiying the JavaScript, this function can/should be removed.
2774// * logs - Log generated by run().
2775function debugCondRunnerLogResults(logs) {
2776	if (logs == null)
2777		throw new Error.argNull("logs");
2778
2779	console.log("## run() started at " + (new Date()) + " ##");
2780
2781	for (var i = 0, iLen = logs.length; i < iLen; i++) {
2782		var log = logs[i];
2783		var resultEx = log.isMet ? " (met)" : " (not met)";
2784
2785		console.log(
2786			"field: " + log.id +
2787			", condIndex: " + log.condIndex +
2788			", action: " + ConditionActions.getName(log.actType) +
2789			", result: " + ConditionRunnerActResult.getName(log.result) + resultEx);
2790
2791		if (log.needRestart)
2792			console.log("-- restart --");
2793	}
2794
2795	console.log("## run() ended ##");
2796	console.log("\t");
2797}
2798
2799// Helper that repositions line siblings by re-assigning left/middle/right classes.
2800// * liSiblingList - Array of LI elements for a form line.
2801function repositionLineSiblings(liSiblingList) {
2802	if (liSiblingList == null)
2803		throw new Error.argNull("liSiblingList");
2804
2805	var sibling, $sibling;
2806	var len = liSiblingList.length;
2807
2808	if (len > 0) {
2809		var operableNodes = [];
2810
2811		for (var i = 0; i < len; i++) {
2812			sibling = liSiblingList[i];
2813			$sibling = $(sibling);
2814
2815			if (!$sibling.hasClass('hidden'))
2816				operableNodes.push($sibling);
2817		}
2818
2819		len = operableNodes.length;
2820
2821		if (len > 0) {
2822			operableNodes[0].removeClass('middle right').addClass('left');
2823
2824			var j = 1;
2825
2826			for (; j < len - 1; j++)
2827				operableNodes[j].removeClass('left right').addClass('middle');
2828
2829			if (j < len)
2830				operableNodes[j].removeClass('left middle').addClass('right');
2831		}
2832	}
2833}
2834
2835// Helper that gets sibling field LI elements for a line field LI element.
2836// * liElem - The LI element for a form field to get line siblings LIs for.
2837function getLineSiblings(liElem) {
2838
2839	if (liElem == null && (window.location.href).toString().toLowerCase().indexOf("print") != -1)
2840		return "";
2841
2842	if (liElem == null)
2843		throw new Error.argNull("liElem");
2844
2845	var nodeList = [];
2846	var startNode = liElem;
2847
2848	// Get start of line.
2849	while (startNode && !$(startNode).hasClass('lineStart'))
2850		startNode = previousElementSibling(startNode);
2851
2852	// Get end of line.
2853	if (startNode) {
2854		var endNode = startNode;
2855		var $endNode = null;
2856
2857		while (endNode != null) {
2858			$endNode = $(endNode);
2859
2860			if ($endNode.hasClass('lineEnd'))
2861				break;
2862
2863			endNode = nextElementSibling(endNode);
2864		}
2865	}
2866
2867	if (startNode && endNode) {
2868		var nodeEnum = startNode;
2869
2870		while (true) {
2871			nodeList.push(nodeEnum);
2872
2873			if (nodeEnum == endNode)
2874				break;
2875
2876			nodeEnum = nextElementSibling(nodeEnum);
2877		}
2878	}
2879
2880	return nodeList;
2881}
2882
2883////////// Enumerations ///////////////////
2884
2885// Condition actions.
2886var ConditionActions = {
2887	None: 0,
2888	Show: 1,
2889	Hide: 2,
2890	Require: 3,
2891	RedirectTo: 4,
2892	getName: function (value) {
2893		for (var k in ConditionActions) {
2894			if (ConditionActions[k] == value)
2895				return k;
2896		}
2897
2898		return null;
2899	}
2900};
2901
2902// Condition comparison types.
2903var ConditionComparison = {
2904	None: 0,
2905	GreaterThan: 1,
2906	LessThan: 2,
2907	EqualTo: 3,
2908	NotEqualTo: 4,
2909	Contains: 5,
2910	Available: 6,
2911	Unavailable: 7,
2912	Between: 8,
2913	getName: function (value) {
2914		for (var k in ConditionComparison) {
2915			if (ConditionComparison[k] == value)
2916				return k;
2917		}
2918
2919		return null;
2920	}
2921};
2922
2923// Condition runner action results.
2924var ConditionRunnerActResult = {
2925	None: 0,
2926	SuccessImplicit: 1,
2927	SuccessExplicit: 2,
2928	SkipDuplicate: 3,
2929	SkipContradiction: 4,
2930	getName: function (value) {
2931		for (var k in ConditionRunnerActResult) {
2932			if (ConditionRunnerActResult[k] == value)
2933				return k;
2934		}
2935
2936		return null;
2937	}
2938};
2939
2940////////// FieldCondition Class ///////////
2941
2942// Internal. Creates instance of FieldCondition class.
2943// * parent - Parent FieldConditions instance.
2944// * condInfo - Object containing properties {compType, compValue, actElemInput, actID, actType, actFieldType, actURL, actURLNewWindow}.
2945function FieldCondition(parent, condInfo) {
2946	if (parent == null)
2947		throw new Error.argNull("parent");
2948	else if (condInfo == null)
2949		throw new Error.argNull("condInfo");
2950
2951	$.extend(this, condInfo);
2952
2953	// Set instance parent.
2954	this.parent = parent;
2955
2956	// Process actElemInput argument.
2957	var actElemInput = this.actElemInput;
2958	this.actElemInputIsArray = $.isArray(actElemInput);
2959
2960	if (this.actElemInputIsArray) {
2961		for (var i = 0, len = actElemInput.length; i < len; i++) {
2962			if (typeof (actElemInput[i]) == "string")
2963				actElemInput[i] = document.getElementById(actElemInput[i]);
2964		}
2965
2966		if (actElemInput.length > 0 && actElemInput[0]) {
2967			this.actElemContainer = actElemInput[0].closest('.formFieldContainer');
2968			this.actElemInput = actElemInput;
2969		}
2970	}
2971	else {
2972		if (typeof (actElemInput) == "string")
2973			actElemInput = document.getElementById(actElemInput);
2974
2975		if (actElemInput) {
2976			this.actElemContainer = actElemInput.closest('.formFieldContainer');
2977			this.actElemInput = actElemInput;
2978		}
2979	}
2980
2981	// Get shared container.
2982	this.$actElemContainer = $(this.actElemContainer);
2983}
2984
2985// Static. Creates multiple instances from list of condition information.
2986FieldCondition.createMulti = function (parent, condList) {
2987	if (parent == null)
2988		throw new Error.argNull("parent");
2989	else if (condList == null)
2990		throw new Error.argNull("condList");
2991
2992	var ret = [];
2993
2994	for (var i = 0, len = condList.length; i < len; i++)
2995		ret.push(new FieldCondition(parent, condList[i]));
2996
2997	return ret;
2998}
2999
3000// Checks if condition is met and performs any necessary action.
3001// * updateUI - Determines if UI is updated after check. Treated as true if null/unspecified.
3002FieldCondition.prototype.check = function (updateUI) {
3003	// TODO: Handle checkboxes/radios/dropdowns when Akila gets that done on back-end.
3004	var thisValue = [];
3005	var compValue = this.compValue;
3006	var isMet = false;
3007
3008	switch (this.actFieldType) {
3009		case FieldTypes.Checkboxes:
3010			for (var i = 0, len = this.actElemInput.length; i < len; i++) {
3011				if (this.actElemInput[i].checked)
3012					thisValue.push(this.actElemInput[i].value.replace(/\,/g, '_comma_'));
3013			}
3014			break;
3015		case FieldTypes.RadioButtons:
3016			for (var i = 0, len = this.actElemInput.length; i < len; i++) {
3017				if (this.actElemInput[i].checked) {
3018					thisValue = [this.actElemInput[i].value];
3019					break;
3020				}
3021			}
3022			break;
3023		case FieldTypes.DateTime:
3024			var tempArray = new Array();
3025			for (var i = 0, len = this.actElemInput.length; i < len; i++) {
3026				tempArray.push([this.actElemInput[i].value])
3027			}
3028			thisValue = [tempArray.join(',')];
3029			break;
3030		default:
3031			thisValue = [this.actElemInput.value];
3032	}
3033
3034	var extractMoneyValue = function (v) {
3035		var stringBeginsWith = function (val, beginString) {
3036			return val.substring(0, beginString.length) === beginString
3037		}
3038		if (v && v != '') {
3039			if (stringBeginsWith(v, '$')) {
3040				return v.substring(1).replace(',', '');
3041			}
3042		}
3043		return v.replace(',', '');
3044	};
3045
3046
3047	var isNum = function (val) {
3048		var extracted = extractMoneyValue(val);
3049		return parseFloat(extracted) === +extracted;
3050	};
3051
3052	var checkAgainst = function (compValue) {
3053		switch (this.compType) {
3054			case ConditionComparison.GreaterThan:
3055				return thisValue.any(function (index) {
3056					if (isNum(this[index]) && isNum(HandleCharacters(compValue))) {
3057						return parseFloat(extractMoneyValue(this[index])) > parseFloat(extractMoneyValue(HandleCharacters(compValue)));
3058					}
3059					return false;
3060				});
3061			case ConditionComparison.LessThan:
3062				return thisValue.any(function (index) {
3063					if (isNum(this[index]) && isNum(HandleCharacters(compValue))) {
3064						return parseFloat(extractMoneyValue(this[index])) < parseFloat(extractMoneyValue(HandleCharacters(compValue)));
3065					}
3066					return false;
3067				});
3068			case ConditionComparison.EqualTo:
3069				if (this.actFieldType == FieldTypes.DateTime) {
3070					if (this.actIsDateTimeSpan) {
3071						return this.checkDateEqualSpan(thisValue[0], compValue);
3072					}
3073					else {
3074						return this.checkDateEqualTo(thisValue[0], compValue);
3075					}
3076				}
3077				else {
3078					return thisValue.any(function (index) {
3079						return (isNull(HandleCharacters(this[index]), '') == isNull(HandleCharacters(compValue), ''));
3080					});
3081				}
3082			case ConditionComparison.NotEqualTo:
3083				return thisValue.any(function (index) { return (isNull(this[index], '').toUpperCase() != isNull(HandleCharacters(compValue), '').toUpperCase()); });
3084				break;
3085			case ConditionComparison.Contains:
3086				var containsExp = new RegExp(RegExp.metaEscape(HandleCharacters(compValue)), 'i');
3087
3088				return thisValue.any(function (index) {
3089					return containsExp.test(this[index]);
3090				});
3091			case ConditionComparison.Unavailable:
3092				return this.$actElemContainer.hasClass('unavailable');
3093			case ConditionComparison.Available:
3094				return !this.$actElemContainer.hasClass('unavailable');
3095			case ConditionComparison.Between:
3096				return this.checkDateBetween(thisValue[0], compValue);
3097				return;
3098			case ConditionComparison.None:
3099			default:
3100				return true;
3101		}
3102	};
3103
3104	switch (this.actFieldType) {
3105		case FieldTypes.Checkboxes:
3106			var compArr = compValue.split(',');
3107
3108			isMet = true;
3109
3110			for (var i = 0, len = compArr.length; i < len; i++) {
3111
3112				if (!checkAgainst.call(this, compArr[i])) {
3113					isMet = false;
3114					break;
3115				}
3116			}
3117			break;
3118		default:
3119			isMet = checkAgainst.call(this, compValue);
3120	}
3121
3122	if (updateUI)
3123		this.doAction(isMet);
3124
3125	return isMet;
3126};
3127
3128// Performs changes to applying field based on condition action and comparison result.
3129FieldCondition.prototype.doAction = function (isMet) {
3130	var validator = (this.parent.validators ? this.parent.validators[this.parent.id] : null);
3131
3132	switch (this.actType) {
3133		case ConditionActions.Show:
3134			this.doActionShow(isMet, validator);
3135			break;
3136		case ConditionActions.Hide:
3137			this.doActionHide(isMet, validator);
3138			break;
3139		case ConditionActions.Require:
3140			this.doActionRequire(isMet, validator);
3141			break;
3142		case ConditionActions.RedirectTo:
3143			this.doActionRedirect(isMet, validator);
3144			break;
3145	}
3146};
3147
3148FieldCondition.prototype.doActionShow = function (isMet, validator) {
3149	if (isMet) {
3150		this.parent.$elemContainer.removeClass('hidden');
3151		this.parent.$elemContainer.removeClass('unavailable');
3152
3153		// Update classes assigned to fields (e.g. since what was "left" may now be hidden and a new "left" is needed).
3154		repositionLineSiblings(getLineSiblings(this.parent.elemContainer));
3155
3156		if (this.parent.$elemContainer.find('label > span') != null && this.parent.$elemContainer.find('label > span').length > 0)
3157			$('#liRequiredFieldInfo').show();
3158
3159		if (validator)
3160			validator.enabled = true;
3161	}
3162	else {
3163		this.parent.$elemContainer.addClass('hidden');
3164		this.parent.$elemContainer.addClass('unavailable');
3165
3166		// Update classes assigned to fields (e.g. since what was "left" may now be hidden and a new "left" is needed).
3167		repositionLineSiblings(getLineSiblings(this.parent.elemContainer));
3168
3169		if (validator)
3170			validator.enabled = false;
3171	}
3172};
3173
3174FieldCondition.prototype.doActionHide = function (isMet, validator) {
3175	if (isMet) {
3176		this.parent.$elemContainer.addClass('hidden');
3177		this.parent.$elemContainer.addClass('unavailable');
3178
3179		// Update classes assigned to fields (e.g. since what was "left" may now be hidden and a new "left" is needed).
3180		repositionLineSiblings(getLineSiblings(this.parent.elemContainer));
3181
3182		if (validator)
3183			validator.enabled = false;
3184	}
3185	else {
3186		this.parent.$elemContainer.removeClass('hidden');
3187		this.parent.$elemContainer.removeClass('unavailable');
3188
3189		// Update classes assigned to fields (e.g. since what was "left" may now be hidden and a new "left" is needed).
3190		repositionLineSiblings(getLineSiblings(this.parent.elemContainer));
3191
3192		if (validator)
3193			validator.enabled = true;
3194	}
3195};
3196
3197FieldCondition.prototype.doActionRequire = function (isMet, validator) {
3198	if (isMet) {
3199		this.parent.$elemReq.removeClass('hidden');
3200
3201		if (validator == null) {
3202			validator = new FieldValidator(this.parent.elemInput, this.parent.id, this.parent.fieldType, this.parent.isInternal, true, FieldValidation.Any);
3203			this.parent.validators.add(validator);
3204		}
3205
3206		this.parent.$elemContainer.find('label.labelForFieldElement > span').show();
3207		$('#liRequiredFieldInfo').show();
3208		if (validator)
3209			validator.isRequired = true;
3210	}
3211	else {
3212		this.parent.$elemReq.addClass('hidden');
3213		this.parent.$elemContainer.find('label.labelForFieldElement > span').hide();
3214
3215		if (validator)
3216			validator.isRequired = false;
3217	}
3218};
3219
3220FieldCondition.prototype.doActionRedirect = function (isMet, validator) {
3221	// TODO: Some point alter this to pass in references for submitRedirect/redirectNewWindow. Not ideal at moment to ref. global vars.
3222	var submitRedirect = document.getElementById('submitRedirect');
3223
3224	redirectNewWindow = null;
3225	submitRedirect.value = '';
3226
3227	if (isMet) {
3228		if (this.actURLNewWindow) {
3229			redirectNewWindow = this.actURL;
3230			submitRedirect.value = '';
3231		}
3232		else
3233			submitRedirect.value = this.actURL;
3234	}
3235};
3236
3237// Attachs event handler to field to monitor changes.
3238// * condRunner - FieldConditionsRunner instance to attach.
3239// Note: Calling more than once will have no effect.
3240FieldCondition.prototype.attachRunner = function (condRunner) {
3241	if (condRunner == null)
3242		throw new Error.argNull("condRunner");
3243
3244	// Do not try to bind this if it is an internal field condition and we are not running internal field
3245	// conditions.
3246	if (this.parent.isInternal && !condRunner.runInternal)
3247		return;
3248
3249	if ($.data(this.actElemInput, "runner_chghook") == null) {
3250		var changeHook = function (event) { 
3251			condRunner.run(true); 
3252			!window.isRemoveSetHeights && typeof SetHeights === "function" && SetHeights();
3253		};
3254		$.data(this.actElemInput, "runner_chghook", changeHook);
3255		$(this.actElemInput).change(changeHook);
3256	}
3257};
3258
3259// Removes event handler that monitors changes.
3260// Note: Calling more than once will have no effect.
3261FieldCondition.prototype.detachRunner = function () {
3262	var changeHook = $.data(this.actElemInput, "runner_chghook");
3263
3264	if (changeHook) {
3265		$(this.actElemInput).unbind('change', changeHook);
3266		$.removeData(this.actElemInput, "runner_chghook");
3267	}
3268};
3269
3270FieldCondition.prototype.checkDateCommon = function (thisValue, compValue) {
3271	var defaultDate = '1/1/70';
3272	var defualtDateObj = new Date(defaultDate);
3273
3274	var compArr = compValue.split(',');
3275	var valueArr = thisValue.split(',');
3276
3277	var hasTimeOfDayStart = false;
3278	var hasTimeOfDayEnd = false;
3279
3280	var compareStartDate;
3281	var compareEndDate;
3282
3283	if (compArr[0] == '') {
3284		compareStartDate = new Date(defaultDate + ' ' + compArr[2]);
3285	}
3286	else {
3287		compareStartDate = new Date(compArr[0] + ' ' + compArr[2]);
3288	}
3289
3290	if (compArr[1] == '') {
3291		compareEndDate = new Date(defaultDate + ' ' + compArr[3]);
3292	}
3293	else {
3294		compareEndDate = new Date(compArr[1] + ' ' + compArr[3]);
3295	}
3296
3297	var validStartDate = new Date(defaultDate);
3298	var validEndDate = new Date(defaultDate);
3299	var timeOfDayStart = '';
3300	var timeOfDayEnd = '';
3301
3302	if (valueArr.length == 4) {
3303		if (valueArr[0] == '') {
3304			validStartDate = new Date(defaultDate + ' ' + valueArr[2]);
3305		}
3306		else {
3307			validStartDate = new Date(valueArr[0] + ' ' + valueArr[2]);
3308		}
3309
3310		timeOfDayStart = this.getAMPMString(valueArr[2]);
3311
3312		if (timeOfDayStart != '')
3313			hasTimeOfDayStart = true;
3314
3315		if (valueArr[1] == '') {
3316			validEndDate = new Date(defaultDate + ' ' + valueArr[3]);
3317		}
3318		else {
3319			validEndDate = new Date(valueArr[1] + ' ' + valueArr[3]);
3320		}
3321
3322		timeOfDayEnd = this.getAMPMString(valueArr[3]);
3323
3324		if (timeOfDayEnd != '')
3325			hasTimeOfDayEnd = true;
3326	}
3327	else if (valueArr.length == 2) {
3328		timeOfDayStart = this.getAMPMString(valueArr[0]);
3329
3330		if (timeOfDayStart == '') {
3331			if (valueArr[0] != '') {
3332				validStartDate = new Date(valueArr[0]);
3333				hasTimeOfDayStart = true;
3334			}
3335		}
3336		else {
3337			validStartDate = new Date(defaultDate + ' ' + valueArr[0]);
3338			hasTimeOfDayStart = true;
3339		}
3340
3341		timeOfDayEnd = this.getAMPMString(valueArr[1]);
3342
3343		if (timeOfDayEnd == '') {
3344			if (valueArr[1] != '') {
3345				validEndDate = new Date(valueArr[1]);
3346				hasTimeOfDayEnd = true;
3347			}
3348		}
3349		else {
3350			validEndDate = new Date(defaultDate + ' ' + valueArr[1]);
3351			hasTimeOfDayEnd = true;
3352		}
3353	}
3354
3355	return {
3356		validStartDate: validStartDate,
3357		compareStartDate: compareStartDate,
3358		compareEndDate: compareEndDate,
3359		hasTimeOfDayStart: hasTimeOfDayStart,
3360		validEndDate: validEndDate,
3361		hasTimeOfDayEnd: hasTimeOfDayEnd
3362	};
3363};
3364
3365FieldCondition.prototype.checkDateBetween = function (thisValue, compValue) {
3366	var checkDateCommonData = this.checkDateCommon(thisValue, compValue);
3367
3368	return (checkDateCommonData.validStartDate.getTime() >= checkDateCommonData.compareStartDate.getTime() && checkDateCommonData.validStartDate.getTime() <= checkDateCommonData.compareEndDate.getTime() && checkDateCommonData.hasTimeOfDayStart)
3369		&& (checkDateCommonData.validEndDate.getTime() <= checkDateCommonData.compareEndDate.getTime() && checkDateCommonData.validEndDate.getTime() >= checkDateCommonData.compareStartDate.getTime() && checkDateCommonData.hasTimeOfDayEnd);
3370};
3371
3372FieldCondition.prototype.checkDateEqualSpan = function (thisValue, compValue) {
3373	var checkDateCommonData = this.checkDateCommon(thisValue, compValue);
3374
3375	return (checkDateCommonData.validStartDate.getTime() == checkDateCommonData.compareStartDate.getTime() && checkDateCommonData.hasTimeOfDayStart)
3376		&& (checkDateCommonData.validEndDate.getTime() == checkDateCommonData.compareEndDate.getTime() && checkDateCommonData.hasTimeOfDayEnd);
3377};
3378
3379FieldCondition.prototype.checkDateEqualTo = function (thisValue, compValue) {
3380	var defaultDate = '1/1/70';
3381	var defualtDateObj = new Date(defaultDate);
3382
3383	var compArr = compValue.split(',');
3384	var valueArr = thisValue.split(',');
3385
3386	var compareDate;
3387
3388	var hasTimeOfDay = false;
3389
3390	if (compArr[0] == '') {
3391		compareDate = new Date(defaultDate + ' ' + compArr[2]);
3392	}
3393	else {
3394		compareDate = new Date(compArr[0] + ' ' + compArr[2]);
3395	}
3396
3397	var validDate = new Date(defaultDate);
3398	var timeOfDay = '';
3399
3400	if (valueArr.length == 1) {
3401		timeOfDay = this.getAMPMString(valueArr[0]);
3402
3403		if (timeOfDay == '') {
3404			if (valueArr[0] != '') {
3405				validDate = new Date(valueArr[0]);
3406				hasTimeOfDay = true;
3407			}
3408		}
3409		else {
3410			hasTimeOfDay = true;
3411			validDate = new Date(valueArr[0]);
3412		}
3413	}
3414	else if (valueArr.length == 2) {
3415		timeOfDay = this.getAMPMString(valueArr[1]);
3416
3417		if (timeOfDay != '')
3418			hasTimeOfDay = true;
3419
3420		if (valueArr[0] != '') {
3421			validDate = new Date((valueArr[0] + ' ' + valueArr[1] + ' ').replace(/\-/g, '/'));
3422		}
3423		else {
3424			validDate = new Date((defaultDate + ' ' + valueArr[0] + ' ').replace(/\-/g, '/'));
3425		}
3426	}
3427
3428	return validDate.getTime() == compareDate.getTime() && hasTimeOfDay;
3429};
3430
3431FieldCondition.prototype.getAMPMString = function (time) {
3432	var amIndex = time.indexOf('AM');
3433	var pmIndex = time.indexOf('PM');
3434
3435	var timeOfDay = '';
3436
3437	// First see if the time is military time... if so we need to convert it to AM/PM so the rest
3438	// of this function will return the proper value.
3439
3440	if (amIndex === -1 && pmIndex === -1) {
3441		time = militaryTimeToStandard(time);
3442		amIndex = time.indexOf('AM');
3443		pmIndex = time.indexOf('PM');
3444	}
3445
3446	if (amIndex != -1) {
3447		timeOfDay = time.substring(amIndex).replace(" ", "");
3448	}
3449	else if (pmIndex != -1) {
3450		timeOfDay = time.substring(pmIndex).replace(" ", "");
3451	}
3452
3453	return timeOfDay;
3454};
3455
3456function militaryTimeToStandard(militaryTime) {
3457	var colonIndex = militaryTime.indexOf(':');
3458	var hours = '';
3459	var min = '';
3460
3461	if (colonIndex === -1) {
3462		hours = militaryTime.substring(0, 2);
3463		min = militaryTime.substring(2, 4);
3464	} else {
3465		var tokens = militaryTime.split(':');
3466		hours = tokens[0];
3467		min = tokens[1];
3468	}
3469
3470	if (hours < 12) {
3471		ampm = 'AM';
3472	} else {
3473		hours = hours - 12;
3474		ampm = 'PM';
3475	}
3476
3477	return parseInt(hours) + ':' + ('00' + min).slice('-2') + ' ' + ampm; ß
3478}
3479
3480
3481////////// FieldConditions Class //////////
3482
3483// Creates instance of FieldConditions class.
3484// * elemInput - Reference to DOM element of field with condition. May be a DOM element or string containing ID. May also be array of DOM elements or IDs. Multiple elements must share same parent.
3485// * id - The ID of the field with the condition.
3486// * fieldType - The field type of the field with the condition.
3487// * isInternal - Whether or not this condition is for internal-only fields.
3488// * condList - List (array) of zero or more condition clauses for the field.
3489// * validators - Validator dictionary.
3490function FieldConditions(options, validators) {
3491	if (options.elemInput == null)
3492		throw new Error.argNull("options.elemInput");
3493	else if (options.id == null)
3494		throw new Error.argNull("id");
3495	else if (options.fieldType == null)
3496		throw new Error.argNull("options.fieldType");
3497	else if (options.condList == null)
3498		throw new Error.argNull("options.condList");
3499	else if (validators == null)
3500		throw new Error.argNull("validators");
3501
3502	this.elemInputIsArray = $.isArray(options.elemInput);
3503
3504	// Process elemInput argument.
3505	if (this.elemInputIsArray) {
3506		for (var i = 0, len = options.elemInput.length; i < len; i++) {
3507			if (typeof (options.elemInput[i]) == "string")
3508				options.elemInput[i] = document.getElementById(options.elemInput[i]);
3509		}
3510
3511		if (options.elemInput.length > 0 && options.elemInput[0]) {
3512			this.elemContainer = options.elemInput[0].closest('.formFieldContainer');
3513			this.elemInput = options.elemInput;
3514		}
3515	}
3516	else {
3517		if (typeof (options.elemInput) == "string")
3518			options.elemInput = document.getElementById(options.elemInput);
3519
3520		if (options.elemInput) {
3521			this.elemContainer = options.elemInput.closest('.formFieldContainer');
3522			this.elemInput = options.elemInput;
3523		}
3524	}
3525
3526	this.validators = validators;
3527	this.elemReq = document.getElementById('r_' + options.id);
3528	this.$elemContainer = $(this.elemContainer);
3529	this.$elemReq = $(this.elemReq);
3530	this.fieldType = options.fieldType;
3531	this.id = options.id;
3532	this.isInternal = options.isInternal;
3533	this.conditions = FieldCondition.createMulti(this, options.condList);
3534}
3535
3536// Static. Creates a single conditions object from an options object.
3537FieldConditions.createSingle = function (options, validators) {
3538	if (options == null)
3539		throw new Error.argNull("options");
3540	else if (validators == null)
3541		throw new Error.argNull("validators");
3542
3543	return new FieldConditions(
3544		options,
3545		validators);
3546};
3547
3548// Static. Creates dictionary of conditions objects from array of option objects.
3549FieldConditions.createMulti = function (optionsArray, validators) {
3550	if (optionsArray == null)
3551		throw new Error.argNull("optionsArray");
3552	else if (validators == null)
3553		throw new Error.argNull("validators");
3554
3555	var ret = { keys: [] };
3556	var key = null;
3557
3558	for (var i = 0, len = optionsArray.length; i < len; i++) {
3559		if (optionsArray[i].id != null) {
3560			key = optionsArray[i].id;
3561			ret[key] = FieldConditions.createSingle(optionsArray[i], validators);
3562			ret.keys.push(key);
3563		}
3564	}
3565
3566	return ret;
3567};
3568
3569// Attachs event handler to field to monitor changes.
3570// * condRunner - FieldConditionsRunner instance to attach.
3571// Note: Calling more than once will have no effect.
3572FieldConditions.prototype.attachRunner = function (condRunner) {
3573	if (condRunner == null)
3574		throw new Error.argNull("condRunner");
3575
3576	for (var i = 0, len = this.conditions.length; i < len; i++)
3577		this.conditions[i].attachRunner(condRunner);
3578};
3579
3580// Removes event handler that monitors changes.
3581// Note: Calling more than once will have no effect.
3582FieldConditions.prototype.detachRunner = function () {
3583	for (var i = 0, len = this.conditions.length; i < len; i++)
3584		this.conditions[i].detachRunner();
3585};
3586
3587////////// FieldConditionsRunner Class ////
3588
3589// Creates new instance of conditions runners for the field conditions objects provided.
3590// * allFieldConditions - Array of FieldConditions objects to execute checks for.
3591// * doneCallback - Method executed when run() completes. Recieves log information as argument.
3592// * autoAttach - Determines if allFieldConditions are automatically attached to this instance by the constructor. If null/unspecified, treated as true.
3593// * runInternal - Set to true to execute internal-only fields.
3594function FieldConditionsRunner(allFieldConditions, doneCallback, autoAttach, runInternal) {
3595	if (allFieldConditions == null)
3596		throw new Error.argNull("allFieldConditions");
3597	else if (doneCallback == null)
3598		throw new Error.argNull("doneCallback");
3599
3600	this.fieldConditions = allFieldConditions;
3601	this.doneCallback = doneCallback;
3602	this.runInternal = runInternal;
3603
3604	if (autoAttach == null || autoAttach)
3605		this.attachConditions();
3606}
3607
3608// Static. Internal. Creates static information object for state tracking during execution.
3609FieldConditionsRunner.createFieldStateInfo = function () {
3610	var ret = {};
3611
3612	ret[ConditionActions.None] = ConditionRunnerActResult.None;
3613	ret[ConditionActions.Show] = ConditionRunnerActResult.None;
3614	ret[ConditionActions.Hide] = ConditionRunnerActResult.None;
3615	ret[ConditionActions.Require] = ConditionRunnerActResult.None;
3616	ret[ConditionActions.RedirectTo] = ConditionRunnerActResult.None;
3617
3618	return ret;
3619};
3620
3621// Attaches to FieldConditions/FieldCondition objects that runner will use.
3622FieldConditionsRunner.prototype.attachConditions = function () {
3623	for (var i = 0, iLen = this.fieldConditions.keys.length; i < iLen; i++)
3624		this.fieldConditions[this.fieldConditions.keys[i]].attachRunner(this);
3625};
3626
3627// Detaches to FieldConditions/FieldCondition objects that runner may have used.
3628FieldConditionsRunner.prototype.detachConditions = function () {
3629	for (var i = 0, iLen = this.fieldConditions.keys.length; i < iLen; i++)
3630		this.fieldConditions[this.fieldConditions.keys[i]].detachRunner(this);
3631};
3632
3633// Internal. Cleans up runner for use again.
3634FieldConditionsRunner.prototype.cleanup = function () {
3635	if (this.fieldConditionResults != null) {
3636		delete this.fieldConditionResults;
3637		delete this.fieldConditionLog;
3638	}
3639};
3640
3641// Internal. Called by run() to log result for each condition.
3642FieldConditionsRunner.prototype.log = function (id, condIndex, actType, result, isMet, needRestart) {
3643	if (condRunnerHideLogDupes && result == ConditionRunnerActResult.SkipDuplicate)
3644		return;
3645
3646	this.fieldConditionLog.push({
3647		id: id,
3648		condIndex: condIndex,
3649		actType: actType,
3650		result: result,
3651		isMet: isMet,
3652		needRestart: needRestart
3653	});
3654};
3655
3656// Internal. Sets whether or not the condition engine is executing.
3657FieldConditionsRunner.prototype.setRunning = function (value) {
3658	if (arguments.length == 0)
3659		this.isRunning = true;
3660	else
3661		this.isRunning = value;
3662};
3663
3664// Gets whether or not the condition engine is executing.
3665FieldConditionsRunner.prototype.getRunning = function () {
3666	return this.isRunning;
3667};
3668
3669// Internal. Tells condition execution task to reset cycle (done whenever something changes).
3670FieldConditionsRunner.prototype.setRestart = function (value) {
3671	if (arguments == null || arguments.length == 0)
3672		this.needRestart = true;
3673	else
3674		this.needRestart = value;
3675};
3676
3677// Internal. Gets whether or not the runner needs to restart.
3678FieldConditionsRunner.prototype.getRestart = function () {
3679	return this.needRestart;
3680};
3681
3682// Launches execution of conditions.
3683// * fromEvent - Should be set to true when triggerd from DOM events.
3684// NOTE: fromEvent may be a race condition but will be left for now while debugging (to simplify logs).
3685FieldConditionsRunner.prototype.run = function (fromEvent) {
3686	if (this.getRunning() && !fromEvent)
3687		this.setRestart();
3688	else {
3689		this.setRunning();
3690
3691		this.cleanup();
3692
3693		this.runTask();
3694
3695		this.doneCallback(this.fieldConditionLog);
3696
3697		this.setRunning(false);
3698	}
3699};
3700
3701// Internal. Executes conditions. Should not be called while already running, so run() has sync mechanism for this.
3702// * runInternal - If true, conditions for internal conditions will be ran.
3703FieldConditionsRunner.prototype.runTask = function (runInternal) {
3704	var needRestart = true;
3705
3706	// Prepare objects for execution.
3707	this.fieldConditionLog = [];
3708	this.fieldConditionResults = [];
3709	this.setRedirectUrl = false;
3710
3711	// Populate state information.
3712	var condCondList = this.fieldConditions;
3713	var condListInfo = null;
3714	var condList = null;
3715
3716	for (var i = 0, iLen = condCondList.keys.length; i < iLen; i++)
3717		this.fieldConditionResults[condCondList[condCondList.keys[i]].id] = FieldConditionsRunner.createFieldStateInfo();
3718
3719	// Number of restart actions (tracked to eventually kill infinite loops that should not happen).
3720	var numRestarts = 0;
3721
3722	// Start/restart actions.
3723	while (needRestart && (++numRestarts < 65535)) {
3724		needRestart = false;
3725		this.setRestart(needRestart);
3726
3727		for (var i = 0, iLen = condCondList.keys.length; i < iLen && !needRestart; i++) {
3728			condListInfo = condCondList[condCondList.keys[i]];
3729
3730			// If we are on the front-end, we don't want to have anything to do with back-end (internal only)
3731			// conditions, they will cause javascript errors.
3732			if (!this.runInternal && condListInfo.isInternal == true)
3733				continue;
3734
3735			if (condListInfo.isInternal == false && document.URL.indexOf("Admin") > -1 && document.URL.indexOf("Submissions") > -1)
3736				continue;
3737
3738			condList = condListInfo.conditions;
3739
3740			for (var j = 0, jLen = condList.length; j < jLen && !needRestart; j++) {
3741				var cond = condList[j];
3742				var results = this.fieldConditionResults[condListInfo.id];
3743				var logState = ConditionRunnerActResult.None;
3744
3745				// Determine whether or not condition is met.
3746				var isMet = cond.check(false);
3747
3748				// This is because the effective action for a failed explicit Show is an implicit Hide (and vice versa).
3749				var effectiveActType = cond.actType;
3750
3751				// Determine if action is contradictory or duplicate and skip UI changes if so.
3752				switch (effectiveActType) {
3753					case ConditionActions.Show:
3754						// Show can collide with hide.
3755						var resultsHide = results[ConditionActions.Hide];
3756
3757						if (resultsHide == ConditionRunnerActResult.SuccessExplicit || (resultsHide == ConditionRunnerActResult.SuccessImplicit && !isMet))
3758							logState = ConditionRunnerActResult.SkipContradiction;
3759
3760						break;
3761					case ConditionActions.Hide:
3762						// Hide can collide with show.
3763						var resultsShow = results[ConditionActions.Show];
3764
3765						if (resultsShow == ConditionRunnerActResult.SuccessExplicit || (resultsShow == ConditionRunnerActResult.SuccessImplicit && !isMet))
3766							logState = ConditionRunnerActResult.SkipContradiction;
3767
3768						break;
3769					case ConditionActions.RedirectTo:
3770						// Redirects work differently since they span all fields. Extra contradiction detection needed.
3771						if (this.setRedirectUrl)
3772							logState = ConditionRunnerActResult.SkipContradiction;
3773						else if (isMet)
3774							this.setRedirectUrl = true;
3775						break;
3776				}
3777
3778				if (isMet && results[effectiveActType] == ConditionRunnerActResult.SuccessExplicit)
3779					logState = ConditionRunnerActResult.SkipDuplicate;
3780				else if (!isMet && results[effectiveActType] == ConditionRunnerActResult.SuccessExplicit)
3781					logState = ConditionRunnerActResult.SkipContradiction;
3782				else if (!isMet && results[effectiveActType] == ConditionRunnerActResult.SuccessImplicit)
3783					logState = ConditionRunnerActResult.SkipDuplicate;
3784
3785				if (logState == ConditionRunnerActResult.None) {
3786					// Determine log result.
3787					logState = isMet ? ConditionRunnerActResult.SuccessExplicit : ConditionRunnerActResult.SuccessImplicit;
3788
3789					// Update running state info.
3790					results[effectiveActType] = logState;
3791
3792					// Update form UI.
3793					cond.doAction(isMet);
3794
3795					// Restart task.
3796					this.setRestart();
3797					needRestart = true;
3798				}
3799
3800				// Log result.
3801				this.log(condListInfo.id, j, cond.actType, logState, isMet, needRestart);
3802
3803				// Some other action could cause this to get set.
3804				if (this.getRestart())
3805					needRestart = true;
3806			}
3807		}
3808	}
3809
3810	if (numRestarts >= 65535)
3811		console[console.warn ? "warn" : "log"]("Infinite Loop (heuristic-detected) in FieldConditionsRunner.runTask()");
3812};
3813;
3814window.pageHandleResponsive = true;
3815
3816$.when(window.Pages.rwdReady).done(function () {
3817	var $sidebar = $('div.sidebar');
3818	var $mainContent = $('div.contentMain');
3819	
3820	toggleClassMedia('minWidth550px', '.contentMain:media(this-min-width: 550px)');
3821	toggleClassMedia('minWidth500px', '.contentMain:media(this-min-width: 500px)');
3822	toggleClassMedia('minWidth470px', '.contentMain:media(this-min-width: 470px)');
3823	toggleClassMedia('maxWidth470px', '.contentMain:media(this-max-width: 470px)');
3824	toggleClassMedia('minWidth400px', '.contentMain:media(this-min-width: 400px)');
3825	cpMedia.register('.moduleContentNew:media(this-min-width: 590px)', {
3826		setup: function () {
3827			$mainContent.after($sidebar);
3828		},
3829		match: function (e, element) {
3830			$mainContent.before($sidebar);
3831			$(element).addClass('minWidth590px');
3832		},
3833		unmatch: function (e, element) {
3834			$mainContent.after($sidebar);
3835			$(element).removeClass('minWidth590px');
3836		}
3837	});
3838
3839});
3840

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.