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 ' '), 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.