/* Minification failed. Returning unminified contents.
(6214,117-118): run-time error JS1010: Expected identifier: .
(6214,117-118): run-time error JS1195: Expected expression: .
(6214,153-157): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(6214,462-463): run-time error JS1010: Expected identifier: .
(6214,462-463): run-time error JS1195: Expected expression: .
(6214,9003-9004): run-time error JS1010: Expected identifier: .
(6214,9003-9004): run-time error JS1195: Expected expression: .
(6214,9051-9052): run-time error JS1010: Expected identifier: .
(6214,9051-9052): run-time error JS1195: Expected expression: .
(6214,20166-20167): run-time error JS1010: Expected identifier: .
(6214,20166-20167): run-time error JS1195: Expected expression: .
(6214,22778-22779): run-time error JS1010: Expected identifier: .
(6214,22778-22779): run-time error JS1195: Expected expression: .
(6214,29321-29322): run-time error JS1006: Expected ')': ]
(6214,29328): run-time error JS1004: Expected ';'
(6214,29328-29329): run-time error JS1195: Expected expression: )
(6214,29329-29330): run-time error JS1195: Expected expression: .
(6214,29386-29387): run-time error JS1006: Expected ')': ]
(6214,29394): run-time error JS1004: Expected ';'
(6214,29394-29395): run-time error JS1195: Expected expression: )
(6214,29386-29387): run-time error JS1013: Syntax error in regular expression: ]
(6214,29321-29322): run-time error JS1013: Syntax error in regular expression: ]
 */
/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;
while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?o.queue(this[0],a):void 0===b?this:this.each(function(){var c=o.queue(this,a,b);o._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&o.dequeue(this,a)})},dequeue:function(a){return this.each(function(){o.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=o.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===o.css(a,"display")||!o.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=m.createDocumentFragment(),b=a.appendChild(m.createElement("div"));b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||m,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[o.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new o.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=m),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&o.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return o.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=o.extend(new o.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?o.event.trigger(e,null,b):o.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},o.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},o.Event=function(a,b){return this instanceof o.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.getPreventDefault&&a.getPreventDefault()?Z:$):this.type=a,b&&o.extend(this,b),this.timeStamp=a&&a.timeStamp||o.now(),void(this[o.expando]=!0)):new o.Event(a,b)},o.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z,this.stopPropagation()}},o.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){o.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!o.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.focusinBubbles||o.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){o.event.simulate(b,a.target,o.event.fix(a),!0)};o.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),o.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return o().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=o.guid++)),this.each(function(){o.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,o(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){o.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){o.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?o.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],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,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||o.contains(a.ownerDocument,a)||(g=o.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",e=m.documentElement,f=m.createElement("div"),g=m.createElement("div");g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",f.appendChild(g);function h(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",e.appendChild(f);var d=a.getComputedStyle(g,null);b="1%"!==d.top,c="4px"===d.width,e.removeChild(f)}a.getComputedStyle&&o.extend(l,{pixelPosition:function(){return h(),b},boxSizingReliable:function(){return null==c&&h(),c},reliableMarginRight:function(){var b,c=g.appendChild(m.createElement("div"));return c.style.cssText=g.style.cssText=d,c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.innerHTML="",b}})}(),o.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:0,fontWeight:400},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=o.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=o.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=o.css(a,"border"+R[f]+"Width",!0,e))):(g+=o.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=o.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===o.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):f[g]||(e=S(d),(c&&"none"!==c||!e)&&L.set(d,"olddisplay",e?c:o.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}o.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=o.camelCase(b),i=a.style;return b=o.cssProps[h]||(o.cssProps[h]=Fb(i,h)),g=o.cssHooks[b]||o.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(o.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||o.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]="",i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=o.camelCase(b);return b=o.cssProps[h]||(o.cssProps[h]=Fb(a.style,h)),g=o.cssHooks[b]||o.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||o.isNumeric(f)?f||0:e):e}}),o.each(["height","width"],function(a,b){o.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&zb.test(o.css(a,"display"))?o.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===o.css(a,"boxSizing",!1,e),e):0)}}}),o.cssHooks.marginRight=yb(l.reliableMarginRight,function(a,b){return b?o.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),o.each({margin:"",padding:"",border:"Width"},function(a,b){o.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(o.cssHooks[a+b].set=Gb)}),o.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(o.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=o.css(a,b[g],!1,d);return f}return void 0!==c?o.style(a,b,c):o.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?o(this).show():o(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}o.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(o.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?o.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=o.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){o.fx.step[a.prop]?o.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[o.cssProps[a.prop]]||o.cssHooks[a.prop])?o.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},o.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},o.fx=Kb.prototype.init,o.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(o.cssNumber[a]?"":"px"),g=(o.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(o.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,o.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=o.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k=this,l={},m=a.style,n=a.nodeType&&S(a),p=L.get(a,"fxshow");c.queue||(h=o._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,k.always(function(){k.always(function(){h.unqueued--,o.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],j=o.css(a,"display"),"none"===j&&(j=tb(a.nodeName)),"inline"===j&&"none"===o.css(a,"float")&&(m.display="inline-block")),c.overflow&&(m.overflow="hidden",k.always(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(n?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;n=!0}l[d]=p&&p[d]||o.style(a,d)}if(!o.isEmptyObject(l)){p?"hidden"in p&&(n=p.hidden):p=L.access(a,"fxshow",{}),f&&(p.hidden=!n),n?o(a).show():k.done(function(){o(a).hide()}),k.done(function(){var b;L.remove(a,"fxshow");for(b in l)o.style(a,b,l[b])});for(d in l)g=Ub(n?p[d]:0,d,k),d in p||(p[d]=g.start,n&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=o.camelCase(c),e=b[d],f=a[c],o.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=o.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=o.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:o.extend({},b),opts:o.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=o.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return o.map(k,Ub,j),o.isFunction(j.opts.start)&&j.opts.start.call(a,j),o.fx.timer(o.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}o.Animation=o.extend(Xb,{tweener:function(a,b){o.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),o.speed=function(a,b,c){var d=a&&"object"==typeof a?o.extend({},a):{complete:c||!c&&b||o.isFunction(a)&&a,duration:a,easing:c&&b||b&&!o.isFunction(b)&&b};return d.duration=o.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in o.fx.speeds?o.fx.speeds[d.duration]:o.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){o.isFunction(d.old)&&d.old.call(this),d.queue&&o.dequeue(this,d.queue)},d},o.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=o.isEmptyObject(a),f=o.speed(b,c,d),g=function(){var b=Xb(this,o.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=o.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&o.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=o.timers,g=d?d.length:0;for(c.finish=!0,o.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),o.each(["toggle","show","hide"],function(a,b){var c=o.fn[b];o.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),o.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){o.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),o.timers=[],o.fx.tick=function(){var a,b=0,c=o.timers;for(Lb=o.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||o.fx.stop(),Lb=void 0},o.fx.timer=function(a){o.timers.push(a),a()?o.fx.start():o.timers.pop()},o.fx.interval=13,o.fx.start=function(){Mb||(Mb=setInterval(o.fx.tick,o.fx.interval))},o.fx.stop=function(){clearInterval(Mb),Mb=null},o.fx.speeds={slow:600,fast:200,_default:400},o.fn.delay=function(a,b){return a=o.fx?o.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=m.createElement("input"),b=m.createElement("select"),c=b.appendChild(m.createElement("option"));a.type="checkbox",l.checkOn=""!==a.value,l.optSelected=c.selected,b.disabled=!0,l.optDisabled=!c.disabled,a=m.createElement("input"),a.value="t",a.type="radio",l.radioValue="t"===a.value}();var Yb,Zb,$b=o.expr.attrHandle;o.fn.extend({attr:function(a,b){return J(this,o.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){o.removeAttr(this,a)})}}),o.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?o.prop(a,b,c):(1===f&&o.isXMLDoc(a)||(b=b.toLowerCase(),d=o.attrHooks[b]||(o.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=o.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void o.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=o.propFix[c]||c,o.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&o.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?o.removeAttr(a,c):a.setAttribute(c,c),c}},o.each(o.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||o.find.attr;$b[b]=function(a,b,d){var e,f;
return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;o.fn.extend({prop:function(a,b){return J(this,o.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[o.propFix[a]||a]})}}),o.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!o.isXMLDoc(a),f&&(b=o.propFix[b]||b,e=o.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),l.optSelected||(o.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),o.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){o.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;o.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=o.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(o.isFunction(a))return this.each(function(b){o(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?o.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(o.isFunction(a)?function(c){o(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=o(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;o.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=o.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,o(this).val()):a,null==e?e="":"number"==typeof e?e+="":o.isArray(e)&&(e=o.map(e,function(a){return null==a?"":a+""})),b=o.valHooks[this.type]||o.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=o.valHooks[e.type]||o.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),o.extend({valHooks:{select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&o.nodeName(c.parentNode,"optgroup"))){if(b=o(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=o.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=o.inArray(o(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),o.each(["radio","checkbox"],function(){o.valHooks[this]={set:function(a,b){return o.isArray(b)?a.checked=o.inArray(o(a).val(),b)>=0:void 0}},l.checkOn||(o.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),o.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){o.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),o.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=o.now(),dc=/\?/;o.parseJSON=function(a){return JSON.parse(a+"")},o.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&o.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=m.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(o.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,o.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=o.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&o.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}o.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":o.parseJSON,"text xml":o.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,o.ajaxSettings),b):tc(o.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=o.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?o(l):o.event,n=o.Deferred(),p=o.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(n.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=o.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=o.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===o.active++&&o.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(o.lastModified[d]&&v.setRequestHeader("If-Modified-Since",o.lastModified[d]),o.etag[d]&&v.setRequestHeader("If-None-Match",o.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(o.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(o.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?n.resolveWith(l,[r,x,v]):n.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--o.active||o.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return o.get(a,b,c,"json")},getScript:function(a,b){return o.get(a,void 0,b,"script")}}),o.each(["get","post"],function(a,b){o[b]=function(a,c,d,e){return o.isFunction(c)&&(e=e||d,d=c,c=void 0),o.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),o.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){o.fn[b]=function(a){return this.on(b,a)}}),o._evalUrl=function(a){return o.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},o.fn.extend({wrapAll:function(a){var b;return o.isFunction(a)?this.each(function(b){o(this).wrapAll(a.call(this,b))}):(this[0]&&(b=o(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(o.isFunction(a)?function(b){o(this).wrapInner(a.call(this,b))}:function(){var b=o(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=o.isFunction(a);return this.each(function(c){o(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){o.nodeName(this,"body")||o(this).replaceWith(this.childNodes)}).end()}}),o.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},o.expr.filters.visible=function(a){return!o.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(o.isArray(b))o.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==o.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}o.param=function(a,b){var c,d=[],e=function(a,b){b=o.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=o.ajaxSettings&&o.ajaxSettings.traditional),o.isArray(a)||a.jquery&&!o.isPlainObject(a))o.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},o.fn.extend({serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=o.prop(this,"elements");return a?o.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!o(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=o(this).val();return null==c?null:o.isArray(c)?o.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),o.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=o.ajaxSettings.xhr();a.ActiveXObject&&o(a).on("unload",function(){for(var a in Dc)Dc[a]()}),l.cors=!!Fc&&"withCredentials"in Fc,l.ajax=Fc=!!Fc,o.ajaxTransport(function(a){var b;return l.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort"),f.send(a.hasContent&&a.data||null)},abort:function(){b&&b()}}:void 0}),o.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return o.globalEval(a),a}}}),o.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),o.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=o("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),m.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;o.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||o.expando+"_"+cc++;return this[a]=!0,a}}),o.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=o.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||o.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&o.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),o.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||m;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=o.buildFragment([a],b,e),e&&e.length&&o(e).remove(),o.merge([],d.childNodes))};var Ic=o.fn.load;o.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h),a=a.slice(0,h)),o.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&o.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?o("<div>").append(o.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},o.expr.filters.animated=function(a){return o.grep(o.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return o.isWindow(a)?a:9===a.nodeType&&a.defaultView}o.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=o.css(a,"position"),l=o(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=o.css(a,"top"),i=o.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),o.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},o.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){o.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,o.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===o.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),o.nodeName(a[0],"html")||(d=a.offset()),d.top+=o.css(a[0],"borderTopWidth",!0),d.left+=o.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-o.css(c,"marginTop",!0),left:b.left-d.left-o.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!o.nodeName(a,"html")&&"static"===o.css(a,"position"))a=a.offsetParent;return a||Jc})}}),o.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;o.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),o.each(["top","left"],function(a,b){o.cssHooks[b]=yb(l.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?o(a).position()[b]+"px":c):void 0})}),o.each({Height:"height",Width:"width"},function(a,b){o.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){o.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return o.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?o.css(b,c,g):o.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),o.fn.size=function(){return this.length},o.fn.andSelf=o.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return o});var Lc=a.jQuery,Mc=a.$;return o.noConflict=function(b){return a.$===o&&(a.$=Mc),b&&a.jQuery===o&&(a.jQuery=Lc),o},typeof b===U&&(a.jQuery=a.$=o),o});
;
var scroll = window.pageYOffset,
  loadingBar;

window.addEventListener('load', loadAllStuff);
window.addEventListener('resize', function () {
  fixBodyAndFooter();
});
window.addEventListener('scroll', function () {
  controlHeaderShadow();
});

function loadAllStuff() {
  var messageOnLoad = document.querySelectorAll('.messageOnLoad');
  if ( document.querySelector('.loading-bar') ) loadingBar = new LoadingBar();
  fixBodyAndFooter();
  toTheTop();
  selectMenuItems();
  controlAside();
  fixButtonConnectSchool();
  selectStudent();
  selectYear();
  selectClass();
  if ( messageOnLoad.length ) {
    for ( var i = 0; i < messageOnLoad.length; i++ ) {
      message( messageOnLoad[i].value, 'note', false, true );
    }
  }
}

function LoadingBar() {
  var bar = document.querySelector('.loading-bar');
  this.show = function () {
    bar.removeAttribute('style'); // clear jQuery shit
    bar.classList.add('steady');
    setTimeout( function() { bar.classList.add('shown') }, 100 );
  };
  this.hide = function () {
    bar.removeAttribute('style'); // clear jQuery shit
    bar.classList.remove('shown');
    setTimeout( function() { bar.classList.remove('steady') }, 250 );
  };
}

// Body padding-top & Footer control
function fixBodyAndFooter() {
  var header = document.querySelector('header'),
    footer = document.querySelector('footer'),
    content = document.querySelector('#ajax')
      || document.querySelector('[ui-view]')
      || document.querySelector('.page-content');

  if ( header && content && footer ) {
    content.style.paddingTop = header.clientHeight + 'px';
    content.style.paddingBottom = footer.clientHeight + 40 + 'px';
    footer.style.marginTop = - footer.clientHeight + 'px';
  }
}

// Header shadow control
function controlHeaderShadow() {
  var header = document.querySelector('header');
  if ( window.pageYOffset > 0 ) {
    header.classList.add('scrolled');
  } else {
    header.classList.remove('scrolled');
  }
}

// "To the Top" button
function toTheTop() {
  var button = document.querySelector('.to-the-top');
  if ( !button ) return;

  window.addEventListener('scroll', function () {
    if (window.pageYOffset < 100/* || window.pageYOffset - scroll > 0 */) {
      button.classList.remove('active');
    } else/* if ( window.pageYOffset - scroll < 0 )*/ {
      // not just *else* because of stupid IE
      button.classList.add('active');
    }
    scroll = window.pageYOffset;
  });

  button.onclick = scrollToZero;

  function scrollToZero() {
    var int = 10, // time interval (ms)
      dist = 100, // distance passed in one time interval (px)
      br = 1000, // braking distance (px)
      a = window.pageYOffset / br; // position in page

    if ( a <= 1 ) dist = Math.ceil( dist * easeOut(a) );

    window.scrollBy( 0, -dist );
    if ( window.pageYOffset ) setTimeout( scrollToZero, int );
  }
  function easeOut(t){return 1 - Math.abs(Math.pow(t-1, 2))}
}

// Small popup messages
function message( text, type, element, doNotHide ) {
  /*
   1st parameter: text
   2nd parameter (optional): '' == 'ok', 'error', 'note'
   3rd parameter: (optional) DOM element
   4rd parameter: (optional) doNotHide

   Examples:
   message('Сохранено успешно');
   message('Невозможно удалить', 'error', this);
   */
  var message = document.createElement('div'),
    messageOld;

  text = text || 'Message';

  message.innerHTML = text;

  if ( type === 'error' ) {
    message.classList.add('message-error');
    if ( typeof doNotHide === 'undefined' ) doNotHide = true;
  }
  else if ( type === 'note' ) {
    message.classList.add('message-note');
    if ( typeof doNotHide === 'undefined' ) doNotHide = true;
  }
  else message.classList.add('message-ok');

  if ( element ) handleInplace();
  else handleOnside();

  if ( doNotHide ) addCloseButton();
  else setTimeout( closeMessageSmoothly, 5000 );

  setTimeout(function () {
    message.classList.add('shown');
  }, 200);

  return text;

  function handleInplace() {
    var top, left, triangle;

    message.classList.add('inplace');

    messageOld = document.body.querySelector('[class*=message-].inplace');
    if ( messageOld ) messageOld.removeSelf();

    triangle = document.createElement('div');
    triangle.classList.add('triangle');
    message.appendChild( triangle );

    document.body.insertBefore( message, document.body.querySelector('header') );

    top = element.getBoundingClientRect().top
      - message.clientHeight
      - 5;
    if ( top < 0 ) {
      top = element.getBoundingClientRect().bottom + 5;
      message.classList.add('toBottom');
    }

    left = element.getBoundingClientRect().right
      - element.clientWidth / 2
      - message.clientWidth / 2;

    if ( left + message.clientWidth >= window.innerWidth ) {
      left -= message.clientWidth / 2;
      message.classList.add('toLeft');
    } else if ( left <= 0 ) {
      left += message.clientWidth / 2;
      message.classList.add('toRight');
    }

    message.style.top = Math.ceil(top) + 'px';
    message.style.left = Math.ceil(left) + 'px';

    window.addEventListener('scroll', closeMessageSmoothly);
    window.addEventListener('resize', closeMessageSmoothly);
  }

  function addCloseButton() {
    var closeButton;
    closeButton = document.createElement('div');
    closeButton.classList.add('close-message');
    closeButton.onclick = closeMessageSmoothly;
    message.appendChild( closeButton );
  }

  function handleOnside() {
    var top;
    messageOld = document.body.querySelectorAll('[class*=message-].onside');
    if ( messageOld[0] ) {
      top = messageOld[ messageOld.length - 1 ].getBoundingClientRect().bottom;
      if ( top > window.innerHeight - 150 ) closeAllMessages();
      else message.style.top = top + 10 + 'px';
    }
    message.classList.add('onside');
    document.body.insertBefore( message, document.body.querySelector('header') );
  }

  function closeMessageSmoothly() {
    if ( message ) {
      message.classList.add('invisible');
      setTimeout( closeMessage, 800 );
    }
  }

  function closeMessage() {
    if ( message.parentNode ) {
      message.removeSelf();
      window.removeEventListener('scroll', closeMessageSmoothly);
      window.removeEventListener('resize', closeMessageSmoothly);
    }
  }
}
function closeAllMessages() {
  var message = document.querySelectorAll('[class*="message-"]');
  if ( message[0] ) {
    for ( var i = 0; i < message.length; i++ ) {
      message[i].classList.add('invisible');
      setTimeout( (function () {
        var n = i;
        return function () {
          if ( message[n].parentNode ) {
            message[n].removeSelf();
          }
        }
      })(), 500 );
    }
  }
}

// Set the title, and an active menu item with "data-id" attribute
function selectMenuItems() {
  /* Example:
   <div class="page-content" data-title="Демо: Ученики класса" data-ids="demo, head_teacher, students">
   */
  var dataTitleContainer = document.querySelector('[data-title]'),
    dataIdsContainer = document.querySelectorAll('[data-ids]'),
    dataIds, item;
  if ( dataTitleContainer ) {
    document.querySelector('title').innerHTML = dataTitleContainer.getAttribute('data-title');
  }
  if ( dataIdsContainer[0] ) {
    // remove "selected" from all items with "data-id"
    item = document.querySelectorAll('[data-id]');
    for ( var i = 0; i < item.length; i++ ) {
      item[i].classList.remove('selected');
    }

    for ( var m = 0; m < dataIdsContainer.length; m++ ) {
      // select new items
      dataIds = dataIdsContainer[m].getAttribute('data-ids').split(/\s*,\s*/);
      for ( i = 0; i < dataIds.length; i++ ) {
        item = document.querySelectorAll('[data-id=' + dataIds[i] + ']');
        if ( item.length === 0 ) continue;
        for ( var j = 0; j < item.length; j++ ) {
          item[j].classList.add('selected');
        }
      }
    }
  }
}

// Aside control
function controlAside() {
  var aside = document.querySelector('aside'),
    buttonOpen = document.querySelector('.header-aside-button') || document.querySelector('.header-logo'),
    buttonClose,
    isLoginned, isDemo;

  if ( !aside ) throw 'ASIDE is not found!';
  if ( !buttonOpen ) throw 'BUTTON to open aside is not found!';

  isLoginned = aside.querySelector('.user-ident');
  if ( isLoginned ) aside.classList.add('loginned');
  isDemo = document.querySelector('.showDemo') || aside.querySelector('.inactive-services .selected');
  if ( isDemo ) controlDemoMode();

  buttonClose = aside.querySelector('.close-button');
  if ( buttonClose ) {
    buttonClose.onclick = function () {
      aside.classList.remove('active');
    };
  } else console.warn('BUTTON to close aside is not found!');


  showAside();
  controlDropItems();
  controlMenuLevels();

  function showAside() {
    buttonOpen.onclick = function (e) {
      aside.classList.toggle('active');
      e.stopImmediatePropagation();
    };
    document.body.addEventListener('click', function(e) {
      if ( !isThereAParent( e.target, 'aside' ) && e.target !== buttonOpen ) aside.classList.remove('active');
    });
    document.body.addEventListener('keydown', function(e) {
      if ( e.keyCode === 27 ) aside.classList.remove('active'); // Escape
    });

    // Swipe control
    buttonOpen.addEventListener('touchstart', handleTouchOpen, false);
    aside.addEventListener('touchstart', handleTouchStart, false);
    aside.addEventListener('touchmove', handleTouchMove, false);
    var xDown = null;
    var yDown = null;
    function handleTouchStart(evt) {
      xDown = evt.touches[0].clientX;
      yDown = evt.touches[0].clientY;
    }
    function handleTouchMove(evt) {
      if ( ! xDown || ! yDown ) return;

      var xUp = evt.touches[0].clientX;
      var yUp = evt.touches[0].clientY;

      var xDiff = xDown - xUp;
      var yDiff = yDown - yUp;

      if ( Math.abs( xDiff ) > Math.abs( yDiff ) && xDiff < 0 ) {
        aside.classList.remove('active');
      }

      xDown = null;
      yDown = null;
    }
    function handleTouchOpen() {
      buttonOpen.classList.add('touch');
    }
  }

  function controlDropItems() {
    var dropItems = aside.querySelectorAll('ul li:not(.disabled) ul');
    if ( !dropItems[0] ) return;
    for ( var i = 0; i < dropItems.length; i++ ) {
      dropItems[i].parentNode.onclick = function () {
        this.classList.toggle('active');
      };
    }
  }

  function controlDemoMode() {
    var oldDemoModes = aside.querySelectorAll('.demo-mode');

    if ( oldDemoModes[0] ) {
      for ( var i = 0; i < oldDemoModes.length; i++ ) {
        oldDemoModes[i].removeSelf();
      }
    }
    if ( isLoginned ) {
      // function selectMenuItems() must be called first!
      addDemoMode( aside.querySelector('.inactive-services .selected') );
    } else {
      addDemoMode( aside.querySelector('.login-logout') );
    }
  }

  function addDemoMode( target ) {
    var demoMode, WWDemoMode, WWDemoModeNotAllFuctions;
    if ( !target ) return;

    WWDemoMode = document.querySelector('#WWDemoMode');
    WWDemoModeNotAllFuctions = document.querySelector('#WWDemoModeNotAllFuctions');
    WWDemoMode = WWDemoMode ? WWDemoMode.innerHTML : 'Demo mode';
    WWDemoModeNotAllFuctions = WWDemoModeNotAllFuctions ? WWDemoModeNotAllFuctions.innerHTML : 'Some features are unavailable';

    demoMode = document.createElement('div');
    demoMode.classList.add('demo-mode');
    demoMode.innerHTML = '<span>' + WWDemoMode + '</span> ' + WWDemoModeNotAllFuctions;

    target.appendChild( demoMode );
    target.classList.add('with-demo');
  }

  function controlMenuLevels() {
    // function selectMenuItems() must be called first!
    var selectedService = aside.querySelector('.active-services .selected, .inactive-services .selected'),
      isAccount = aside.querySelector('[data-id*="account"]'),
      isAdditional = document.querySelector('[data-ids*="additional"]'),
      isIndex = document.querySelector('.welcome-page'),
      activeContainer = aside.querySelector('.active-container'),
      returnButton = aside.querySelector('.return-button'),
      mainMenuSubmenu = aside.querySelectorAll('.main-menu-submenu'),
      currentService;

    if ( isIndex || isAdditional ) return;

    if ( !selectedService && !isAccount ) {
      console.log("Aside menu doesn't have levels");
      return;
    }

    // level 1
    if ( isAccount ) { // account pages
      selectedService = isLoginned;
      currentService = document.querySelector('.service-name').cloneNode(true);
    } else {
      if ( selectedService.querySelector('a') ) { // new version <li data-id="...">
        currentService = selectedService.querySelector('a').cloneNode(true);
        selectedService.querySelector('a').removeAttribute('href');
      } else { // old version <a data-id="...">
        currentService = selectedService.cloneNode(true);
      }
    }
    selectedService.removeAttribute('href');

    selectedService.onclick = levelFrom0To1;
    currentService.classList.add('current-service');
    activeContainer.insertBefore( currentService, activeContainer.lastElementChild );
    levelFrom0To1();
    currentService.classList.add('menu-level-1');
    mainMenuSubmenu[mainMenuSubmenu.length-1].classList.add('menu-level-1');

    // level 2
    if ( !document.querySelector('[data-menu-level="2"]') ) return;
    var levelName, item;

    if ( mainMenuSubmenu[1] ) {
      mainMenuSubmenu[0].classList.add('menu-level-2');
    } else console.error('\<aside\> must contain 2 menus!');

    levelFrom1To2();
    levelName = document.querySelector('.service-name').cloneNode(true);
    levelName.classList.add('current-service');
    levelName.classList.add('menu-level-2');
    activeContainer.insertBefore( levelName, mainMenuSubmenu[0] );

    item = mainMenuSubmenu[1].querySelector('[data-id].selected a');
    item.removeAttribute('href');
    item.onclick = levelFrom1To2;

    function levelFrom0To1() {
      aside.classList.add('level-1');
      if (returnButton) {
        returnButton.onclick = levelFrom1To0;
      }
    }
    function levelFrom1To0() {
      aside.classList.remove('level-1');
    }
    function levelFrom1To2() {
        aside.classList.add('level-2');
        if (returnButton) {
          returnButton.onclick = levelFrom2To1;
        }
    }
    function levelFrom2To1() {
        aside.classList.remove('level-2');
        if (returnButton) {
          returnButton.onclick = levelFrom1To0;
        }
    }
  }
}

// Control button "Connect School"
function fixButtonConnectSchool() {
  var button = document.querySelector('aside .connect-school'),
    search = document.querySelector('.header-search'),
    language = document.querySelector('.header-language'),
    pageSelector = [ // remove the button on some pages
      '.create-account',
      '.login-page',
      '.ediary-start-page',
      '[data-ids="connect-school"]'
    ];
  if ( button && checkPage() ) fix();

  if ( button && search && language ) {
    search.addEventListener('mouseenter', fix);
    search.addEventListener('mouseleave', unfix);
    language.addEventListener('mouseenter', fix);
    language.addEventListener('mouseleave', unfix);
  }

  function fix() { button.classList.add('fixated') }
  function unfix() { button.classList.remove('fixated') }

  function checkPage() {
    for ( var i = 0; i < pageSelector.length; i++ ) {
      if ( document.querySelector( pageSelector[i] ) ) return true;
    }
  }
}

function setHiddenInput( checkbox, name ) {
  /*
   example 1:
   <input type="checkbox" id="RememberMe" onchange="setHiddenInput(this)">
   <input type="hidden" name="RememberMe">

   example 2:
   <input type="checkbox" id="SomeId" onchange="setHiddenInput(this,'RememberMe')">
   <input type="hidden" name="RememberMe">
   */
  if ( !name ) name = checkbox.id;

  var input = document.querySelectorAll('[name=' + name + ']');
  var event = new Event('change');
  for ( var i = 0; i < input.length; i++ ) {
    input[i].value = !!checkbox.checked;
    input[i].dispatchEvent(event);
  }
}

// Select a student
function selectStudent() {
  var studentMenu = document.querySelectorAll('.student-menu > a'),
    linksBlocker = document.querySelectorAll('li.is-student-selected'),
    url = window.location.href,
    students, pupilId;

  if ( linksBlocker[0] ) {
    for ( var n = 0; n < linksBlocker.length; n++ ) {
      linksBlocker[n].classList.remove('selected');
    }
  }

  if ( studentMenu[0] ) {
    if ( url.indexOf("pupilId") >= 0 ) {
      pupilId = getValueFromUrl( url, 'pupilId' );
      controlStudent( pupilId );
    }
    students = studentMenu[0].parentNode.querySelectorAll('li ul a');
    if ( students.length === 1 ) {
      collapseFirstName( students );
      controlStudent( students[0].getAttribute('data-pupilid') );
      for ( var d = 0; d < studentMenu.length; d++ ) {
        studentMenu[d].parentNode.classList.remove('drop');
        studentMenu[d].parentNode.removeChild( studentMenu[d].parentNode.querySelector('ul') );
      }
    } else {
      for ( var j = 0; j < studentMenu.length; j++ ) {
        students = studentMenu[j].parentNode.querySelectorAll('li ul a');
        for ( var i = 0; i < students.length; i++ ) {
          collapseFirstName( students[i] );
          students[i].onclick = function () {
            controlStudent( this.getAttribute('data-pupilid') );
          }
        }
      }
    }
  }

  function controlStudent( pupilId ) {
    var student;
    for ( var j = 0; j < studentMenu.length; j++ ) {
      students = studentMenu[j].parentNode.querySelectorAll('li ul a');
      for ( var i = 0; i < students.length; i++ ) {
        students[i].classList.remove('selected');
        if ( students[i].getAttribute('data-pupilid') === pupilId ) {
          student = students[i];
        }
      }
    }
    if ( student ) {
      for ( i = 0; i < linksBlocker.length; i++ ) {
        linksBlocker[i].classList.add('selected');
      }
      student.classList.add('selected');
      for ( i = 0; i < studentMenu.length; i++ ) {
        studentMenu[i].innerHTML = student.innerHTML;
        studentMenu[i].parentNode.classList.add('selected');
      }
      changeLinks( 'pupilId', pupilId );
    }
    // Valera's student function
    if ( student && typeof getYearsByPupilId !== 'undefined' ) {
      getYearsByPupilId( pupilId );
    }
  }

  function collapseFirstName( fullNameContainer ) {
    var fullName = fullNameContainer.innerHTML,
      firstNameDotPos;

    if (fullName && fullName.length > 15) {
      firstNameDotPos = fullName.indexOf(' ') + 2;
      fullNameContainer.innerHTML = fullName.slice(0, firstNameDotPos) + '.';
    }
  }
}

// Select a year
function selectYear() {
  var yearMenu = document.querySelectorAll('.year-menu > a'),
    linksBlocker = document.querySelectorAll('li.is-year-selected'),
    url = window.location.href,
    years, yearStart;

  if ( linksBlocker[0] ) {
    for ( var n = 0; n < linksBlocker.length; n++ ) {
      linksBlocker[n].classList.remove('selected');
    }
  }

  if ( yearMenu[0] ) {
    if ( url.indexOf("yearStart") >= 0 ) {
      yearStart = getValueFromUrl( url, 'yearStart' );
      controlYear( yearStart );
    }
    years = yearMenu[0].parentNode.querySelectorAll('li ul a');
    if ( years.length === 1 ) {
      controlYear( years[0].getAttribute('data-yearstart') );
      for ( var d = 0; d < yearMenu.length; d++ ) {
        yearMenu[d].parentNode.classList.remove('drop');
        yearMenu[d].parentNode.removeChild( yearMenu[d].parentNode.querySelector('ul') );
      }
    } else {
      for ( var j = 0; j < yearMenu.length; j++ ) {
        years = yearMenu[j].parentNode.querySelectorAll('li ul a');
        for ( var i = 0; i < years.length; i++ ) {
          years[i].onclick = function () {
            controlYear( this.getAttribute('data-yearstart') );
          }
        }
      }
    }
  }

  function controlYear( yearStart ) {
    var year;
    for ( var j = 0; j < yearMenu.length; j++ ) {
      years = yearMenu[j].parentNode.querySelectorAll('li ul a');
      for ( var i = 0; i < years.length; i++ ) {
        years[i].classList.remove('selected');
        if ( years[i].getAttribute('data-yearstart') === yearStart ) {
          year = years[i];
        }
      }
      if ( year ) {
        for ( i = 0; i < linksBlocker.length; i++ ) {
          linksBlocker[i].classList.add('selected');
        }
        year.classList.add('selected');
        for ( i = 0; i < yearMenu.length; i++ ) {
          yearMenu[i].innerHTML = year.innerHTML;
          yearMenu[i].parentNode.classList.add('selected');
        }
        changeLinks( 'yearStart', yearStart );
      }
    }
    // Valera's year function
    if ( year && typeof getClassListByYear !== 'undefined' ) {
      getClassListByYear( yearStart );
    }
  }
}

// Select a class
function selectClass() {
  var classMenu = document.querySelectorAll('.class-menu > a'),
    classroomTeacher = document.querySelectorAll('[data-id="classroom_teacher"]'),
    linksBlocker = document.querySelectorAll('li.is-class-selected'),
    url = window.location.href,
    classes, classId;

  if ( linksBlocker[0] ) {
    for ( var n = 0; n < linksBlocker.length; n++ ) {
      linksBlocker[n].classList.remove('selected');
    }
  }

  if ( classMenu[0] ) {
    if ( url.indexOf("classId") >= 0 ) {
      classId = getValueFromUrl( url, 'classId' );
      controlClass( classId );
    }
    for ( var j = 0; j < classMenu.length; j++ ) {
      classes = classMenu[j].parentNode.querySelectorAll('li ul a');
      for ( var i = 0; i < classes.length; i++ ) {
        classes[i].onclick = function () {
          if ( classId ) {
            window.location.href = url.replace( classId, this.getAttribute('data-classid') );
          } else {
            controlClass( this.getAttribute('data-classid') );
          }
        }
      }
    }
  }

  function controlClass( classId ) {
    var linksBlocker = document.querySelectorAll('li.is-class-selected'),
      classLevel, classLetter;
    for ( var j = 0; j < classMenu.length; j++ ) {
      classes = classMenu[j].parentNode.querySelectorAll('li ul a');
      for ( var i = 0; i < classes.length; i++ ) {
        classes[i].classList.remove('selected');
        if ( classes[i].getAttribute('data-classid') === classId ) {
          classLetter = classes[i];
        }
      }
      if ( classLetter ) {
        for ( i = 0; i < linksBlocker.length; i++ ) {
          linksBlocker[i].classList.add('selected');
        }
        classLetter.classList.add('selected');
        classLevel = classLetter.parentNode.querySelector('span');
        for ( i = 0; i < classMenu.length; i++ ) {
          classMenu[i].innerHTML = classLevel.innerHTML + classLetter.innerHTML + ' класс';
          //classMenu[i].parentNode.classList.add('selected');
        }
        changeLinks( 'classId', classId );

        if ( classroomTeacher ) checkMyClass();
      }
    }

    function checkMyClass() {
      var myClasses;
      for ( var j = 0; j < classMenu.length; j++ ) {
        myClasses = classMenu[j].parentNode.querySelectorAll('li ul a.my-class');
        for ( var i = 0; i < myClasses.length; i++ ) {
          if ( myClasses[i].getAttribute('data-classid') === classId ) return;
        }
        for ( i = 0; i < classroomTeacher.length; i++ ) {
          linksBlocker = classroomTeacher[i].querySelector('li.is-class-selected');
          linksBlocker.classList.remove('selected');
        }
      }
    }
  }
}


// service functions
function isThereAParent( element, tag ) {
  if ( !element || element.tagName === 'BODY' ) return false;
  if ( element.tagName === tag.toUpperCase() ) return element;
  return isThereAParent( element.parentNode, tag );
}

function changeLinks( name, value ) {
  var links = document.querySelectorAll( '[href*="' + name + '"]' ),
    oldValue;
  for ( var i = 0; i < links.length; i++ ) {
    oldValue = getValueFromUrl( links[i].href, name );
    links[i].href = links[i].href.replace( oldValue, value );
  }
}

function getValueFromUrl( url, name ) {
  var namePos = url.indexOf( name ),
    eqPos, andPos, value;
  eqPos = url.indexOf( "=", namePos ) + 1;
  andPos = url.indexOf( "&", namePos );
  if ( andPos === -1 ) andPos = url.length;
  value = url.slice(eqPos, andPos);
  return value;
}

Element.prototype.removeSelf = function () {
  this.parentNode.removeChild( this );
};;
window.addEventListener('load', function () {
  inviteToScrollDot();
  inviteToScrollArrow();
  langSelectorControl();
  smoothScroll();
  setTimeout( fillDivWithDots, 500 );
  scrollControl();
  sliderNewDesign();
  moveZnaj();
  fillCanvasWithDots();
});

// Invitation to scroll
function inviteToScrollDot() {
  var dot = document.querySelector('.dot-above-article');
  if ( !dot ) return;

  invite();
  window.addEventListener('scroll', invite);
  dot.onclick = function () {
    dot.classList.toggle('animated');
  };
  function invite() {
    if ( window.pageYOffset === 0 ) {
      dot.classList.add('animated');
    } else {
      dot.classList.remove('animated');
    }
  }
}

function inviteToScrollArrow() {
    var arrow = document.querySelector('.landing-arrow-down');
    if (!arrow) return;

    invite();
    window.addEventListener('scroll', invite);
    function invite() {
        if (window.pageYOffset === 0) {
            arrow.style.display = 'block';
        } else {
            arrow.style.display = 'none';
        }
    }
}

// Language selector
function langSelectorControl() {
  var langSelector = document.querySelector('.welcome-page .lang-selector');

  if (!langSelector) return;

  var control = function() {
    if ( window.pageYOffset ) langSelector.classList.add('toBottom');
    else langSelector.classList.remove('toBottom');
  };

  window.addEventListener('scroll', control);
  window.addEventListener('resize', control);
}

// Smooth scrolling ( jQuery )
function smoothScroll() {
  $('a[href*=\\#]').on('click', function(event) {
    event.preventDefault();
    $('aside').removeClass('active');
    $('html,body').animate({scrollTop:$(this.hash).offset().top}, 500);
  });
}

// Header & Aside control
function scrollControl() {
  var header = document.querySelector('header'),
    welcomeScreen = document.querySelector('.welcome-page');

  control();
  window.addEventListener('scroll', control);
  window.addEventListener('resize', control);

  function control() {
    if ( welcomeScreen.getBoundingClientRect().bottom < 0 ) {
      header.classList.add('fixed');
    } else {
      header.classList.remove('fixed');
    }
  }
}

// Video control
function videoControl() {
  var welcomePage = document.querySelector('.welcome-page'),
    video = document.querySelector('video');
  if ( welcomePage && video ) {
    playPause();
    window.addEventListener('scroll', playPause);
    window.addEventListener('resize', playPause);
  }

  function playPause() {
    var isPlaying = video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2;
    if ( welcomePage.getBoundingClientRect().bottom < 0 ) {
      if ( isPlaying ) { video.pause(); }
      video.style.filter = 'blur(20px)';
    } else {
      if ( !isPlaying ) { video.play(); }
      video.removeAttribute('style');
    }
  }
}

// Slider with closures for the new design
function sliderNewDesign(){
  var slider = document.querySelectorAll(".sliderNew");
  if ( !slider.length ) return;
  for ( var i = 0; i < slider.length; i++ ) {
    (function () {
      var sliderN = i,
        activeN = 0,
        label = slider[sliderN].querySelectorAll('.slider-label'),
        slide = slider[sliderN].querySelectorAll('.slide'),
        pagination = slider[sliderN].querySelector('.slider-pagination'),
        images = slider[sliderN].querySelectorAll('.slider-images img'),
        bullet, distance, line, t;

      for ( var j = 0; j < slide.length; j++ ) {
        bullet = document.createElement('div');
        bullet.className = 'slider-bullet';
        bullet.onclick = (function () {
          var bulletN = j;
          return function () {
            setActives( bulletN );
          }
        })();
        if ( label[0] ) {
          label[j].onclick = (function () {
            var labelN = j;
            return function () {
              setActives( labelN );
            }
          })();
        }
        pagination.appendChild( bullet );
      }

      line = document.createElement('div');
      line.classList.add('slider-line');
      pagination.appendChild( line );

      bullet = slider[sliderN].querySelectorAll('.slider-bullet');
      if ( bullet.length > 1 ) {
        distance = bullet[1].getBoundingClientRect().left - bullet[0].getBoundingClientRect().left;
      }

      setActives( activeN );

      if ( slider[sliderN].classList.contains('autoSlide') ) {
        autoSlide();
        slider[sliderN].onmouseover = function () {
          clearInterval( t );
        };
        slider[sliderN].onmouseout = autoSlide;
      }

      function setActives( n ) {
        for ( var i = 0; i < bullet.length; i++ ) {
          bullet[i].classList.remove('active');
          if ( label[i] ) label[i].classList.remove('active');
          if ( images[i] ) images[i].classList.remove('active');
        }
        if ( n === i ) {
          activeN = 0;
        } else if ( n < 0 ) {
          activeN = i - 1;
        } else {
          activeN = n;
        }
        bullet[activeN].classList.add('active');
        if ( label[activeN] ) label[activeN].classList.add('active');
        if ( images[activeN] ) images[activeN].classList.add('active');
        slide[0].style.marginLeft = -slide[0].clientWidth * activeN + "px";
        line.style.width = distance * activeN + 'px';
      }

      function autoSlide() {
        t = setInterval(function () {
          setActives( activeN + 1 )
        }, 3000);
      }
    })();
  }
}

// 'Znaj Diary' moving
function moveZnaj() {
  var span = document.querySelectorAll('.znaj h2 span'),
    position;

  for ( var i = 0; i < span.length; i++ ) {
    setTimeout( hideSpan( span[i] ), 0 ); // prevent aberraion in the width calculation
    watchSpan( span[i] );
  }
  function watchSpan( span ) {
    window.addEventListener('scroll', function () {
      position = window.innerHeight * 0.7;
      if ( span.getBoundingClientRect().bottom < position ) {
        span.style.marginLeft = '0';
      } else {
        hideSpan( span );
      }
    });
  }
  function hideSpan( span ) {
    span.style.marginLeft = -span.clientWidth + 'px';
  }
}

// Fill Div with dots
function fillDivWithDots() {
  var container = document.querySelectorAll('.with-dots');
  if ( !container[0] ) return;

  for ( var i = 0; i < container.length; i++ ) {
      var f = new Fill(container[i]);
      f.restart();
  }
}
function Fill( container ) {
  var self = this,
    stepMin = 25,
    diameter = 12,
    slowness = 500,
    padding,
    stepX, stepY,
    countX, countY,
    sprouts,
    autostart = container.classList.contains('autostart'),
    stop = true,
    dots;

  var vectors = [
    [0,2], // East
    [1,1], // SE
    //[2,0], // South, prohibited
    //[1,-1], // SW, prohibited
    //[0,-2], // West, prohibited
    [-1,-1], // NW
    [-2,0], // Nord
    [-1,1] // NE
  ];

  padding = container.getAttribute('data-padding');
  padding = padding ? parseInt( padding ) : 0 ;


  window.addEventListener( 'resize', function() {
    self.restart();
  });

  calculateDots();

  if ( autostart ) {
    if ( container.getBoundingClientRect().top >= 0
      && container.getBoundingClientRect().bottom <= window.innerHeight ) {
      stop = false;
      connectDots();
    }
    window.addEventListener('scroll', function () {
      if ( stop
        && container.getBoundingClientRect().top >= 0
        && container.getBoundingClientRect().bottom <= window.innerHeight ) {
        stop = false;
        connectDots();
      } else if ( container.getBoundingClientRect().bottom < 0
        || container.getBoundingClientRect().top > window.innerHeight ) {
        stop = true;
        self.refreshLines( true );
      }
    });
  }

  function calculateDots() {
    var height = container.clientHeight - padding * 2,
      width = container.clientWidth - padding * 2;

    countY = Math.floor( height / stepMin );
    if ( !(countY % 2) ) countY++;
    stepY = ( height - diameter ) / ( countY - 1);

    countX = Math.floor( width / ( stepY * 1.2 ) );
    if ( !(countX % 2) ) countX++;
    stepX = ( width - diameter ) / ( countX - 1);

    dots = [];

    for ( var y = 0; y < countY; y++ ) {
      dots[y] = [];
      for ( var x = 0; x < countX; x++ ) {
        if ( !((x+y)%2) && noOverlap( y, x ) ) {
          dots[y][x] = {};
          createDot( y, x );
        }
      }
    }
    sprouts = 1;
  }

  function createDot( y, x ) {
    var dot = document.createElement('div');
    dot.classList.add('dots');
    container.appendChild( dot );

    dots[y][x].element = dot;
    dots[y][x].top = Math.floor( diameter / 2 + stepY * y + padding );
    dots[y][x].left = Math.floor( diameter / 2 + stepX * x + padding );
    dots[y][x].in = dots[y][x].out = 0;

    dot.style.top = dots[y][x].top + 'px';
    dot.style.left = dots[y][x].left + 'px';

    // Features
    dot.addEventListener('click', function () {
      if ( !dots[y][x].in ) {
        dot.classList.toggle('excluded');
        dots[y][x].out = dots[y][x].out ? 0 : 1;
      }
    });

    if ( y === countY - 1 && x === countX - 1 ) { // make Stop button (SE)
      dot.classList.add('active');
      dot.addEventListener('click', function () {
        stop = !stop;
        sprouts = 1;
        if ( !stop ) connectDots();
      });
    }

  }

  function connectDots( y, x ) {
    var openVectors = [], random;

    if ( stop ) return;
    if ( typeof y === 'undefined' || typeof x === 'undefined' ) {
      y = dots.length - 1;
      x = 0;
      if ( dots[y][x].out ) y = 0;
    }

    if ( ( !y && !x ) || ( y === dots.length - 1 && !x ) ) {
      dots[y][x].element.classList.add('selected');
    }

    for ( var i = 0; i < vectors.length; i++ ) {
      if ( dots[y + vectors[i][0]]
        && dots[y + vectors[i][0]][x + vectors[i][1]]
        && !dots[y + vectors[i][0]][x + vectors[i][1]].out
        && !dots[y + vectors[i][0]][x + vectors[i][1]].in ) {
        openVectors.push( vectors[i] );
      }
    }

    if ( !openVectors.length ) {
      if ( sprouts-- === 1 ) setTimeout( self.refreshLines, 500 ); // the dead end
    } else {
      random = Math.floor( Math.random() * openVectors.length );
      createLine( y, x, openVectors[random] );
      openVectors.splice( random, 1 );
      if ( openVectors.length > 3 ) {
        sprouts++;
        random = Math.floor( Math.random() * openVectors.length );
        createLine( y, x, openVectors[random] );
      }
    }
  }

  function createLine( y, x, vector ) {
    var line = document.createElement('div'),
      width, angle, t, suddenDeath;

    line.style.top = dots[y][x].top + 'px';
    line.style.left = dots[y][x].left + 'px';
    line.classList.add('line');
    container.appendChild( line );

    angle = Math.atan2( vector[0] * stepY, vector[1] * stepX );
    line.style.transform = 'rotate(' + angle + 'rad)';

    width = Math.sqrt( Math.pow( vector[0] * stepY, 2 ) + Math.pow( vector[1] * stepX, 2 ) );

    dots[y][x].out++;
    if ( x && sprouts > 3 && dots[y][x].out < 2 ) suddenDeath = Math.floor( Math.random() * 1.1 );
    y += vector[0];
    x += vector[1];
    dots[y][x].in++;
    dots[y][x].element.classList.add('selected');

    t = slowness - Math.random() * 200;
    setTimeout(function () {
      line.style.width = width + 'px';
      if ( !suddenDeath ) connectDots( y, x );
      else if ( sprouts-- === 1 ) setTimeout( self.refreshLines, 500 );
    }, t)
  }

  // to find and flow out absolute positioned elements inside the container
  function noOverlap( y, x ) {
    var elements = container.childNodes,
      left, top;

    if ( !elements[0] ) return true;

    top = diameter / 2 + stepY * y;
    left = diameter / 2 + stepX * x;

    for ( var i = 0; i < elements.length; i++ ) {
      if ( !elements[i].clientWidth ) continue; // exclude <br> elements

      if ( top + diameter > elements[i].offsetTop
        && top - diameter < elements[i].offsetTop + elements[i].clientHeight
        && left + diameter > elements[i].offsetLeft
        && left - diameter < elements[i].offsetLeft + elements[i].clientWidth ) {
        return false;
      }
    }
    return true;
  }

  this.refreshLines = function( shutdown ) {
    var lines = container.querySelectorAll('.line'),
      i = 0;

    sprouts = 1;

    if ( shutdown ) destroyLines();
    else dissolveLines();

    function dissolveLines() {
      setTimeout(function () {
        lines[i].style.opacity = 0;
        i++;
        if ( i < lines.length ) dissolveLines();
        else setTimeout( destroyLines, 1000 );
      }, 10)
    }

    function destroyLines() {
      var lines = container.querySelectorAll('.line');
      for ( i = 0; i < lines.length; i++ ) {
        container.removeChild( lines[i] );
      }
      for ( var y = 0; y < dots.length; y++ ) {
        for ( var x = 0; x < dots[y].length; x++ ) {
          if ( dots[y][x] ) {
            dots[y][x].in = dots[y][x].out = 0;
            if ( dots[y][x].element ) {
              dots[y][x].element.classList.remove('excluded');
              dots[y][x].element.classList.remove('selected');
            }
          }
        }
      }
      if ( !shutdown ) connectDots();
    }
  };

  var trigger;
  this.restart = function() {
    stop = true;
    clearTimeout( trigger );
    container.style.opacity = '0';
    trigger = setTimeout(function () {
      var elements = container.querySelectorAll('.dots, .line');
      for ( var i = 0; i < elements.length; i++ ) {
        elements[i].parentNode.removeChild( elements[i] );
      }
      container.removeAttribute('style');
      calculateDots();
    }, 1000);
  };
}

// Fill Canvas with dots
function fillCanvasWithDots() {
  var canvas, ctx,
    canvasW = 0, canvasH =0,
    r = 6, lineStep = 300, fps = 60, delay = 0,
    dots = [], lines = [], linesCount = 0, lineSteps = [],
    offsetY, offsetX,
    marginTB, marginRL,
    rows = 0, columns = 0, drawInterval = 0;

  init();
  window.addEventListener( "resize", init );

  function init() {
    canvas = document.getElementById('dots-canvas');
    if ( !canvas ) return;
    if ( !ctx ) ctx = canvas.getContext('2d');
    if ( drawInterval ) clearInterval( drawInterval );
    offsetY = offsetX = marginTB = 8 * r;
    canvasW = canvas.parentNode.clientWidth;
    canvasH = canvas.parentNode.clientHeight;
    ctx.canvas.width  = canvasW;
    ctx.canvas.height = canvasH;
    rows = Math.ceil( 1 + ( canvasH - 2 * marginTB ) / offsetY );
    columns = Math.ceil( 1 + ( canvasW - 2 * marginTB ) / offsetX );
    ctx.clearRect( 0, 0, canvasW, canvasH );

    if ( rows%2 === 0 ) rows--;
    if ( columns%2 === 0 ) columns--;

    offsetX = ( canvasW - marginTB ) / ( columns - 1 );
    offsetY = ( canvasH - marginTB ) / ( rows - 1 );

    marginRL = ( canvasW - ( columns - 1 ) * offsetX ) / 2;
    marginTB = (canvasH - ( rows - 1 ) * offsetY ) / 2;

    makeGrid( marginRL, marginTB );
    mapLines( 1, columns - 1 );

    drawInterval = setInterval( draw, ( 1000 / fps ) + delay );
  }

  function makeGrid( marginRL, marginTB ) {
    var shift;
    for( var i = 0; i < columns; i++ ) {
      shift = ( i % 2 > 0) ? 1 : 0;
      for( var j = 0; j < rows-shift; j++ ) {
        dots[i*rows+j] = [];
        dots[i*rows+j][0] = Math.floor( i * offsetX + marginRL );
        dots[i*rows+j][1] = Math.floor( j * offsetY + marginTB + shift * offsetY / 2 );
      }
    }
  }

  function mapLines( mapStart, mapEnd ) {
    var k = 0, i, j, m, n, shift;
    lines = [];
    for ( i = mapStart-1; i < mapEnd; i += 1 ) {
      shift = ( i%2 > 0 ) ? 1 : 0;
      for ( j = 0; j <= rows; j += 1 ) {
        if ( j < rows-shift - 1 && shift > 0 ) {
          count( 0.4 );
          if ( j === rows - shift - 1 ) count();
          if ( j === 0 && shift === 0 ) count( 0.2 );
          if ( j === rows && shift === 1) count();
        }
      }
    }

    linesCount = k;

    for ( i = 0; i < linesCount; i++ ) {
      lineSteps[i] = 1;
    }

    function count( random ) {
      for ( m = -1; m < 2; m++ ) {
        for ( n = 0; n < 2; n++ ) {
          if ( !random
            || Math.round( -0.5 + Math.random() * ( 1 + 1 ))
            < Math.round( -0.5 + Math.random() * ( random + 1 ) )
          ) {
            if ( !lines[k] ) lines[k] = [];
            lines[k][0] = i * rows + j;
            lines[k][1] = ( i + m ) * rows + ( j + n );
            k++;
          }
        }
      }
    }
  }

  function draw() {
    ctx.clearRect( 0, 0, canvasW, canvasH );
    delay = 0;
    drawGrid();
    for( var i = 1; i < linesCount; i++ ) {
      connect(i);
    }
  }

  function connect(i) {
    var startX = dots[lines[i][0]][0],
      startY = dots[lines[i][0]][1],
      endX = dots[lines[i][1]][0],
      endY = dots[lines[i][1]][1],
      tempX = 2 * ( endX - startX ) / lineStep,
      tempY = 2 * ( endY - startY ) / lineStep,
      x2, y2;

    lineSteps[i] = ( lineSteps[i] > lineStep ) ? 0 : lineSteps[i] + 1;

    if ( lineSteps[i] <= lineStep / 2 ) {
      x2 = startX + tempX*lineSteps[i];
      y2 = startY + tempY*lineSteps[i];
      drawLine( startX, startY, x2, y2 );
    } else {
      x2 = endX - tempX * ( lineStep - lineSteps[i] );
      y2 = endY - tempY * ( lineStep - lineSteps[i] );
      drawLine( endX, endY, x2, y2 );
    }

    if ( lineSteps[i] >= lineStep ) {
      mapLines( 1, columns - 1 );
      delay = 1000;
    }
  }

  function drawGrid() {
    var shift;
    for( var i = 0; i < columns; i++ ) {
      shift = ( i%2 > 0 ) ? 1 : 0;
      for( var j = 0; j < rows-shift; j++ ) {
        drawDot( dots[i*rows+j][0], dots[i*rows+j][1] );
      }
    }
  }

  function drawDot( x, y ) {
    ctx.beginPath();
    ctx.arc( x, y, r, 0, Math.PI*2 );
    ctx.fillStyle = 'white';
    ctx.fill();
    ctx.closePath();
  }

  function drawLine( x1, y1, x2, y2 ) {
    ctx.beginPath();
    ctx.moveTo(x1, y1);
    ctx.lineTo(x2, y2);
    ctx.lineWidth = 2;
    ctx.strokeStyle = 'white';
    ctx.stroke();
  }
}

function showPopupBookDemo() {
  var popup = document.querySelector('.popupBookDemo'),
    input = document.querySelector('#demoBookFrameUrl'),
    iframe = popup.querySelector('iframe');
  if ( !iframe.src ) {
    iframe.src = input.value;
    popup.querySelector('.icon_close').onclick = function() {
      popup.parentNode.classList.remove('active');
    };
  }
  popup.parentNode.classList.add('active');
};
var firstCall = true,
    marksBox,
    boxLesson,
    boxFinishedHomeWork,
    boxLessonType,
    boxLessonInfo,
    boxMarkInfo,
    boxSubjectTeachers,
    boxForecastedMarkInfo,
    boxParentsMessage,
    payPassesBox,
    payAbsencesBox,
    behaviorBox,
    grecaptchaWidget1,
    grecaptchaWidget2;

window.onload = initPageJS;

function initPageJS()  {
  initBoxes();
  tabSwitcherListener();
  checkboxesControl();
  checkboxesControl2();
  studentsMoveDeleteButtons();
  selectSubject();
  customTitles();
  bellsControl();
  controlMoveBetweenGroupsButtons();
  connectedTables();
  rowSpanHovering();
  rowspanAll();
  evenDiaryTables();
  showDiaryNotes();
  multipleSelect();
  journalCheckInput();
  sortRows2();
  highlightColumnsAndRows();
  blackAndWhite();
  rangeControl();
  dependRadio();
  checkInputParent();
  toggleParentStudent();
  editUser();
  editImage();
  viewBox();
  closeAttentionLineInit();
  hideAll();
  if ( !firstCall ) {
    // first call in header-footer.js
    selectMenuItems();
    }
    firstCall = false;

    if (document.getElementById('get-family-key')) {
        var getKeyLink = document.getElementById('get-family-key');
        getKeyLink.onclick = getFamilyKey;

        var registerButton = document.getElementById('register-button');
        registerButton.onclick = validateForm;

        grecaptchaWidget1 = grecaptcha.render('recaptcha1', {
            'sitekey': '6Ldejq4ZAAAAADEBpOInARU3yhdndn7w4yQhygkA',
            'callback': onGetFamilyKey,
            'theme': 'light',
            'size': 'invisible'
        });
        grecaptchaWidget2 = grecaptcha.render('recaptcha2', {
            'sitekey': '6Ldejq4ZAAAAADEBpOInARU3yhdndn7w4yQhygkA',
            'callback': onSubmit,
            'theme': 'light',
            'size': 'invisible'
        });
    }
}

function initBoxes() {
  closeAllBoxes();
  marksBox = document.querySelector('.marks-box');
  boxLesson = document.querySelector('.box-lesson');
  boxFinishedHomeWork = document.querySelector('.box-finished-home-work');
  boxLessonType = document.querySelector('.box-lesson-type');
  boxLessonInfo = document.querySelector('.box-lesson-info');
  boxMarkInfo = document.querySelector('.box-mark-info');
  boxSubjectTeachers = document.querySelector('.box-subject-teachers');
  boxForecastedMarkInfo = document.querySelector('.box-forecasted-mark-info');
  boxParentsMessage = document.querySelector('.box-parents-message');
  payPassesBox = document.querySelector('.box-pay-passes-info');
  payAbsencesBox = document.querySelector('.box-pay-absences-info');
  behaviorBox = document.querySelector('.box-behavior-info');

  if ( marksBox ) marksBox = new MarksBox;
  if (boxLesson) boxLesson = new BoxLesson(boxLesson);
  if (boxFinishedHomeWork) boxFinishedHomeWork = new BoxFinishedHomeWork(boxFinishedHomeWork);
  if (boxLessonType) boxLessonType = new BoxLessonType(boxLessonType);
  if ( boxLessonInfo ) boxLessonInfo = new BoxLessonInfo( boxLessonInfo );
  if ( boxMarkInfo ) boxMarkInfo = new BoxMarkInfo( boxMarkInfo );
  if ( boxSubjectTeachers ) boxSubjectTeachers = new BoxSubjectTeachers( boxSubjectTeachers );
  if ( boxForecastedMarkInfo ) boxForecastedMarkInfo = new BoxForecastedMarkInfo( boxForecastedMarkInfo );
  if (boxParentsMessage) boxParentsMessage = new BoxParentsMessage(boxParentsMessage);
  if (payPassesBox) payPassesBox = new PayPassesBox(payPassesBox);
  if (payAbsencesBox) payAbsencesBox = new PayAbsencesBox(payAbsencesBox);
  if (behaviorBox) behaviorBox = new BehaviorBox(behaviorBox);
}

// tabSwitcher v.3
function tabSwitcher( n, className ) {
  var item, tabMenuItem, tabContentItem;

  if ( !className ) {
    item = document.querySelector('[class*="tabMenuItem"]');
    className = getTabSwitcherClassName( item );
  }
  tabMenuItem = document.querySelectorAll('.' + className);
  tabContentItem = document.querySelectorAll('.' + className.replace('Menu', 'Content'));

  for ( var i = 0; i < tabMenuItem.length; i++ ) {
    if ( i === n ) {
      tabMenuItem[i].classList.add('selected');
      if ( tabContentItem[i] ) tabContentItem[i].classList.add('selected');
      continue;
    }
    tabMenuItem[i].classList.remove('selected');
    if ( tabContentItem[i] ) tabContentItem[i].classList.remove('selected');
  }

  closeAllBoxes();
  connectedTables();
}
function tabSwitcherListener() {
  var item = document.querySelectorAll('[class*="tabMenuItem"]');
  if ( !item.length ) return;
  for ( var i = 0; i < item.length; i++ ) {
    item[i].onclick = function () {
      var fullClassName = getTabSwitcherClassName( this ),
        tabMenuItem = document.querySelectorAll('.' + fullClassName);
      for ( var i = 0; i < tabMenuItem.length; i++ ) {
        if ( tabMenuItem[i] === this ) {
          tabSwitcher( i, fullClassName );
          break;
        }
      }
    };
  }
}
function getTabSwitcherClassName( element ) {
  for ( var i = 0; i < element.classList.length; i++ ) {
    if ( element.classList[i].indexOf('tabMenuItem') === 0 ) {
      return element.classList[i];
    }
  }
}

function toggleClass( className ) {
  // the first parameter is a toggling class name, the rest are elements or selectors to apply
  // example:
  // <div onclick="toggleClass('collapsed','#login','.restore-password',this)"
  var element;
  if ( arguments.length === 1 ) {
    this.classList.toggle( className );
    return;
  }
  for ( var i = 1; i < arguments.length; i++ ) {
    if ( typeof arguments[i] === 'string' ) {
      element = document.querySelectorAll( arguments[i] );
      for ( var j = 0; j < element.length; j++ ) {
        element[j].classList.toggle( className );
      }
    } else {
      element = arguments[i];
      element.classList.toggle( className );
    }
  }
}

// The new "Create account" page
function reg(button, containerClass) {
  var buttonsEvents = [];
  var container = document.querySelector(containerClass);
  var formBlocks = container.querySelectorAll('.form-block');
  var progress = document.querySelector('.regProgress');
  var buttonsBack = [];
  var buttonsNext = [];
  var bullets = [];
  var current = 0;

  buttonsSuspend();
  reset();
  init(formBlocks.length);
  go(current);

  var smsCodeResend = container.querySelector('#smsCodeResend');
  smsCodeResend.onclick = regSmsCodeResend;

  function prev() {
    if (current === 0) {
      reset();
      return;
    }
    current--;
    go(current);
  }
  function next() {
    var errors = regCheckErrors(current);
    if (errors) {
      regShowErrors(errors);
    }
    current++;
    go(current);
  }
  function go(n) {
    for (var i = 0; i < formBlocks.length; i++) {
      formBlocks[i].classList.remove('active');
      bullets[i].classList.remove('active');
    }
    for (var j = 0; j <= n; j++) {
      bullets[j].classList.add('active');
    }
    formBlocks[n].classList.add('active');
    listenInput(n);
    if (n === formBlocks.length - 1) {
      reset('success');
    }
  }
  function init(n) {
    for (var i = 0; i < n; i++) {
      bullets[i] = document.createElement('b');
      progress.appendChild(bullets[i]);

      buttonsBack[i] = formBlocks[i].querySelector('.buttonBack a');
      if (buttonsBack[i]) buttonsBack[i].onclick = prev;

      buttonsNext[i] = formBlocks[i].querySelector('.buttonNext');
    }
  }
  function reset(mode) {
    var buttons = button.parentNode.children;
    for (var i = 0; i < buttons.length; i++) {
      buttons[i].classList.remove('disabled');
      buttons[i].classList.remove('inactive');
      buttons[i].onclick = buttonsEvents[i];
    }
    if (mode !== 'success') {
      progress.innerHTML = '';
      bullets = [];
      formBlocks[current].classList.remove('active');
    }
  }
  function buttonsSuspend() {
    var buttons = button.parentNode.children;
    for (var i = 0; i < buttons.length; i++) {
      buttons[i].classList.add('disabled');
      buttonsEvents[i] = buttons[i].onclick;
      buttons[i].onclick = null;
    }
    button.classList.remove('disabled');
    button.classList.add('inactive');
  }
  function listenInput(n) {
    if (!buttonsNext[n]) return;
    buttonsNext[n].classList.add('disabled');
    var input;
    var condition;
    if (formBlocks[n].id === 'inputPhone') {
      input = formBlocks[n].querySelector('#phoneNumber');
      input.addEventListener('input', function() {
        condition = (this.value === '1111');
        allowNext(buttonsNext[n], condition);
      });
    }
  }
  function allowNext(button, allow) {
    if (allow) {
      button.classList.remove('disabled');
      button.onclick = next;
    } else {
      button.classList.add('disabled');
      button.onclick = null;
    }
  }

  function regCheckErrors() {
    return false;
  }
  function regShowErrors() {
  }
  function regSmsCodeResend() {
    smsCodeResend.classList.add('active');
    setTimeout(function() {
      smsCodeResend.classList.remove('active');
    }, 2000);
  }
}
// toggle Parent/Student ("create account" page)
function toggleParentStudent() {
  var input = document.getElementById('isParent'),
    parent = document.querySelectorAll('.isParent')[0],
    student = document.querySelectorAll('.isParent')[1],
    label, link, button;
  if ( input && parent && student ) {
    //label = document.querySelector('#FamilyKey+label');
    //link = document.querySelector('.no-family-key');
    button = document.querySelector('#register-button');

    parent.onclick = function () {
      input.value = "true";
      //label.innerHTML = 'Выслан на Ваш e-mail';
      //link.classList.remove('hidden');
      //button.innerHTML = 'Создать родительский аккаунт';
    };

    student.onclick = function () {
      input.value = "false";
      ////label.innerHTML = 'Возьмите у родителей';
      //link.classList.add('hidden');
      //button.innerHTML = 'Создать ученический аккаунт';
    };
  }
}

// Control of groups of checkboxes
function checkboxesControl() {
    /*
     Example:
     <input type="checkbox" rel="checkboxGroup-student-01a">
     <input type="checkbox" rel="checkboxGroup-student-01a-item">
     <input type="checkbox" rel="checkboxGroup-student-01a-item">
     <input type="checkbox" rel="checkboxGroup-student-01a-item">
     */
  var checkbox = document.querySelectorAll('[rel*="checkboxGroup"]');
  if ( checkbox[0] ) {
    for (var i = 0; i < checkbox.length; i++) {
      if ( checkbox[i].getAttribute('rel').indexOf('-item') === -1 ) { // group main checker
        checkbox[i].addEventListener('click', function () {
          var selector = this.getAttribute('rel') + '-item',
            items = document.querySelectorAll('[rel*="' + selector + '"]');
          for (var i = 0; i < items.length; i++) {
            // to catch 'changed' event in the HTML
            // without items[i].click() in doesn't fire; without add/remove listener it fires, but checks fail
            if ( this.checked && !items[i].checked || !this.checked && items[i].checked ) {
              items[i].removeEventListener( 'change', listenToItems );
              items[i].click();
              items[i].addEventListener( 'change', listenToItems );
            }
          }
        });
      } else { // ordinary checker in group
        checkbox[i].addEventListener( 'change', listenToItems );
      }
    }
  }
  function listenToItems() {
    var selector = this.getAttribute('rel').replace('-item',''),
      group = document.querySelector('[rel*="' + selector + '"]');
    group.checked = false;
  }
}

function checkboxesControl2() {
    /*
     Example:
     <input type="checkbox" id="aaa">
     <div data-checkbox-id="aaa">
     <input type="checkbox">
     <input type="checkbox">
     <input type="checkbox">
     </div>
     */
  var group = document.querySelectorAll('[data-checkbox-id]'),
    item, main;
  if ( group[0] ) {
    for ( var i = 0; i < group.length; i++ ) {
      main = document.querySelector('#' + group[i].getAttribute('data-checkbox-id') + '');
      main.removeEventListener('change', checkItems); // if content has been added dynamically
      main.addEventListener('change', checkItems);

      item = group[i].querySelectorAll('[type=checkbox]');
      for ( var j = 0; j < item.length; j++ ) {
        item[j].removeEventListener('change', checkMain); // if content has been added dynamically
        item[j].addEventListener('change', checkMain);
      }
    }
  }
  function checkItems() {
    item = document.querySelectorAll('[data-checkbox-id=' + this.id + '] [type=checkbox]');
    for ( var i = 0; i < item.length; i++ ) {
      item[i].checked = !!this.checked;
    }
  }
  function checkMain() {
    var id = searchAttributeValueInParents( this, 'data-checkbox-id' ),
      main = document.querySelector('#' + id),
      isAllChecked = true;
    item = document.querySelectorAll('[data-checkbox-id=' + id + '] [type=checkbox]');
    for ( var j = 0; j < item.length; j++ ) {
      if ( item[j].checked ) continue;
      isAllChecked = false;
    }
    main.checked = isAllChecked;
  }
  function searchAttributeValueInParents( element, attribute ) {
    if ( element.parentNode.hasAttribute( attribute ) ) {
      return element.parentNode.getAttribute( attribute );
    }
    return searchAttributeValueInParents( element.parentNode, attribute );
  }
}

// Control of groups of <select>
function selectGroup( select, containerSelector ) {
    /* Example
     <select onchange="selectGroup(this, 'span')">
     <span>
     <select></select>
     <select></select>
     </span>
     */
  var option = select.querySelectorAll('option'),
    value,
    selectItem = document.querySelectorAll( containerSelector + ' select' );

  for ( var i = 0; i < option.length; i++ ) {
    if ( option[i].selected ) {
      value = option[i].value;
      break;
    }
  }
  for ( i = 0; i < selectItem.length; i++ ) {
    option = selectItem[i].querySelectorAll('option');
    for ( var j = 0; j < option.length; j++ ) {
      if ( option[j].value === value ) {
        option[j].selected = true;
        continue;
      }
      option[j].selected = false;
    }
  }
}

// Principal section, Bells page
function bellsControl(){
  var removeBellButton = document.querySelectorAll('.removeBellButton'),
    addBellButton = document.querySelectorAll('.addBellButton'),
    timeInput, a, lessonLabel;

  if ( !removeBellButton[0] ) return;

  for ( var i = 0; i < removeBellButton.length; i++ ) {
    removeBellButton[i].onclick = removeEntry;
  }

  lessonLabel = getLocalization( 'footerWWLessonToLower', 'lesson' );

  for ( var j = 0; j < addBellButton.length; j++ ) {
    addBellButton[j].parentNode.onclick = function () {
      var tr = getParentByTag( this, 'table' ).tBodies[0].rows[0],
        newTr = tr.cloneNode(true),
        input;
      newTr.querySelector('.removeBellButton').onclick = removeEntry;
      input = newTr.querySelectorAll('td > input');

      input[0].value = getParentByTag(this, 'table').tBodies[0].rows.length + 1 + ' ' + lessonLabel;
      input[1].value = input[2].value = '';
      addHandlers( input[1] );
      addHandlers( input[2] );
      tr.parentNode.appendChild(newTr);
    };
  }

  timeInput = document.querySelectorAll('.page-main td:not(:first-child) input');
  for ( var n = 0; n < timeInput.length; n++ ) {
    addHandlers( timeInput[n] );
  }

  function addHandlers( input ) {
    input.onkeydown = function (event) {
      if ( this.value.length > 6
        || !event.key.match(/[\d:.; ]|Backspace|Delete/) )
      { event.preventDefault(); }
      a = this.value;
    };
    input.onkeyup = function (event) {
      var x;
      if ( event.key === 'Backspace' || event.key === 'Delete' ) return;
      switch ( this.value.length ) {
        case 0:
          break;
        case 1:
          x = this.value;
          if ( !!Number(x) || x === '0' ) {
            if ( Number(x) > 2 ) this.value = '0' + x + ':';
          } else this.value = '';
          break;
        case 2:
          x = this.value;
          if ( !!Number(x) || x === '00' ) {
            if ( Number(x) > 23 ) this.value = '23';
            this.value += ':';
          } else this.value = a;
          break;
        case 3:
          if ( event.key.match(/[0-5]/) ) {
            this.value = a + ':' + event.key;
          } else if ( this.value.match(/:/) ) {
            this.value = a;
          } else this.value = a + ':';
          break;
        case 4:
          x = this.value.slice(3);
          if ( !!Number(x) || x === '0' ) {
            if ( x > 5 ) this.value = a + '5';
          } else this.value = a;
          break;
        case 5:
          x = this.value.split(':');
          if ( !this.value.match(/[0-2]\d:[0-5]\d/)
            || Number(x[0]) > 23
            || Number(x[1]) > 59 ) this.value = a;
          break;
        case 6:
          this.value = a;
          break;
        default:
          this.value = '';
      }
    };
    input.onblur = function () {
      if ( !this.value.match(/[0-2]\d:[0-5]\d/) ) {
        if ( this.value.match(/\d:[0-5]\d/) ) this.value = '0' + this.value;
        else this.value = '';
      }
      a = '';
    };
    input.ondrop = function () { event.preventDefault(); };
  }

  function removeEntry() {
    var tr = this.parentNode.parentNode;
    if ( tr.parentNode.children.length > 1 ) {
      tr.parentNode.removeChild(tr);
    }
  }
}


// Head teacher section, Students page
function studentsMoveDeleteButtons(){
  var checkBox = document.querySelectorAll('.students-page td:first-child input'),
    hiddenButon = document.querySelectorAll('.students-page .page-controls .hidden'),
    hidden = true;
  if ( checkBox[0] ) {
    for (var i = 0; i < checkBox.length; i++) {
      checkBox[i].addEventListener('change', function () {
        for (var i = 0; i < checkBox.length; i++) {
          if (checkBox[i].checked) {
            if (hidden) {
              for (var j = 0; j < hiddenButon.length; j++) {
                hiddenButon[j].classList.remove('hidden');
              }
              hidden = false;
            }
            return;
          }
        }
        for (j = 0; j < hiddenButon.length; j++) {
          hiddenButon[j].classList.add('hidden');
        }
        hidden = true;
      });
    }
  }
}


// Head teacher section, Add subject page popup
function selectSubject() {
  var subject = document.querySelectorAll('.popupHeadTeacherAddSubject .popup_side span'),
    subject2 = document.querySelector('.popupHeadTeacherAddSubject #subject-list'), // <select>
    subjectNameInput = document.querySelector('input#subject-name-add'),
    subjectSelectedNow,
    customSubject,
    customSubjectTitle = getLocalization( 'RREnterTitleUniqueSubject', 'Enter the name for the custom subject');

  customSubject = document.getElementById('customSubject') ? document.getElementById('customSubject').innerHTML : 'Custom subject';

  if ( subject[0] ) {
    for (var i = 0; i < subject.length; i++) {
      if ( subject[i].classList.contains('selected') ) continue;
      subject[i].onclick = function () {
        subjectNameInput.disabled = true;
        subjectNameInput.value = this.textContent;
        if ( subjectSelectedNow ) subjectSelectedNow.classList.remove('selected-now');
        subjectSelectedNow = this;
        this.classList.add('selected-now');
        if ( this.textContent === customSubject ) {
          subjectNameInput.disabled = false;
          subjectNameInput.value = '';
          subjectNameInput.placeholder = customSubjectTitle;
        }
      };
    }
  }
  if ( subject2 ) {
    subject2.onchange = function () {
      if ( subject2.value === customSubject ) {
        subjectNameInput.classList.add('active');
        subjectNameInput.disabled = false;
        subjectNameInput.value = '';
        subjectNameInput.placeholder = customSubjectTitle;
      } else {
        subjectNameInput.classList.remove('active');
        subjectNameInput.value = subject2.value;
      }
    };
  }
}


// Head teacher section, Groups page
function addGroup(){
  var group = document.querySelectorAll('.groups-page .group'),
    newGroup, name, checkbox, tbody, label,
    groupWord = getLocalization( 'footerGroupToLower', 'group' );

  if ( group.length < 5 ) {
    newGroup = group[ group.length - 1 ].cloneNode(true);

    newGroup.classList.remove('hidden');

    //--------------Ivan
    newGroup.classList.add('PupilSubgroup');
    newGroup.setAttribute( 'data-group-number', group.length.toString() );
    //--------------Ivan

    name = newGroup.querySelector('caption label span');
    name.textContent = group.length + ' ' + groupWord;

    checkbox = newGroup.querySelector('input');
    checkbox.id = checkbox.id.replace( '0', '' + group.length );

    tbody = newGroup.querySelector('tbody');
    tbody.setAttribute( 'data-checkbox-id', checkbox.id );

    label = newGroup.querySelector('caption label');
    label.setAttribute( 'for', checkbox.id );

    document.querySelector('.page-main').appendChild( newGroup );

    message( getLocalization( 'RRGroupSuccessAddNotification', 'A new group has been added' ) );
  }

  refreshGroupButtons();
  //fixFooter();
}
function refreshGroupButtons() {
  var group = document.querySelectorAll('.groups-page .group'),
    button = document.querySelectorAll('[onclick="addGroup()"]');
  if ( group.length > 4 ) {
    for ( var i = 0; i < button.length; i++ ) {
      button[i].classList.remove('button-design-01');
      button[i].classList.add('button-design-03');
      button[i].classList.add('inactive');
      button[i].title = getLocalization( 'YYRRUnpossibleCreateFourGroups', 'It is not possible to have more than 4 groups' );
    }
  } else {
    for ( i = 0; i < button.length; i++ ) {
      button[i].classList.remove('button-design-03');
      button[i].classList.add('button-design-01');
      button[i].classList.remove('inactive');
      button[i].title = getLocalization( 'YYViseGroupAddGroup', 'Add a new group' );
    }
  }
}

function controlMoveBetweenGroupsButtons(){
  // checkbox 'change' event not firing when it changed by javascript
  var checkboxAll = document.querySelectorAll('.groups-page table input[type=checkbox]'),
    checkboxTbody = document.querySelectorAll('.groups-page tbody input[type=checkbox]'),
    icon,
    checkDetected = false;
  if ( checkboxTbody[0] ) {
    for ( var i = 0; i < checkboxAll.length; i++ ) {
      checkboxAll[i].removeEventListener('change', control); // if content has been added dynamically
      checkboxAll[i].addEventListener('change', control);
    }
  }
  function control() {
    for ( var i = 0; i < checkboxTbody.length; i++ ) {
      if ( checkboxTbody[i].checked ) {
        checkDetected = true;
        break;
      } else {
        checkDetected = false;
      }
    }
    for ( i = 0; i < checkboxTbody.length; i++ ) {
      icon = checkboxTbody[i].parentNode.parentNode.querySelector('td:last-child .material-icons');
      if (icon !== undefined) { //если групп нет, ошибка возникает (Валера)
        if (checkDetected && checkboxTbody[i].checked) {
          icon.textContent = 'swap_vertical_circle';
          icon.classList.remove('hidden');
        } else if (checkDetected && !checkboxTbody[i].checked) {
          icon.classList.add('hidden');
        } else {
          icon.textContent = 'swap_vert';
          icon.classList.remove('hidden');
        }
      }
    }
  }
}


// Head teacher section, Schedule page
function addLesson( button ) {
  // the page can contain several tables
  // button(s) must be in the <tfoot> !
  var table = getParentByTag( button, 'table' ),
    tbody = table.tBodies[0],
    newTr, select, input;

  if ( tbody.classList.contains('hidden') ) {
    table.caption.classList.remove('hidden');
    table.tHead.classList.remove('hidden');
    tbody.classList.remove('hidden');
  } else {
    newTr = tbody.rows[0].cloneNode(true);

    newTr.removeAttribute('data-id');
    newTr.classList.remove('hidden');

    if ( !newTr.cells[0].children[0] ) { // table with lessons number
      newTr.cells[0].innerHTML = '';
    }

    select = newTr.querySelectorAll('select');
    for ( var i = 0; i < select.length; i++ ) {
      select[i].querySelector('option').selected = true;
    }
    input = newTr.querySelectorAll('input');
    for ( i = 0; i < input.length; i++ ) {
      input[i].value = '';
    }

    tbody.appendChild(newTr);
  }
}


// Teacher section, Journal page
function showSuggestions( element ) {
  var suggestions = document.querySelectorAll('.suggestions');

  for ( var i = 0; i < suggestions.length; i++ ) {
    if ( suggestions[i].getAttribute('rel') === element.name ) {
      suggestions[i].classList.toggle('visible');
      continue;
    }
    suggestions[i].classList.remove('visible');
  }
}
function insertTheme( element ) {
    /*
     var rel = element.getAttribute('rel'),
     textarea = document.querySelector('textarea[name=' + rel + ']');
     */
  for ( var i = 0; i < element.children.length; i++ ) {
    element.children[i].onclick = function () {
      var textarea = this.parentNode.previousElementSibling;
      textarea.value = this.textContent;
      textarea.setAttribute('data-book-term-id', this.getAttribute('data-book-term-id'));
      textarea.setAttribute('data-book-term-title', this.textContent);
      element.classList.remove('visible');
    };
  }
}
function insertSymbols( element ) {
  var rel = element.getAttribute('rel'),
    textarea = document.querySelector('textarea.' + rel);

  for ( var i = 0; i < element.children.length; i++ ) {
    element.children[i].onclick = function () {
      if ( textarea.selectionStart >= 0 ) {
        var startPos = textarea.selectionStart,
          endPos = textarea.selectionEnd;
        textarea.value = textarea.value.substring( 0, startPos )
          + this.textContent
          + textarea.value.substring( endPos, textarea.value.length );
      } else {
        textarea.value += this.textContent;
      }
    };
  }
}
function toggleSelected( element ) {
  element.classList.toggle('selected');
}
function attachFile( input, fileName ) {
  // fileName - to calling from outside
  var container = input.parentNode.parentNode,
    newFileBlock = container.querySelector('.file-attached.hidden').cloneNode(true),
    oldFileBlock = container.querySelectorAll('.file-attached:not(.hidden)'),
    inputCopy = input.cloneNode(true),
    link;

  newFileBlock.appendChild( inputCopy );
  newFileBlock.classList.remove('hidden');

  if ( !fileName ) fileName = input.value.slice( input.value.lastIndexOf('\\') + 1 );
  newFileBlock.querySelector('span').textContent = fileName;

  if ( oldFileBlock[0] ) {
    // remove previously loaded file with the same name
    for ( var i = 0; i < oldFileBlock.length; i++ ) {
      link = oldFileBlock[i].querySelector('span') || oldFileBlock[i].querySelector('a');
      if ( link.innerHTML === fileName ) container.removeChild( oldFileBlock[i] );
    }
  }

  newFileBlock.querySelector('.file-remove').onclick = function () {
    container.removeChild( newFileBlock );
  };

  container.insertBefore( newFileBlock, input.parentNode );
  input.value = null;
}
function attachLink( button, linkName ) {
  // linkName - to calling from outside
  var newLink = button.parentNode.querySelector('.link-attached').cloneNode(true);
  newLink.classList.remove('hidden');
  newLink.querySelector('.link-remove').onclick = function () {
    newLink.parentNode.removeChild( newLink );
  };

  newLink.querySelector('input').value = linkName ? linkName : '';

  button.parentNode.insertBefore( newLink, button );
}

// charts page
function multipleSelect() {
    /* example
     <div class="button-multiple-select">
       <div class="area-multiple-select">
         <input type="checkbox" id="PupilId-0" value="0">
         <input type="checkbox" id="PupilId-1" value="1>
       </div>
       <select class="hidden" multiple>
         <option name="PupilId-0" value="0"></option>
         <option name="PupilId-1" value="1"></option>
       </select>
     </div>
     */
  var selectCustom = document.querySelectorAll('.button-multiple-select'),
    input;
  if ( !selectCustom.length ) return;

  for ( var i = 0; i < selectCustom.length; i++ ) {
    selectCustom[i].onclick = function ( event ) {
      var element = this;
      element.classList.toggle('selected');
      event.stopPropagation();
      if ( element.classList.contains('selected') ) {
        document.addEventListener( 'click', closeAllSelects );
      } else {
        document.removeEventListener( 'click', closeAllSelects );
      }
    };

    if ( !selectCustom[i].querySelector('select') ) continue;
    input = selectCustom[i].querySelectorAll('input');
    for ( var j = 0; j < input.length; j++ ) {
      input[j].onclick = function () {
        var option = this.parentNode.parentNode.querySelector('[name=' + this.id + ']');
        if ( this.checked ) {
          option.setAttribute('selected', 'selected');
        } else {
          option.removeAttribute('selected');
        }
      };
    }
  }
  function closeAllSelects() {
    for ( var i = 0; i < selectCustom.length; i++ ) {
      selectCustom[i].classList.remove('selected');
    }
  }
}

// Student section, Information page; Journal section, Rewards page
var loadImage = (function () {
  var imgSrcInitial = document.body.querySelectorAll('.img-src-initial'),
    firstLoad = true;
  for ( var i = 0; i < imgSrcInitial.length; i++ ) {
    if ( imgSrcInitial[i] ) {
      imgSrcInitial[i].value = imgSrcInitial[i].parentNode.querySelector('.image-body img').src;
    }
  }
  return function loadImage( element ) {
    var image = element.querySelector('img'),
      imgSrcInitial = element.querySelector('.img-src-initial'),
      buttonCrop = element.querySelector('.button-crop'),
      //buttonZoom = element.querySelector('.button-zoom'),
      buttonRestore = element.querySelector('.button-restore'),
      buttonClear = element.querySelector('.button-clear'),
      buttonSave = element.querySelector('.button-save'),
      imageCropArea = element.querySelector('.image-crop-area'),
      inputFile = element.querySelector('input[type=file]');

      /*
       if ( element.clientHeight > 300 || element.clientWidth > 300 ) {
       buttonCrop.classList.remove('hidden');
       } else {
       buttonCrop.classList.add('hidden');
       }
       */
    checkState();

    if ( firstLoad ) {
      inputFile.onchange = function () {
        image.src = URL.createObjectURL( inputFile.files[0] );
        inputFile.value = ''; // to being ready to new load
        checkState();
      };
      buttonCrop.onclick = function () {
        imageCropArea.classList.toggle('hidden');
      };
      buttonClear.onclick = function () {
        image.src = '/images/student-default.jpg';
        checkState();
      };
      buttonRestore.onclick = function () {
        image.src = imgSrcInitial.value;
        checkState();
      };
      buttonSave.onclick = function () {
        imgSrcInitial.value = image.src;
        checkState();
      };
    }

    function checkState() {
      if ( image.src.indexOf('student-default.jpg') === -1 ) {
        buttonClear.classList.remove('hidden');
      } else {
        buttonClear.classList.add('hidden');
      }

      if ( image.src !== imgSrcInitial.value ) {
        buttonRestore.classList.remove('hidden');
        buttonSave.classList.remove('hidden');
      } else {
        buttonRestore.classList.add('hidden');
        buttonSave.classList.add('hidden');
      }
      //setTimeout(fixFooter, 300);
    }
  };
})();

function MarksBox() {
  var self = this,
    tableMarkType, tableMarkValue, tableMarkComment, cellsClass,
    marksBox = document.querySelector('.marks-box'),
    closeButton = marksBox.querySelector('.mark-close'),
    digitButton = marksBox.querySelectorAll('.mark-digits button'),
    txtButton = marksBox.querySelectorAll('.mark-txt'),
    doubleButton = marksBox.querySelector('.mark-double'),
    doubleFlag = false,
    markField = marksBox.querySelector('.mark-field'),
    commentField = marksBox.querySelector('textarea'),
    clearButton = marksBox.querySelector('.mark-clear'),
    okButton = marksBox.querySelector('.mark-set'),
    marksTypeSelector = marksBox.querySelector('select'),
    respectfulReason = getLocalization( 'YYResrespectfulReasonAbbreviature', 'truancy' ),
    disrespectfulReason = getLocalization( 'YYDisrespectfulReasonAbbreviature', 'illness' );

  markField.value = doubleFlag ? '/' : '10';

  closeButton.onclick = function () {
    self.close();
  };

  clearButton.onclick = function () {
    markField.classList.remove('error');
    markField.value = ( doubleFlag ) ? '/' : '';
  };

  doubleButton.onclick = function () {
    if ( !doubleFlag ) {
      this.textContent = getLocalization( 'YYWWOneMarkMode', 'single' );
      if ( markField.value === disrespectfulReason || markField.value === respectfulReason ) {
        markField.value = '/';
      } else {
        markField.value += '/';
      }
    } else {
      this.textContent = getLocalization( 'YYDoubleMark', 'double' );
      if ( markField.value === disrespectfulReason || markField.value === respectfulReason ) {
        markField.value = '';
      } else {
        markField.value = markField.value.slice(0, markField.value.indexOf('/'));
      }
    }
    markField.classList.remove('error');
    doubleFlag = !doubleFlag;
  };

  for ( var i = 0; i < digitButton.length; i++ ) {
    digitButton[i].onclick = function () {
      var slashPos = markField.value.indexOf('/');
      if ( slashPos === 0 || ( slashPos === -1 && doubleFlag ) ) {
        markField.value = this.textContent + '/';
      } else if ( slashPos !== -1 && doubleFlag ) {
        markField.value = markField.value.slice( 0, slashPos + 1 ) + this.textContent;
      } else {
        markField.value = this.textContent;
      }
      markField.classList.remove('error');
    };
  }

  for ( i = 0; i < txtButton.length; i++ ) {
    txtButton[i].onclick = function () {
      markField.value = this.innerHTML;
      markField.classList.remove('error');
    };
  }

  marksTypeSelector.onchange = function () {
    marksTypeSelector.classList.remove('error');
  };

  this.show = function( tableMarkButton, mode ) {
    closeAllBoxes( self ); // close all boxes except the current, to smooth moving

    if ( !mode ) mode = 0;

      if (mode === 2 || mode === 3) { // quarter, year
      marksBox.classList.add('mb-quarter');
      marksBox.classList.remove('mb-passFail');
      marksBox.classList.remove('mb-pass');
      doubleFlag = false;
    } else if (mode === 4) { // exam
        marksBox.classList.remove('mb-passFail');
        marksBox.classList.remove('mb-quarter');
        marksBox.classList.remove('mb-pass');
    } else if ( mode === 1 ) { // pass / fail
      marksBox.classList.add('mb-passFail');
      marksBox.classList.remove('mb-quarter');
      marksBox.classList.remove('mb-pass');
      doubleFlag = false;
    } else if (mode === 5) { // pass
        marksBox.classList.add('mb-pass');
        marksBox.classList.remove('mb-passFail');
        marksBox.classList.remove('mb-quarter');
        doubleFlag = false;
    } else { // day
      marksBox.classList.remove('mb-passFail');
      marksBox.classList.remove('mb-quarter');
      marksBox.classList.remove('mb-pass');
    }

    marksBox.classList.remove('hidden');
    calculatePosition( tableMarkButton );
      marksBox.classList.add('visible');
    window.addEventListener('resize', function () {
      calculatePosition( tableMarkButton );
    });

    tableMarkValue = tableMarkButton.parentNode.querySelector('[name=MarkTitle]');
    if ( tableMarkValue && tableMarkValue.value ) {
      markField.value = tableMarkValue.value;
    } else if (mode !== 1 && mode !== 5) {
        markField.value = '10';
    } else if (mode === 5) {
        markField.value = getLocalization('YYDisrespectfulReasonAbbreviature', 'illness');
    } else {
      markField.value = getLocalization( 'YYCredit', 'pass' );
    }

    tableMarkComment = tableMarkButton.parentNode.querySelector('[name=MarkComment]');
    if ( tableMarkComment && tableMarkComment.value ) {
      commentField.value = tableMarkComment.value;
      commentField.parentNode.classList.remove('hidden');
    } else {
      commentField.value = '';
    }

    tableMarkType = tableMarkButton.parentNode.querySelector('[name=MarkType]');
    cellsClass = tableMarkButton.parentNode.className;//cells queryselector class=thematic-highlight
    var thematicMarkType = marksTypeSelector[11].innerText;
    var defaultMarkType = marksTypeSelector[1].innerText;

    if (tableMarkType && tableMarkType.value) {
        setMarksType(tableMarkType.value);
    } else if (this.marksTypeAll) {
	    setMarksType(this.marksTypeAll);
    } else if (cellsClass == "thematic-highlight") {
	    setMarksType(thematicMarkType);
    } else {
	    setMarksType(defaultMarkType);
    }

    function setMarksType( value ) {
      var marksTypeOption = marksBox.querySelectorAll('option'),
        newOptionDetected = true,
        newOption;
      for ( i = 0; i < marksTypeOption.length; i++ ) {
        if ( marksTypeOption[i].value === value ) {
          marksTypeOption[i].selected = true;
          newOptionDetected = false;
          continue;
        }
        marksTypeOption[i].selected = false;
      }
      if ( newOptionDetected ) {
        newOption = document.createElement('option');
        newOption.value = newOption.innerHTML = value;
        newOption.selected = true;
        marksTypeSelector.appendChild( newOption );
      }
    }

    collectData(tableMarkButton);

    function collectData(button) {
        
        var finishedlinksNote = document.querySelector(".finished-home-work-links"),
            linkInput = button.parentNode.querySelectorAll('[name="finishedLessonLink"]'),
            //dateInput = button.parentNode.querySelector('[name="finishedLessonLinkCreateDate"]'),
            container = finishedlinksNote.querySelector(".scroll-wrap"),
            sectionName = finishedlinksNote.querySelectorAll("strong"),
            a = finishedlinksNote.querySelectorAll("a");

        for (var k = 0; k < a.length; k++) {
            a[k].parentNode.removeChild(a[k]);
        }
        
        for (let i = 0; i < linkInput.length; i++) {
            if (linkInput[i].value) createLinkToURL(linkInput[i]);
        }

        if (linkInput.length === 0) sectionName[0].classList.add('hidden');
        else sectionName[0].classList.remove('hidden');

        /*if (dateInput === null) sectionName[1].classList.add('hidden');
        else sectionName[1].classList.remove('hidden');*/

        function createLinkToURL(hiddenInput) {
            
            var container, div, a, removeButton;
            container = finishedlinksNote.querySelector(".scroll-wrap");
            div = document.createElement("div");
            div.classList.add('link-attached');
            a = document.createElement("a");
            a.innerHTML = hiddenInput.value;
            const link = hiddenInput.hasAttribute("data-path")
                ? hiddenInput.getAttribute("data-path")
                : hiddenInput.value;
            a.href = link.match(/https?:\/\//) ? link : `http://${link}`;

            if (hiddenInput.hasAttribute("data-id")) {
                const dataAttribute = document.createElement("data-id");
                dataAttribute.innerText = hiddenInput.getAttribute("data-id");
                dataAttribute.hidden = true;
                div.appendChild(dataAttribute);
            }
            div.appendChild(a);
            container.insertBefore(div, sectionName[0].nextElementSibling);
        }

        finishedlinksNote.classList.remove('hidden');
    }

    self.setMark( tableMarkButton, mode );
  };

  this.close = function() {
    marksBox.classList.remove('visible');
    marksBox.classList.add('hidden');
    marksBox.removeAttribute('style');
    markField.classList.remove('error');
    marksTypeSelector.classList.remove('error');
  };

  this.setMark = function ( tableMarkButton, mode ) {
    okButton.onclick = function () {
      if ( !markField.value || markField.value === '/' ) { // empty mark (reset)
        if ( document.body.querySelector('.journal-1') ) {
          tableMarkButton.innerHTML = getLocalization( 'YYDeliver', 'rate' );
        } else if ( document.body.querySelector('.journal-3') ) {
          tableMarkButton.innerHTML = '';
          //tableMarkButton.classList.add('changed-now');
        }
        if ( tableMarkType ) tableMarkType.value = '';
        if ( tableMarkValue ) tableMarkValue.value = '';
        if ( tableMarkComment ) tableMarkComment.value = '';
        self.close();
          
        // Valera's functions (it will add also 'changed-now' class)
        if ( (mode === 0 || mode === 1 || mode === 5)
          && typeof saveMark !== 'undefined'
          && !document.body.querySelector('.journal-1') )
          saveMark(tableMarkButton.parentNode, mode);
        if ( mode === 2 && typeof saveMarkQuarter !== 'undefined' )
            saveMarkQuarter(tableMarkButton.parentNode);
        if (mode === 3 && typeof saveMarkYear !== 'undefined')
            saveMarkYear(tableMarkButton.parentNode);
        if (mode === 4 && typeof saveMarkExam !== 'undefined')
              saveMarkExam(tableMarkButton.parentNode);

      } else { // not empty mark
        if ( markField.value.indexOf('/') === markField.value.length - 1 ) { // mark ends with '/'
          markField.classList.add('error');
        }
        /*
         else if ( !self.getMarkType() && mode !== 2 ) { // mark type is not selected
         marksTypeSelector.classList.add('error');
         }
         */
        else { // everything is OK
          tableMarkButton.innerHTML = markField.value;

          if ( tableMarkValue ) tableMarkValue.value = markField.value;
          else createInput( 'MarkTitle', markField.value );

          if ( mode !== 2 ) {
            if ( self.getMarkType().length > 0 ) {
              if ( tableMarkType ) tableMarkType.value = self.getMarkType();
              else createInput( 'MarkType', self.getMarkType() );

              tableMarkButton.title = self.getMarkType();
              customTitles( tableMarkButton ); // load new custom title
            } else {
              customTitles( tableMarkButton,
                getLocalization( 'YYRRTypeOfMarksNotSelect', 'Type of the mark is not selected')
              );
            }
          }
          if ( commentField.value ) {
            if ( tableMarkComment ) tableMarkComment.value = commentField.value;
            else createInput( 'MarkComment', commentField.value );
          }
          self.close();

          // Valera's functions (it will add also 'changed-now' class)
          if ( (mode === 0 || mode === 1 || mode === 5)
            && typeof saveMark !== 'undefined'
            && !document.body.querySelector('.journal-1') )
            saveMark(tableMarkButton.parentNode, mode);
          if ( mode === 2 && typeof saveMarkQuarter !== 'undefined' )
              saveMarkQuarter(tableMarkButton.parentNode);
          if (mode === 3 && typeof saveMarkYear !== 'undefined')
              saveMarkYear(tableMarkButton.parentNode);
          if (mode === 4 && typeof saveMarkExam !== 'undefined')
                saveMarkExam(tableMarkButton.parentNode);
        }
      }
    };
    function createInput( name, value ) {
      var input = document.createElement('input');
      input.setAttribute( 'type', 'hidden' );
      input.name = name;
      input.value = value;
      tableMarkButton.parentNode.appendChild( input );
    }
  };

  this.getMarkType = function() {
    var option = marksBox.querySelectorAll('option');
    for ( var i = 0; i < option.length; i++ ) {
      if ( option[i].selected ) {
        return option[i].value;
      }
    }
  };

  function calculatePosition( tableMarkButton ) {
    var x = tableMarkButton.getBoundingClientRect().left + tableMarkButton.clientWidth / 2,
      y = tableMarkButton.getBoundingClientRect().top + tableMarkButton.clientHeight / 2,
      footer = document.querySelector('footer');

    if ( x + marksBox.clientWidth / 2 < window.innerWidth ) {
      marksBox.style.left = x
        - marksBox.parentNode.getBoundingClientRect().left
        - marksBox.clientWidth / 2
        + 'px';
      marksBox.classList.remove('shiftLeft');
    } else {
      marksBox.style.left = x
        - marksBox.parentNode.getBoundingClientRect().left
        - marksBox.clientWidth
        + 30
        + 'px';
      marksBox.classList.add('shiftLeft');
    }

    if ( footer.getBoundingClientRect().top > y + marksBox.clientHeight + 20 ) {
      marksBox.style.top = y
        - marksBox.parentNode.getBoundingClientRect().top
        + 20
        + 'px';
      marksBox.classList.remove('top-side');
    } else {
      marksBox.style.top = y
        - marksBox.parentNode.getBoundingClientRect().top
        - marksBox.clientHeight
        - 20
        + 'px';
      marksBox.classList.add('top-side');
    }
  }
}

function changeMarksType1( select ) {
  var option = select.querySelectorAll('option');
  for ( var i = 0; i < option.length; i++ ) {
    if ( option[i].selected ) {
      MarksBox.prototype.marksTypeAll = option[i].value;
      break;
    }
  }
}
function changeMarksType2( select ) {
  var option, value, tableSelect, tableOption, tableInput;

  option = select.querySelectorAll('option');
  for ( var i = 0; i < option.length; i++ ) {
    if ( option[i].selected ) {
      value = option[i].value;
      break;
    }
  }

  tableSelect = document.querySelectorAll('.journal-2 table select');
  for ( i = 0; i < tableSelect.length; i++ ) {
    tableOption = tableSelect[i].querySelectorAll('option');
    tableInput = tableSelect[i].parentNode.parentNode.querySelector('input');
    if ( tableInput.value ) continue;
    for ( var j = 0; j < tableOption.length; j++ ) {
      if ( tableOption[j].value === value ) {
        tableOption[j].selected = true;
        continue;
      }
      tableOption[j].selected = false;
    }
  }
}

function Box(box) {
    
  var self = this,
    button, scrollElem1, scrollElem2, grip;

  this._box = box;

  this.show = function (element) {
      
    button = element;
    scrollElem1 = getParentByTag( button, 'table' ).parentNode;
    scrollElem2 = getParentByClassName( button, 'page-main' );

    grip = box.querySelector('.Box-grip');
    if ( !grip ) {
      grip = document.createElement('div');
      grip.classList.add('Box-grip');
      box.appendChild( grip );
    }

    closeAllBoxes( self ); // close all boxes except the current, to smooth moving
    box.classList.remove('hidden');
    calculatePosition();
    box.classList.add('visible');
    window.addEventListener('resize', calculatePosition);
    scrollElem1.addEventListener('scroll', calculatePosition);
    scrollElem2.addEventListener('scroll', calculatePosition);
  };

  this.close = function ( immediately ) {
    if ( !box ) return;
    box.classList.remove('visible');
    if ( immediately ) {
      box.classList.add('hidden');
      box.removeAttribute('style');
    } else {
      setTimeout( function () {
        box.classList.add('hidden');
        box.removeAttribute('style');
      }, 300);
    }
  };

  box.querySelector('.icon_close').onclick = self.close;

  function calculatePosition() {
      
    var table = getParentByTag( button, 'table' ),
      headerH = document.querySelector('header').clientHeight,
      footerH = document.querySelector('footer').clientHeight,
      scroll = window.scrollY || window.pageYOffset,
      buttonL = button.getBoundingClientRect().left,
      buttonR = button.getBoundingClientRect().right,
      buttonC = button.getBoundingClientRect().top + button.clientHeight / 2,
      boxT, boxStyleTop,
      headerOverlap, footerOverlap,
      boxContent = box.querySelector('.Box-content'); // for hight Boxes having .Box-content

    if (
      scrollElem1.getBoundingClientRect().left > buttonL
      //|| scrollElem1R < buttonR
      || scrollElem2.getBoundingClientRect().left > buttonL
      || scrollElem2.getBoundingClientRect().right < buttonR
      || buttonL > window.innerWidth
      || buttonR < 0
    ) {
      self.close();
      return;
    }

    if ( buttonL - box.clientWidth > 5 ) {
      box.style.left =
        buttonL
        - box.parentNode.getBoundingClientRect().left
        - box.clientWidth
        - 10
        + 'px';
      box.classList.remove('right-side');
    } else {
      box.style.left =
        buttonR
        - box.parentNode.getBoundingClientRect().left
        + 5
        + 'px';
      box.classList.add('right-side');
    }

    boxStyleTop = //to use in the next calculations without waiting transitions
      buttonC
      - box.parentNode.getBoundingClientRect().top
      - box.clientHeight / 2;

    boxT = boxStyleTop + box.parentNode.getBoundingClientRect().top;

    headerOverlap = headerH - boxT - scroll + 5;
    footerOverlap =  boxT + box.clientHeight - document.body.scrollHeight + footerH + 20;

    if ( headerOverlap > 0 ) {
      boxStyleTop += headerOverlap;
      headerOverlap = 0;
    }

    if ( footerOverlap > 0 ) {
      if ( footerOverlap < - headerOverlap ) {
        boxStyleTop -= footerOverlap;
      } else if ( boxContent ) {
        if ( boxContent.clientHeight > footerOverlap ) {
          boxContent.style.maxHeight = boxContent.clientHeight - footerOverlap + 'px';
        } else boxContent.style.maxHeight = '20px';
      }
    } else if ( boxContent ) boxContent.style.maxHeight = '';

    box.style.top = boxStyleTop + 'px';

    grip.style.top = buttonC - boxStyleTop - box.parentNode.getBoundingClientRect().top + 'px';
  }
}

function BoxLesson(element) {
  Box.apply( this, arguments );

  var self = this,
    boxShow = this.show,
    boxClose = this.close;

  var boxLesson = document.querySelector('.box-lesson'),
    lessonSaveButton = boxLesson.querySelector('.lesson-save');

  var singleData = [
      ['lessonTime', 'innerHTML'],
      ['lessonRoom', 'innerHTML'],
      ['lessonTheme', 'value'],
      ['lessonHomeTask', 'value']
    ],
    multipleData = [
      ['lessonFile', 'file-attached', 'span', 'innerHTML'],
      ['lessonLink', 'link-attached', 'input', 'value']
    ],
    hiddenData = [
      ['lessonThemeBookId', 'lessonTheme'],
      ['lessonHomeTaskBookId', 'lessonHomeTask']
    ];

  this.show = function (button) {
      
    clearData();
    collectData( button );
    initHomeworkBlock(button);
    boxShow.call( this, button );
    lessonSaveButton.onclick = function () {
        
      setData( button );
      if ( typeof saveLesson !== 'undefined' ) saveLesson( button );
      self.close();
    };
  };

  this.close = function () {
      
    boxClose.call( this );
    //clearData();
  };

  function collectData(button) {
      
    var boxElement, tableElement;
    for ( var i = 0; i < singleData.length; i++ ) {
      boxElement = boxLesson.querySelector('.' + singleData[i][0]);
      tableElement = button.querySelector('[name=' + singleData[i][0] + ']');
      if ( tableElement ) boxElement[ singleData[i][1] ] = tableElement.value;
    }

    for ( i = 0; i < multipleData.length; i++ ) {
      tableElement = button.querySelectorAll('[name=' + multipleData[i][0] + ']');
      for ( var j = 0; j < tableElement.length; j++ ) {
        if ( tableElement[j].value ) createLinkToURL( tableElement[j], i );
      }
    }

    // Ivan
    for ( i = 0; i < hiddenData.length; i++ ) {
      boxElement = boxLesson.querySelector('.' + hiddenData[i][1]);
      tableElement = button.querySelector('[name=' + hiddenData[i][0] + ']');
      if (tableElement) {
        boxElement.setAttribute('data-book-term-id', tableElement.value);
        boxElement.setAttribute('data-book-term-title', tableElement.getAttribute('data-book-term-title'));
      }
    }

    // Ivan
    var lessonHomeTaskDateFormatted = boxLesson.querySelector('.lessonHomeTaskDateFormatted');
    var dateFormatted = button.querySelector('[name=dateFormatted]');
    if (lessonHomeTaskDateFormatted && dateFormatted && dateFormatted.value) {
      lessonHomeTaskDateFormatted.innerHTML = dateFormatted.value;
    }

    function createLinkToURL(hiddenInput, i) {
      var container, div, a, removeButton;
      container = self._box.querySelector('.files-and-links');
      div = document.createElement('div');
      div.classList.add( multipleData[i][1] );
      a = document.createElement('a');
      a.innerHTML = hiddenInput.value;
      var link = hiddenInput.hasAttribute('data-path')
          ? hiddenInput.getAttribute('data-path')
          : hiddenInput.value;
      a.href = link.match(/https?:\/\//) ? link : 'http://' + link;

      if (hiddenInput.hasAttribute('data-id')) {
          var dataAttribute = document.createElement('data-id');
          dataAttribute.innerText = hiddenInput.getAttribute('data-id');
          dataAttribute.hidden = true;
          div.appendChild(dataAttribute);
      }

      removeButton = document.createElement('i');
      removeButton.classList.add('material-icons');
      removeButton.classList.add('md-24');
      removeButton.classList.add('button-design-07');
      removeButton.classList.add('link-remove');
      removeButton.innerHTML = '&#xE15C;'; // &#xE15C;
      div.appendChild( a );
      div.appendChild( removeButton );
      container.insertBefore( div, container.querySelector('.' + multipleData[i][1] ).nextElementSibling );
      removeButton.onclick = function () {
        div.parentNode.removeChild( div );
      };
    }
  }

  function setData(button) {
      
    var boxElement, tableElement;

    // set single data
    for ( var i = 0; i < singleData.length; i++ ) {
        boxElement = boxLesson.querySelector('.' + singleData[i][0]);
      tableElement = button.querySelector('[name=' + singleData[i][0] + ']');
      if ( boxElement[ singleData[i][1] ] ) {
        if ( !tableElement ) {
          tableElement = document.createElement('input');
          tableElement.setAttribute('type', 'hidden');
          tableElement.setAttribute('name', singleData[i][0]);
          button.appendChild( tableElement );
        }
        tableElement.value = boxElement[ singleData[i][1] ];
      } else if ( tableElement ) {
        button.removeChild( tableElement );
      }
    }

    // set multiple data
    for ( i = 0; i < multipleData.length; i++ ) {
      tableElement = button.querySelectorAll('[name=' + multipleData[i][0] + ']');
      for ( var j = 0; j < tableElement.length; j++ ) {
        button.removeChild( tableElement[j] );
      }

      boxElement = boxLesson.querySelectorAll( '.' + multipleData[i][1] + ' ' + multipleData[i][2] );
      for ( j = 1; j < boxElement.length; j++ ) { // 1 to exclude hiddens
        if ( boxElement[j][ multipleData[i][3] ] ) {
          tableElement = document.createElement('input');
          tableElement.setAttribute('type', 'hidden');
          tableElement.setAttribute('name', multipleData[i][0]);
          button.appendChild( tableElement );
          tableElement.value = boxElement[j][ multipleData[i][3] ];
        }
      }
    }

    $('.file-attached > a').each(function () {
        tableElement = document.createElement('input');
        tableElement.setAttribute('type', 'hidden');
        tableElement.setAttribute('name', 'lessonFile');
        tableElement.setAttribute('value', $(this).text());
        button.appendChild(tableElement);
        tableElement.value = $(this).text();
    });
      
    boxElement = boxLesson.querySelectorAll('.link-attached a');
    for (j = 0; j < boxElement.length; j++) {
        if (boxElement[j].innerText) {
            tableElement = document.createElement('input');
            tableElement.setAttribute('type', 'hidden');
            tableElement.setAttribute('name', 'lessonLink');
            button.appendChild(tableElement);
            tableElement.value = boxElement[j].innerText;
        }
    }

    // set hidden data
    for ( i = 0; i < hiddenData.length; i++ ) {
      boxElement = boxLesson.querySelector('.' + hiddenData[i][1]);
      tableElement = button.querySelector('[name=' + hiddenData[i][0] + ']');

      if ( boxElement.value !== boxElement.getAttribute('data-book-term-title') ) {
        // если пользователь вручную изменил тему, выбранную из подсказки
        boxElement.removeAttribute('data-book-term-id');
        boxElement.removeAttribute('data-book-term-title');
        if ( tableElement ) button.removeChild( tableElement );
      } else {
        if ( !tableElement ) {
          tableElement = document.createElement('input');
          tableElement.setAttribute('type', 'hidden');
          tableElement.setAttribute('name', hiddenData[i][0]);
          button.appendChild( tableElement );
        }
        tableElement.value = boxElement.getAttribute('data-book-term-id');

        // Ivan
        tableElement.setAttribute('data-book-term-title', boxElement.getAttribute('data-book-term-title'));
      }
    }
  }

  function clearData() {
      
    var boxElement, suggestions;
    for ( var i = 0; i < singleData.length; i++ ) {
      boxElement = boxLesson.querySelector('.' + singleData[i][0]);
      boxElement[ singleData[i][1] ] = '';
    }

    for ( i = 0; i < multipleData.length; i++ ) {
      boxElement = boxLesson.querySelectorAll('.' + multipleData[i][1]);
      for ( var j = 1; j < boxElement.length; j++ ) {
        boxElement[j].parentNode.removeChild(boxElement[j]);
      }
    }

    // Ivan
    for (i = 0; i < hiddenData.length; i++) {
      boxElement = boxLesson.querySelector('.' + hiddenData[i][1]);

      boxElement.removeAttribute('data-book-term-id');
      boxElement.removeAttribute('data-book-term-title');
    }

    suggestions = boxLesson.querySelectorAll('.suggestions');
    for ( i = 0; i < suggestions.length; i++ ) {
      suggestions[i].classList.remove('visible');
    }
  }

  function initHomeworkBlock(button) {
      
        var homeworkBlock = boxLesson.querySelector('.homeworkBlock');
        var nextDayTimetableSubjectId = button.querySelector('[name=nextDayTimetableSubjectId]');
        var nextDayDate = button.querySelector('[name=nextDayDate]');

        if (homeworkBlock) {
            if (nextDayTimetableSubjectId && nextDayTimetableSubjectId.value && nextDayDate && nextDayDate.value) {
                homeworkBlock.classList.remove('hidden');
            } else {
                homeworkBlock.classList.add('hidden');
            }
        }
    }
}

function BoxFinishedHomeWork(element) {
    
    Box.apply(this, arguments);

    var self = this,
        boxShow = this.show,
        boxClose = this.close;

    var boxFinishedHomeWork = document.querySelector(".box-finished-home-work"),
        finishedHomeWorkSaveButton = boxFinishedHomeWork.querySelector(".finished-home-work-save"),
        finishedHomeWorkLinkAdd = boxFinishedHomeWork.querySelector(".link-add");

    var multipleData = [
        ["lessonFile", "file-attached", "span", "innerHTML"],
        ["finishedLessonLink", "link-attached", "input", "value"]
    ];

    this.show = function(button, mode) {
        clearData();
        collectData(button, mode);
        boxShow.call(this, button);
        finishedHomeWorkSaveButton.onclick = function() {
            setData(button);
            if (typeof saveFinishedHomeWork !== "undefined") saveFinishedHomeWork(button);
            self.close();
        };
    };

    this.close = function() {
        boxClose.call(this);
        //clearData();
    };

    function collectData(button, mode) {
        var tableElement;

        for (i = 0; i < multipleData.length; i++) {
            tableElement = button.querySelectorAll(`[name=${multipleData[i][0]}]`);
            for (let j = 0; j < tableElement.length; j++) {
                if (tableElement[j].value) createLinkToURL(tableElement[j], i);
            }
        }

        if(mode === 2) {
            finishedHomeWorkSaveButton.setAttribute("class", "button-design-01 button-small finished-home-work-save disabled");
            finishedHomeWorkLinkAdd.setAttribute("class", "button-design-01 button-small link-add disabled");
        }

        function createLinkToURL(hiddenInput, i) {
            var container, div, a, removeButton;
            container = self._box.querySelector(".files-and-links");
            div = document.createElement("div");
            div.classList.add(multipleData[i][1]);
            a = document.createElement("a");
            a.innerHTML = hiddenInput.value;
            const link = hiddenInput.hasAttribute("data-path")
                ? hiddenInput.getAttribute("data-path")
                : hiddenInput.value;
            a.href = link.match(/https?:\/\//) ? link : `http://${link}`;

            if (hiddenInput.hasAttribute("data-id")) {
                const dataAttribute = document.createElement("data-id");
                dataAttribute.innerText = hiddenInput.getAttribute("data-id");
                dataAttribute.hidden = true;
                div.appendChild(dataAttribute);
            }

            div.appendChild(a);

            if (mode === 1) {
                removeButton = document.createElement("i");
                removeButton.classList.add("material-icons");
                removeButton.classList.add("md-24");
                removeButton.classList.add("button-design-07");
                removeButton.classList.add("link-remove");
                removeButton.innerHTML = "&#xE15C;"; // &#xE15C;
                
                div.appendChild(removeButton);
                
                removeButton.onclick = function() {
                    div.parentNode.removeChild(div);
                };
            }

            container.insertBefore(div, container.querySelector(`.${multipleData[i][1]}`).nextElementSibling);
        }
    }

    function setData(button) {
        
        var boxElement, tableElement;
        // set multiple data
        for (i = 0; i < multipleData.length; i++) {
            tableElement = button.querySelectorAll(`[name=${multipleData[i][0]}]`);
            for (var j = 0; j < tableElement.length; j++) {
                button.removeChild(tableElement[j]);
            }

            boxElement = boxFinishedHomeWork.querySelectorAll(`.${multipleData[i][1]} ${multipleData[i][2]}`);
            for (j = 1; j < boxElement.length; j++) { // 1 to exclude hiddens
                if (boxElement[j][multipleData[i][3]]) {
                    tableElement = document.createElement("input");
                    tableElement.setAttribute("type", "hidden");
                    tableElement.setAttribute("name", multipleData[i][0]);
                    button.appendChild(tableElement);
                    tableElement.value = boxElement[j][multipleData[i][3]];
                }
            }
        }

        boxElement = boxFinishedHomeWork.querySelectorAll(".link-attached a");
        for (j = 0; j < boxElement.length; j++) {
            if (boxElement[j].innerText) {
                tableElement = document.createElement("input");
                tableElement.setAttribute("type", "hidden");
                tableElement.setAttribute("name", "finishedLessonLink");
                button.appendChild(tableElement);
                tableElement.value = boxElement[j].innerText;
            }
        }

    }

    function clearData() {
        var boxElement;

        for ( i = 0; i < multipleData.length; i++ ) {
            boxElement = boxFinishedHomeWork.querySelectorAll('.' + multipleData[i][1]);
            for ( var j = 1; j < boxElement.length; j++ ) {
                boxElement[j].parentNode.removeChild(boxElement[j]);
            }
        }
    }
}

function saveFinishedHomeWork(cell) {
    
    var cell = $(cell);
    $("#main-loading").slideDown();
    var url = "/Client/SaveFinishedHomeWorkLinks/";
    var homeWorkLinks = [];

    cell.find("[name=finishedLessonLink]").each(function (i, link) {
        var linlUrl = $(link).val();
        if (linlUrl) {
            homeWorkLinks.push(linlUrl);
        }
    });

    var request = new FormData();

    var data = {
        pupilId: document.querySelector(".pupil-id").value,
        timeTableSubjectId: cell.find("input[name=timeTableSubjectId]").val(),
        homeWorkLinks: homeWorkLinks
    };

    $.each(data, function (key, value) {
        if (Array.isArray(value)) {
            $.each(value, function (k, v) {
                request.append(key + '[' + k + ']', v);
            });
        } else {
            request.append(key, value);
        }
    });

    var unknownError = $('#footerUnknownErrorJs').text();
    var footerError = $('#footerError').text();

    $.ajax({
        url: url,
        type: "POST",
        data: request,
        cache: false,
        processData: false,
        contentType: false
    }).done(function (response) {
        if (response && response.OperationSucceeded) {
            var WWQQDataSuccessSave = $('#WWQQDataSuccessSave').text();
            message(WWQQDataSuccessSave);
        } else {
            var errorMessage = "";
            if (response.ErrorMessages) {
                errorMessage = response.ErrorMessages;
            } else {
                errorMessage = unknownError;
            }

            showPopupHTML(null,
                "<p>" + errorMessage + "</p>",
                {
                    name: footerError,
                    width: 500,
                    closeCallback: function() {
                        window.location.href = window.location.href;
                    }
                });
        }
    }).fail(function() {
        message(unknownError, "error");
    }).always(function() {
        $("#main-loading").slideUp();
    });
}

function BoxLessonType(element) {
    
    Box.apply(this, arguments);

    var self = this,
        boxShow = this.show,
        boxClose = this.close;

    var boxLessonType = document.querySelector('.box-lesson-type'),
        lessonTypeSaveButton = boxLessonType.querySelector('.lesson-type-save');

    var singleData = [
        ['lessonTypeTime', 'innerHTML'],
        ['lessonTypeRoom', 'innerHTML']
    ];

    this.show = function (button) {
        
        clearData();
        collectData(button);
        boxShow.call(this, button);
        lessonTypeSaveButton.onclick = function () {
            setData(button);
            if (typeof saveTypeLesson !== 'undefined') saveTypeLesson(button);
            self.close();
        };
    };

    this.close = function () {
        
        boxClose.call(this);
        //clearData();
    };

    function clearData() {
        var boxElement;
        for (var i = 0; i < singleData.length; i++) {
            boxElement = boxLessonType.querySelector('.' + singleData[i][0]);
            boxElement[singleData[i][1]] = '';
        }

    }

    function collectData(button) {
        var boxElement, tableElement;
        for (var i = 0; i < singleData.length; i++) {
            boxElement = boxLessonType.querySelector('.' + singleData[i][0]);
            tableElement = button.querySelector('[name=' + singleData[i][0] + ']');
            if (tableElement) boxElement[singleData[i][1]] = tableElement.value;
        }

        boxElement = boxLessonType.querySelectorAll('[name=lessonHighlight]');
        tableElement = button.querySelector('[name=lessonHighlight]');
        if (tableElement.value == "Default") {
            boxElement[1].checked = true;
        } else {
            boxElement[0].checked = true;
        }
        
        var lessonTypeDateFormatted = boxLessonType.querySelector('.lessonTypeDateFormatted');
        var dateFormatted = button.querySelector('[name=timeTableSubjectDay]');
        if (lessonTypeDateFormatted && dateFormatted && dateFormatted.value) {
            lessonTypeDateFormatted.innerHTML = dateFormatted.value;
        }
    }

    function setData(button) {
        var boxElement, tableElement;

        // set single data
        for (var i = 0; i < singleData.length; i++) {
            boxElement = boxLessonType.querySelector('.' + singleData[i][0]);
            tableElement = button.querySelector('[name=' + singleData[i][0] + ']');
            if (boxElement[singleData[i][1]]) {
                if (!tableElement) {
                    tableElement = document.createElement('input');
                    tableElement.setAttribute('type', 'hidden');
                    tableElement.setAttribute('name', singleData[i][0]);
                    button.appendChild(tableElement);
                }
                tableElement.value = boxElement[singleData[i][1]];
            } else if (tableElement) {
                button.removeChild(tableElement);
            }
        }

        boxElement = boxLessonType.querySelectorAll('[name=lessonHighlight]');
        tableElement = button.querySelector('[name=lessonHighlight]');
        if (boxElement[0].checked == true) {
            tableElement.value = "Thematic";
        } else if (boxElement[1].checked == true) {
            tableElement.value = "Default";
        }
    }
}

function BoxLessonInfo( element ) {
  Box.apply( this, arguments );

  var self = this,
    boxShow = this.show;

  this.show = function ( button ) {
    getData( button );
    boxShow.call( this, button );
  };

  function getData( button ) {
    var lessonTime = button.querySelector('[name=lessonTime]'),
      selectorSuffix = ['room', 'theme', 'hometask'],
      a = self._box.querySelectorAll('.Box-content a'),
      elementsToHide;

    elementsToHide = self._box.querySelectorAll(
      '.Box-content > div,' +
      '[class*="-link"],' +
      '[class*="-file"]'
    );
    for ( var i = 0; i < elementsToHide.length; i++ ) {
      elementsToHide[i].classList.add('hidden');
    }

    for ( i = 0; i < a.length; i++ ) {
      a[i].parentNode.removeChild( a[i] );
    }

    if ( lessonTime && lessonTime.value ) {
      self._box.querySelector('.lessonTime').innerHTML = lessonTime.value;
    } else {
      self._box.querySelector('.lessonTime').innerHTML = '-';
    }

    if ( button.querySelector('[name*=lesson-info-class]') ) getSpecificData( 'lesson-info-class' );
    if ( button.querySelector('[name*=lesson-info-group]') ) {
      for ( i = 1; i < 5; i++ ) {
        if ( button.querySelector('[name*=lesson-info-group' + i + ']') ) {
          getSpecificData( 'lesson-info-group' + i );
        }
      }
    }

    function getSpecificData( selector ) {
      var input, boxElement, book;

      self._box.querySelector( '.' + selector ).classList.remove('hidden');

      // get information
      for ( var i = 0; i < selectorSuffix.length; i++ ) {
        input = button.querySelector( '[name=' + selector + '-' + selectorSuffix[i] + ']' );
        boxElement = self._box.querySelector( '.' + selector + '-' + selectorSuffix[i] + ' span' );
        if ( input && input.value ) boxElement.innerHTML = input.value;
        else boxElement.innerHTML = '-';
      }

      // create book links
      if ( button.querySelector( '[name*="' + selector + '-theme-book"]' ) ) bookIcon('theme');
      if ( button.querySelector( '[name*="' + selector + '-hometask-book"]' ) ) bookIcon('hometask');


      // get links
      input = button.querySelectorAll( '[name="' + selector + '-link"]' );
      boxElement = self._box.querySelector( '.' + selector + '-link' );
      for ( i = 0; i < input.length; i++ ) {
        if ( !input[i].value ) continue;
        a = document.createElement('a');
        a.href = a.innerHTML = input[i].value;
        boxElement.appendChild( a );
        boxElement.classList.remove('hidden');
      }

      // get files
      input = button.querySelectorAll( '[name="' + selector + '-file"]' );
      boxElement = self._box.querySelector( '.' + selector + '-file' );
      for ( i = 0; i < input.length; i++ ) {
        if ( !input[i].value || !input[i].getAttribute('data-path') ) continue;
        a = document.createElement('a');
        a.href = input[i].getAttribute('data-path');
        a.innerHTML = input[i].value;
        boxElement.appendChild( a );
        boxElement.classList.remove('hidden');
      }

      function bookIcon( suffix ) {
        var bookIcon, title, id;

        bookIcon = document.createElement('i');
        bookIcon.classList.add('material-icons');
        bookIcon.innerHTML = '&#xE0E0;'; // import_contacts

        title = button.querySelector('[name=' + selector + '-' + suffix + '-book-title]');
        if ( !title || !title.value ) console.warn('The book has no Title');
        id = button.querySelector('[name=' + selector + '-' + suffix + '-book-id]');
        if ( !id || !id.value ) console.warn('The book has no ID');

        bookIcon.onclick = function () { // group/class = rel??
          var isDemo = document.querySelector('[name=bookDemo]');
          showPopup( this, 'popupBook', {
            demo: isDemo,
            bookId: id.value,
            bookTitle: title.value
          } );
        };

        boxElement = self._box.querySelector( '.' + selector + '-' + suffix );
        boxElement.appendChild( bookIcon );
      }
    }
  }
}

function BoxMarkInfo( element ) {
  Box.apply( this, arguments );

  var self = this,
    boxShow = this.show;

  this.show = function ( button ) {
    getData( button );
    boxShow.call( this, button );
  };

  function getData( button ) {
    var dataContainer, markCause,
      eventType = ['Set', 'Change', 'Remove'],
      eventOption = ['By', 'Date'],
      input;

    dataContainer = button.querySelector('[name=markCause]') ? button : button.parentNode;
    markCause = dataContainer.querySelector('[name=markCause]');

    self._box.querySelector('.markCause').innerHTML = markCause ? markCause.value : '';

    for ( var i = 0; i < eventType.length; i++ ) {
      self._box.querySelector( '.mark' + eventType[i] ).classList.add('hidden');
    }

    for ( i = 0; i < eventType.length; i++ ) {
      for ( var j = 0; j < eventOption.length; j++ ) {
        input = dataContainer.querySelector( '[name=mark' + eventType[i] + eventOption[j] + ']' );
        if ( !input ) continue;
        self._box.querySelector( '.mark' + eventType[i] ).classList.remove('hidden');
        self._box.querySelector( '.mark' + eventType[i] + eventOption[j] ).innerHTML = input.value;
      }
    }
  }
}

function BoxForecastedMarkInfo( element ) {
  Box.apply( this, arguments );

  var self = this,
    boxShow = this.show;

  this.show = function ( button ) {
    getData( button );
    boxShow.call( this, button );
  };

  function getData( button ) {
    var dataContainer,
      selectedForecastedMark,
      label = self._box.querySelector('.Box-content > label'),
      table = self._box.querySelector('table'),
      markTd, percentage;

    dataContainer = button.querySelector(".selectedForecastedMark") ? button : button.parentNode;
    selectedForecastedMark = dataContainer.querySelector(".selectedForecastedMark");

    if ( !label ) throw 'No label found';
    if ( !table ) throw 'No table found';

    if ( selectedForecastedMark ) {
      for ( var i = 0; i < table.rows.length; i++ ) {
        markTd = table.rows[i].cells[0];
        percentage = dataContainer.querySelector(".forecastedPercentage-" + ( 10 - i ) );
        markTd.innerHTML = 10 - i;
        if ( percentage ) table.rows[i].cells[1].innerHTML = percentage.value;
        if ( parseInt(selectedForecastedMark.value) === 10 - i ) table.rows[i].classList.add('design-01');
        else table.rows[i].classList.remove('design-01');
      }
      label.classList.add('hidden');
      table.classList.remove('hidden');
    } else {
      table.classList.add('hidden');
      label.classList.remove('hidden');
    }
  }
}

function BoxSubjectTeachers( element ) {
  Box.apply( this, arguments );

  var self = this,
    boxShow = this.show;

  this.show = function ( button ) {
    getData( button );
    boxShow.call( this, button );
  };

  function getData( button ) {
    var teacher = self._box.querySelectorAll('.subjectTeacher'),
      input = button.querySelectorAll('[name=subjectTeacher]');

    for ( var i = 0; i < teacher.length; i++ ) {
      self._box.removeChild( teacher[i] );
    }

    if ( input.length === 0 ) {
      self.close();
      throw 'Where are the teachers??';
    }

    for ( i = 0; i < input.length; i++ ) {
      teacher = document.createElement('div');
      teacher.classList.add('subjectTeacher');
      teacher.innerHTML = input[i].value;
      self._box.appendChild( teacher );
    }
  }
}

function BoxParentsMessage(element) {
    Box.apply(this, arguments);
    
    var self = this,
        boxShow = this.show,
        boxClose = this.close;

    var boxLesson = document.querySelector('.box-parents-message'),
        lessonSaveButton = boxLesson.querySelector('.parents-message-save');

    var boxMessageText = boxLesson.getElementsByClassName("boxDiaryMessageText")[0];
    var boxMessageId = boxLesson.getElementsByClassName("boxDiaryMessageId")[0];
    var boxMessageDate = boxLesson.getElementsByClassName("boxDiaryMessageDate")[0];
      
    this.show = function (button) {
        clearData();
        collectData(button);
        boxShow.call(this, button);
        lessonSaveButton.onclick = function () {
            setData(button);
            if (typeof saveParentsMessage !== 'undefined') saveParentsMessage(button);
            self.close();
            
        };
    };

    this.close = function () {
        boxClose.call(this);
        clearData();
    };

    function collectData(button) {
        
        boxMessageText.value = button.querySelector('[name=diaryMessageText]').value;
        boxMessageId.innerText = button.querySelector('[name=diaryMessageId]').value;
        boxMessageDate.innerText = button.querySelector('[name=diaryMessageDate]').value;
    }

    function setData(button) {
        button.querySelector('[name=diaryMessageText]').value = boxMessageText.value;
        button.querySelector('[name=diaryMessageId]').value = boxMessageId.innerText;
        button.querySelector('[name=diaryMessageDate]').value = boxMessageDate.innerText;
    }

    function clearData() {
        boxMessageText.innerText = '';
        boxMessageId.innerText = '';
        boxMessageDate.innerText = '';
    }
}

function saveParentsMessage(cell) {
    
    $("#main-loading").slideDown();
    var box = document.querySelector('.box-parents-message');
    var url = "/Staff/SaveParentsMessage/";

    var request = new FormData();

    var diaryMessageDate = box.getElementsByClassName('boxDiaryMessageDate')[0].innerText;
    var diaryMessageText = box.getElementsByClassName('boxDiaryMessageText')[0].value;
    var diaryMessageId = box.getElementsByClassName('boxDiaryMessageId')[0].innerText;
    
    var classId = $(".page-content").data("classid");
    var yearStart = $(".page-content").data("yearstart");

    var data = {
        diaryMessageDate: diaryMessageDate,
        diaryMessageText: diaryMessageText,
        diaryMessageId: diaryMessageId,
        classId: classId,
        yearStart: yearStart
    };

    $.each(data, function (key, value) {
        if (Array.isArray(value)) {
            $.each(value, function (k, v) {
                request.append(key + '[' + k + ']', v);
            });
        } else {
            request.append(key, value);
        }
    });
    var unknownError = $('#footerUnknownErrorJs').text();
    var footerError = $('#footerError').text();
    $.ajax({
        url: url,
        type: "POST",
        data: request,
        cache: false,
        processData: false,
        contentType: false
    }).done(function (response) {
        if (response && response.OperationSucceeded) {
            var WWQQDataSuccessSave = $('#WWQQDataSuccessSave').text();
            message(WWQQDataSuccessSave);
        } else {
            var errorMessage = "";
            if (response.ErrorMessages) {
                errorMessage = response.ErrorMessages;
            } else {
                errorMessage = unknownError;
            }

            showPopupHTML(null,
                "<p>" + errorMessage + "</p>",
                {
                    name: footerError,
                    width: 500,
                    closeCallback: function () {
                        window.location.href = window.location.href;
                    }
                });
        }
    }).fail(function () {
        showPopupHTML(null,
            "<p>" + unknownError + "</p>",
            {
                name: footerError,
                width: 500,
                closeCallback: function () {
                    window.location.href = window.location.href;
                }
            });
    }).always(function () {
        $("#main-loading").slideUp();
    });
};

function PayPassesBox(element) {
    Box.apply(this, arguments);

    var self = this,
        passBox = document.querySelector('.box-pay-passes-info'),
        rubField = passBox.querySelector('.rub-field'),
        kopField = passBox.querySelector('.kop-field'),
        skipBtn = passBox.querySelector('.pass-skip'),
        clearBtn = passBox.querySelector('.pass-clear'),
        resultField = passBox.querySelector('.pass-result'),
        closeBtn = passBox.querySelector('.pass-close'),
        submitBtn = passBox.querySelector('.submit-add-pass'),
        boxShow = this.show;

    submitBtn.onclick = function () {
        submitBtn.setAttribute('data-rub', rubField.value);
        submitBtn.setAttribute('data-kop', kopField.value);
        self.close();
    };

    skipBtn.onclick = function () {
        resultField.value = skipBtn.innerHTML;
        rubField.value = "";
        rubField.disabled = true;
        kopField.value = "";
        kopField.disabled = true;
    };

    clearBtn.onclick = function () {
        resultField.value = "";
        rubField.value = "";
        rubField.disabled = false;
        kopField.value = "";
        kopField.disabled = false;
    };

    rubField.onchange = kopField.onchange = rubField.onkeyup = kopField.onkeyup = function () {
        var rubAmount = rubField.value,
            kopAmount = kopField.value;

        if (rubAmount || kopAmount) {
            var rubAmountValue = parseInt(rubAmount);
            var kopAmountValue = parseInt(kopAmount);

            if ((!isNaN(rubAmountValue) && rubAmountValue > 0) || (!isNaN(kopAmountValue) && kopAmountValue > 0)) {
                if (isNaN(rubAmountValue)) {
                    rubAmountValue = 0;
                }
                if (isNaN(kopAmountValue)) {
                    kopAmountValue = 0;
                }
                var value = (rubAmountValue + kopAmountValue / 100).toFixed(2).replace(".", ",");
                resultField.value = value;
                return;
            }
        }
        resultField.value = "";
    };

    this.show = function (button) {
        getData(button);
        boxShow.call(this, button);
    };

    function getData(button) {
        submitBtn.setAttribute('data-id', button.id);

        resultField.value = "";
        rubField.value = "";
        rubField.disabled = false;
        kopField.value = "";
        kopField.disabled = false;

        var td = button.parentNode,
            rubAmount = td.querySelector('.rub-amount').value,
            kopAmount = td.querySelector('.kop-amount').value;

        rubField.value = rubAmount;
        kopField.value = kopAmount;
        
        var initValue = button.innerHTML.trim();

        if (initValue != "‧") {
            resultField.value = initValue;

            if (initValue == skipBtn.innerHTML) {
                rubField.value = "";
                rubField.disabled = true;
                kopField.value = "";
                kopField.disabled = true;
            }
        } else {
            rubField.value = "";
            kopField.value = "";
        }        
    };
}

function PayAbsencesBox(element) {
    Box.apply(this, arguments);

    var self = this,
        passBox = document.querySelector('.box-pay-absences-info'),
        skipBtn = passBox.querySelector('.absence-skip'),
        clearBtn = passBox.querySelector('.absence-clear'),
        resultField = passBox.querySelector('.absence-result'),
        closeBtn = passBox.querySelector('.absence-close'),
        submitBtn = passBox.querySelector('.submit-add-absence'),
        boxShow = this.show;

    submitBtn.onclick = function () {
        self.close();
    };

    skipBtn.onclick = function () {
        resultField.value = skipBtn.innerHTML;
    };

    clearBtn.onclick = function () {
        resultField.value = "";
    };    

    this.show = function (button) {
        getData(button);
        boxShow.call(this, button);
    };

    function getData(button) {
        submitBtn.setAttribute('data-id', button.id);

        resultField.value = "";
        var initValue = button.innerHTML.trim();

        if (initValue != "‧") {
            resultField.value = initValue;
        }
    };
}

function BehaviorBox(element) {
    Box.apply(this, arguments);

    var self = this,
        behaviorBox = document.querySelector('.box-behavior-info'),
        submitBtn = behaviorBox.querySelector('.submit-behavior'),
        boxShow = this.show;
   
    submitBtn.onclick = function () {
        var behaviorRadios = document.querySelectorAll('.behaviorRadio');
        if (behaviorRadios[0]) {
            for (var i = 0; i < behaviorRadios.length; i++) {
                if (behaviorRadios[i] && behaviorRadios[i].checked == true) {
                    submitBtn.setAttribute('data-behavior', behaviorRadios[i].value.trim());
                }
            }
        }
        
        self.close();
    };

    this.show = function (button, mode) {
        getData(button, mode);
        boxShow.call(this, button);
    };

    function getData(button, mode) {
        var initValue = button.innerHTML.trim();

        if (initValue) {
            var behaviorRadios = document.querySelectorAll('.behaviorRadio');
            if (behaviorRadios[0]) {
                for (var i = 0; i < behaviorRadios.length; i++) {
                    if (behaviorRadios[i] && behaviorRadios[i].value.trim() == initValue) {
                        behaviorRadios[i].checked = true;
                    } else {
                        behaviorRadios[i].checked = false;
                    }
                }
            }
        }

        submitBtn.setAttribute('data-behavior', "");

        var td = button.parentNode;
        var tr = td.parentNode;

        submitBtn.setAttribute('data-id', td.getAttribute('data-behaviorid'));
        submitBtn.setAttribute('data-pupil-id', tr.getAttribute('data-pupilid'));

        if (mode == 1) { // quarter
            submitBtn.setAttribute('data-quarter-id', td.getAttribute('data-quarterid'));
        } else {
            submitBtn.setAttribute('data-quarter-id', "");
        }
    };
}

// Journals interface 2 & 4 (manual input)
function journalCheckInput() {
  var isDemo, input;
  if ( !document.querySelector('.journal-4, .journal-2') ) return;

  isDemo = document.querySelector('.showDemo')
    || document.querySelector('.inactive-services .selected');

  input = document.querySelectorAll('input[name="MarkTitle"], input[name="markInterface4"]');

  for ( var i = 0; i < input.length; i++ ) {
    input[i].onfocus = function () {
      this.setAttribute('data-old-mark', this.value);
        highlighting(getParentByTag(this, 'table'), getParentByTag(this, 'td').cellIndex, getParentByTag(this, 'tr').rowIndex, true);
    };

      input[i].onblur = function () {
          highlighting(getParentByTag(this, 'table'), getParentByTag(this, 'td').cellIndex, getParentByTag(this, 'tr').rowIndex, false);
      };

      input[i].onchange = function () {
          checkInput(this);
      };

      function highlighting(table, col, row, status) {
          if (status === true) {
              table.rows[row].cells[col].parentNode.style.backgroundColor = "#f6f6f6";
          }
          else {
              table.rows[row].cells[col].parentNode.style.backgroundColor = null;
          }
          row = 4;
          while (true) {
              try {
                  var cell = table.rows[row].cells[col];

                  if (cell.tagName !== "TH") {
                      if (status === true) {
                          cell.style.backgroundColor = "#f6f6f6";
                      }
                      else {
                          cell.style.backgroundColor = null;
                      }
                      row++;
                  }
                  else {
                      break;
                  }
              } catch (e) {
                  break;
              }
          }
      }

    input[i].onkeydown = function (e) {
      var table, thisTr, thisTd, nextTr, input;

      if ( e.key === 'Enter' ) this.blur();

      if ( e.key === 'Tab' || e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
        table = getParentByTag(this, 'table');
        thisTr = getParentByTag(this, 'tr');
        thisTd = getParentByTag(this, 'td');

        if (e.key === 'ArrowUp' || e.key === 'ArrowDown' || e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
            input = findNextCell(thisTr.rowIndex, thisTd.cellIndex, e.key);
        } else {
            input = findNextTd(thisTr, this.parentNode);
        }

          try {
              input.focus();
          } catch (e) {
              return false;
          }

        return false;
      }
      function findNextTd( tr, td ) {
        if ( tr.sectionRowIndex < table.tBodies[0].rows.length - 1 ) {
          nextTr = table.tBodies[0].rows[tr.sectionRowIndex + 1];
        } else {
          nextTr = table.tBodies[0].rows[0];
        }
        input = nextTr.cells[td.cellIndex].querySelector('input:not([type=hidden])');

        return input ? input : findNextTd( nextTr, td );
      }

      function findNextCell( row, col, key) {
          // Check pressed button
          if (key === 'ArrowUp') {
              row < 0 ? 0 : row--;
          } else if (key === 'ArrowDown') {
              row < 0 ? 0 : row++;
          }
          else if (key === 'ArrowLeft') {
              col < 0 ? 0 : col--;
          }
          else if (key === 'ArrowRight') {
              col < 0 ? 0 : col++;
          }

          try {
              return table.rows[row].cells[col].querySelector('input:not([type=hidden])');
          } catch (e) {
              return null;
          }
      }
    };
  }
    function checkInput(input) {
        
    var passWord = getLocalization( 'YYCredit', 'pass'),
      failWord = getLocalization( 'YYNonRegistration', 'fail'),
      respReason = getLocalization( 'YYResrespectfulReasonAbbreviature', 'truancy' ),
      disrReason = getLocalization( 'YYDisrespectfulReasonAbbreviature', 'illness' ),
      freeLesson = getLocalization( 'FreeForLessonShort', 'осв' );

    closeAllMessages();
    if ( input.value === input.getAttribute('data-old-mark') ) return true;

    if ( !input.value ) {
      input.setAttribute('value','');
      if ( document.querySelector('.journal-4') ) {
        if ( typeof saveMark !== 'undefined' ) saveMark( input.parentNode ); // for Valera
        if ( isDemo ) {
          input.classList.add('changed-now');
          message( getLocalization( 'YYQQMarkBoxMarkDeleted', 'The mark has been deleted') );
        }
      }
      return true;
    }

    input.value = input.value.toLowerCase();

      /*
       if ( input.value.match(/^з/g) ) input.value = passWord;
       if ( input.value.match(/^н[езачет]/g) ) input.value = failWord;
       */

    if (
      input.value.length === 1 && input.value.match(/\d/g)
      || input.value.length === 2 && input.value.match(/10/g)
      || input.value.length === 3 && input.value.match(/\d\/\d/g)
      || input.value.length === 4 && input.value.match(/10\/\d|\d\/10/g)
      || input.value.length === 5 && input.value.match(/10\/10/g)
      || input.value === passWord
      || input.value === failWord
      || input.value === respReason
      || input.value === disrReason
      || input.value === freeLesson
    ) {
      input.setAttribute( 'value', input.value );
      if ( document.querySelector('.journal-4') ) {
        if ( typeof saveMark !== 'undefined' ) saveMark( input.parentNode ); // for Valera
        if ( isDemo ) {
          input.classList.add('changed-now');
          message( getLocalization( 'YYWWMarkSuccessSave', 'The mark has been saved') );
        }
      }
      return true;
    }

    message( getLocalization( 'RRYouEnter', 'You have entered' ) + ': <b>'
      + input.value
      + '</b><br><br>'
      + getLocalization( 'RRValidValues', 'Allowed values' )
      + ': <br><i>0-10, 0-10/0-10, '
      + passWord + ', ' + failWord + ', ' + respReason + ', ' + disrReason
      + '</i><br><br>'
      + getLocalization( 'YYMark', 'The mark' )
      + ' <b>' + input.getAttribute('data-old-mark') + '</b> '
      + getLocalization( 'YYRRWasRecuperation', 'has been restored' ),
      'error', input);
    input.value = input.getAttribute('data-old-mark');
    return false;
  }
}

// Tables
function sortRows2() {
  var sortCell= document.querySelectorAll('.sortRows th, .sortRows td');
  if ( !sortCell[0] ) return;

  for ( var i = 0; i < sortCell.length; i++ ) {
    if ( !sortCell[i].children.length ) continue; // if here are no icons
    sortCell[i].onclick = sort2;
  }

  function sort2() {
    var table = this.parentNode.parentNode.parentNode,
      tbody = table.tBodies[0],
      row,
      cells, element,
      up = this.classList.contains('sortRowsDown'),
      digits = [], letters = [], empties = [],
      value,
      contConnected, tbodyConnected, rowConnected;

    for ( var i = 0; i < tbody.rows.length; i++ ) {
      tbody.rows[i].setAttribute( 'data-order', '' + i );

      element = tbody.rows[i].cells[this.cellIndex];
      element = element.querySelector('input:not([type=hidden])')
        || element.querySelector('span')
        || element.querySelector('a')
        || element;
      value = element.value || element.innerHTML;

      if ( value === '' || value === '-' || value.indexOf('‧') > -1 ) {
        empties.push( [i] );
      } else if ( value.search(/[^\d., -]/g) > -1 ) {
        letters.push( [ i, value ] );
      } else {
        digits.push( [ i, value ] );
      }
    }

    if ( empties.length === tbody.rows.length ) return;

    if ( isConnected( table.parentNode ) ) {
      contConnected = isConnected( table.parentNode.nextElementSibling )
        || isConnected( table.parentNode.previousElementSibling );
      if ( contConnected ) tbodyConnected = contConnected.querySelector('tbody');
    }

    digits.sort(function ( a, b ) {
      var x = parsed( a[1] ) - parsed( b[1] );
      return up ? x : -x;
      function parsed( value ) {
        return parseFloat( value.replace(',','.').replace(' ','') );
      }
    });
    letters.sort(function ( a, b ) {
      var x = a[1].localeCompare( b[1] );
      return up ? x : -x;
    });
    cells = empties.concat( letters, digits );

    for ( var j = cells.length - 1; j >= 0; j-- ) {
      row = tbody.querySelector('[data-order="' + cells[j][0] + '"]');
      if ( contConnected ) {
        rowConnected = tbodyConnected.rows[ row.sectionRowIndex ];
        tbodyConnected.appendChild( rowConnected );
      }
      tbody.appendChild( row );
    }

    clearIcons( table );
    if ( contConnected ) clearIcons( contConnected );

    if ( up ) this.classList.add('sortRowsUp');
    else this.classList.add('sortRowsDown');
  }

  function isConnected( element ) {
    if ( element && element.classList.contains('table-connected') ) return element;
    return false;
  }
  function clearIcons( container ) {
    var sortCells = container.querySelectorAll('.sortRows th, .sortRows td');
    for ( var i = 0; i < sortCells.length; i++ ) {
      sortCells[i].classList.remove('sortRowsUp');
      sortCells[i].classList.remove('sortRowsDown');
    }
  }
}

function connectedTables() {
    /*
     Only 2 connected tables in a container are supported.
     Nested containers aren't supported.
     The TR heights are matched only in 1st TBODY.
     Example:
     <div>
     <div class="table-connected"><table ... ></div>
     <div class="table-connected"><table ... ></div>
     </div>
     <div>
     <div class="table-connected"><table ... ></div>
     <div class="table-connected"><table ... ></div>
     </div>
     */
  var container = document.querySelectorAll('.table-connected');
  if ( container.length < 2 ) return;
  for ( var i = 0; i < container.length; i++ ) {
    container[i].parentNode.classList.add('tableConnectedContainer');
  }
  container = document.querySelectorAll('.tableConnectedContainer');

  helloTables();
  window.addEventListener( 'resize', helloTables );

  function helloTables() {
    for ( var i = 0; i < container.length; i++ ) {
      matchTablesWidths( container[i] );
      matchTrHeights( container[i] );
    }
  }
  function matchTablesWidths( container ) {
    var box = container.querySelectorAll('.table-connected');
    var table = container.querySelector('.titles-table');
    var size;
    if (!table) return;

    if (table.clientWidth > box[0].clientWidth) {
      size = table.clientWidth * 100 / container.clientWidth;
      size = Math.ceil(size);
      box[0].style.width = size + '%';
      box[1].style.width = 100 - size + '%';
    }
  }
  function matchTrHeights( container ) {
    var table = container.querySelectorAll('.table-connected table'),
      tr0, tr1, d, length;
    if ( table.length < 2 ) return;

    tr0 = table[0].tBodies[0].rows;
    tr1 = table[1].tBodies[0].rows;
    length = Math.min( tr0.length, tr1.length );

    for ( var i = 0; i < length; i++ ) {
      d = tr0[i].offsetHeight - tr1[i].offsetHeight;

      if ( !d ) continue; // the rows have the same height

      if ( tr0[i].hasAttribute('style') ) tr0[i].style.height = '';
      if ( tr1[i].hasAttribute('style') ) tr1[i].style.height = '';

      if ( d > 0 ) tr1[i].style.height = tr0[i].offsetHeight + 'px';
      else tr0[i].style.height = tr1[i].offsetHeight + 'px';
    }
  }
}

function highlightColumnsAndRows() {
  var table = document.querySelectorAll('.table-vertical-selection table, .table-connected table'),
    cell;
  if ( !table.length ) return;

  cell = document.querySelectorAll('.table-vertical-selection td, ' +
    '.table-vertical-selection th, ' +
    '.table-connected td, ' +
    '.table-connected th');

  for ( var j = 0; j < table.length; j++ ) {
    createHl( j, 'hlVert');
    createHl( j, 'hlHoriz');
    table[j].onmouseleave = clearHl;
  }

  for ( var i = 0; i < cell.length; i++ ) {
    cell[i].onmouseenter = moveHl;
  }

  function createHl( j, name ) {
    var hl = table[j].querySelector( '.' + name );
    if ( hl ) return;
    hl = document.createElement('div');
    hl.classList.add( name );
    table[j].parentNode.insertBefore( hl, table[j] );
  }

  function moveHl( event ) {
    var cell = event.target,
      row = cell.parentNode,
      table = row.parentNode.parentNode,
      container = table.parentNode,
      hlHoriz = container.querySelector('.hlHoriz'),
      hlVert = container.querySelector('.hlVert'),
      sib;

    moveHlHoriz( container, row );

    hlVert.removeAttribute('style');
    hlVert.style.top = table.offsetTop + 'px';
    hlVert.style.left = cell.offsetLeft + 'px';
    hlVert.style.height = table.offsetHeight + 'px';
    hlVert.style.width = cell.offsetWidth + 'px';

    sib = findSibling( container );
    if ( sib ) moveHlHoriz( sib, row );
  }

  function moveHlHoriz( container, row ) {
    var table = container.querySelector('table'),
      section,
      hlHoriz = container.querySelector('.hlHoriz');

    if ( row.parentNode.tagName === 'TBODY' ) section = table.tBodies[0];
    else if ( row.parentNode.tagName === 'THEAD' ) section = table.tHead;
    else section = table.tFoot;

    row = section.rows[row.sectionRowIndex];

    if ( !row ) { // for siblings
      clearHl( false, container, true );
      return;
    }

    hlHoriz.removeAttribute('style');
    hlHoriz.style.left = table.offsetLeft + 'px';
    hlHoriz.style.width = table.offsetWidth + 'px';
    hlHoriz.style.top = row.offsetTop + 'px';
    hlHoriz.style.height = row.offsetHeight + 'px';
  }

  function clearHl( event, container, doNotFindSibling ) {
    var hlVert, hlHoriz, sib;
    if ( event ) container = event.target.parentNode;
    hlVert = container.querySelector('.hlVert');
    hlHoriz = container.querySelector('.hlHoriz');
    hlVert.removeAttribute('style');
    hlHoriz.removeAttribute('style');
    if ( !!doNotFindSibling ) return;
    sib = findSibling( container );
    if ( sib ) clearHl( false, sib, true );
  }

  function findSibling( container ) {
    var sib;
    if ( !container.classList.contains('table-connected') ) return false;
    sib = container.previousElementSibling;
    if ( sib && sib.classList.contains('table-connected') ) return sib;
    sib = container.nextElementSibling;
    if ( sib && sib.classList.contains('table-connected') ) return sib;
    return false;
  }
}

function rowspanAll() {
  // support of rowspan="all" (to span rows from this to the end)
  var tdRowspan = document.querySelectorAll('[rowspan="all"]');
  var container;
  var rowsCount;
  var rowNumber;
  for (var i = 0; i < tdRowspan.length; i++) {
    if (tdRowspan[i].parentNode.parentNode === container) continue;
    container = tdRowspan[i].parentNode.parentNode;
    rowsCount = container.rows.length;
    rowNumber = tdRowspan[i].parentNode.sectionRowIndex;
    tdRowspan[i].rowSpan = rowsCount - rowNumber + 1;
  }
}

// reports
function rowSpanHovering() {
  var tdRowSpan, tr;

  tdRowSpan = document.querySelectorAll('.table-vertical-selection [rowspan]');

  if ( tdRowSpan[0] ) {
    for ( var i = 0; i < tdRowSpan.length; i++ ) {
      tr = tdRowSpan[i].parentNode;
      for ( var j = 0; j < tdRowSpan[i].rowSpan; j++ ) {
        if ( j !== 0 ) tr = tr.nextElementSibling;
        tr.i = i;
        tr.addEventListener( 'mouseover', function () {
          tdRowSpan[ this.i ].classList.add('rowSpanHovered');
        });
        tr.addEventListener( 'mouseout', function () {
          tdRowSpan[ this.i ].classList.remove('rowSpanHovered');
        });
      }
    }
  }
}

// diary
function evenDiaryTables() {
  var table = document.querySelectorAll('.diary-day table');
  if ( table.length >= 2 ) {
    for ( var i = 0; i < table.length - 1; i += 2 ) {
      if ( table[i].clientHeight > table[i+1].clientHeight ) {
        evenTables( i, i+1 );
      } else {
        evenTables( i+1, i );
      }
    }
  }
  function evenTables( big, small ) {
    setTimeout(function () { // get time to CSS to render
      table[small].style.height = table[big].clientHeight + 'px';
    },100);
  }
}

function showDiaryNotes() {
  // JS generates all the marks and icons; in HTML must be only <input>'s
  var themeTr,
      markTr,
      allNotes = document.querySelectorAll('.diary-note'),
      themeNote = document.querySelector('.diary-note-theme'),
      markNote = document.querySelector('.diary-note-mark'),
      linksNote = document.querySelector('.diary-note-links'),
      messageNote = document.querySelector('.diary-note-message'),
      lastPageMarkNote = document.querySelector('.diary-note-lastpage-mark'),
      boxFinishedHomeWork = document.querySelector(".box-finished-home-work");

  closeAll(); // Close all notes when a new week is loaded

  if (document.querySelector('.book-term-id') ) bookControl();
  if (document.querySelector('.diary-theme input') ) themeControl();
  if (document.querySelector('.diary-mark input') ) markControl();
  if (document.querySelector('.diary-task input')) linksControl();
  if (document.querySelector('[name="messageToParent"]')) messageControl();
  if (document.querySelector('.diary-lastpage-mark input')) lastPageMarkControl();

  function themeControl() {
    var themeInput = document.querySelectorAll('.diary-theme [name="themeTitle"]'),
      button;

    themeNote.querySelector('.close').onclick = function () { close(themeNote); };

    for ( var i = 0; i < themeInput.length; i++ ) {
      if ( !themeInput[i].value ) continue;
      button = document.createElement('i');
      button.classList.add('material-icons');
      button.innerHTML = 'assignment';
      button.onclick = function () {
        var input = this.parentNode.querySelector('[name="themeTitle"]'),
          noteDiv = themeNote.querySelector('.themeTitle'),
          a;
        noteDiv.innerHTML = input.value;
        if ( input.hasAttribute('data-paid-txt') ) {
          a = document.createElement('a');
          a.href = input.getAttribute('data-paid-url');
          a.innerHTML = input.getAttribute('data-paid-txt');
          noteDiv.appendChild( a );
        }
        themeTr = this.parentNode.parentNode;
        close( linksNote );
        close( messageNote );
        close(boxFinishedHomeWork);
        calculatePosition( this.parentNode, themeNote );
      };
      themeInput[i].parentNode.appendChild( button );
    }
  }
  function markControl() {
      
    var markCell = document.querySelectorAll('.diary-mark'),
      markValue, markChangeBy, markRemoveBy,
      markData = [
        'markCause',
        'markSetBy',
        'markSetDate',
        'markChangeBy',
        'markChangeDate',
        'markRemoveBy',
        'markRemoveDate'
      ],
      span;

    markNote.querySelector('.close').onclick = function () { close(markNote); };

    for ( var i = 0; i < markCell.length; i++ ) {
      if ( !markCell[i].querySelector('input') ) continue;

      markValue = markCell[i].querySelector('[name=markValue]');
      markChangeBy = markCell[i].querySelector('[name=markChangeBy]');
      markRemoveBy = markCell[i].querySelector('[name=markRemoveBy]');

      span = document.createElement('span');
      if ( markRemoveBy && markRemoveBy.value ) {
        markCell[i].classList.add('diary-mark-removed');
        span.innerHTML = '&#x2715;';
      } else {
        span.innerHTML = markValue.value;
        if ( markChangeBy && markChangeBy.value ) markCell[i].classList.add('diary-mark-changed');
      }
      span.onclick = function () {
        var input;
        markNote.querySelector('.markChange').classList.add('hidden');
        markNote.querySelector('.markRemove').classList.add('hidden');
        for ( var i = 0; i < markData.length; i++ ) {
          input = this.parentNode.querySelector('[name=' + markData[i] + ']');
          if ( !input || !input.value ) continue;
          markNote.querySelector( '.' + markData[i] ).innerHTML = input.value;
          if ( i === 3 ) markNote.querySelector('.markChange').classList.remove('hidden');
          if ( i === 5 ) markNote.querySelector('.markRemove').classList.remove('hidden');
        }
        close( linksNote );
        close( messageNote );
        close(boxFinishedHomeWork);
        markTr = this.parentNode.parentNode;
        calculatePosition( this.parentNode, markNote );
      };

      markCell[i].appendChild( span );
    }
  }

  function lastPageMarkControl() {
      var quarterMarkCell = document.querySelectorAll('.diary-lastpage-mark'),
            button;

        lastPageMarkNote.querySelector('.close').onclick = function () { close(lastPageMarkNote); };

        for (var i = 0; i < quarterMarkCell.length; i++) {
            if (!quarterMarkCell[i].querySelector('[name="messageText"]')) continue;
            button = document.createElement('i');
            button.classList.add('material-icons');
            button.innerHTML = 'info';
            button.onclick = function() {
                
                var input = this.parentNode.querySelector('[name="messageText"]'),
                    noteDiv = lastPageMarkNote.querySelector('.messageText');
                noteDiv.innerHTML = input.value;
                calculatePosition(this.parentNode, lastPageMarkNote);
            };
            quarterMarkCell[i].appendChild(button);
        }
  }

  function linksControl() {
      
    var homeTaskCell = document.querySelectorAll('.diary-task'),
      button;

    linksNote.querySelector('.close').onclick = function () { close(linksNote); };

    for ( var i = 0; i < homeTaskCell.length; i++ ) {
        if (!homeTaskCell[i].querySelector('[name="lessonLink"],[name="lessonFile"],[name="lessonFileIsNotPremium"]')) continue;
            button = document.createElement('i');
            button.classList.add('material-icons');
            button.innerHTML = 'attachment';
            button.onclick = linksNoteControl;
            homeTaskCell[i].appendChild( button );
    }

    function linksNoteControl() {
        
      var linkInput = this.parentNode.querySelectorAll('[name="lessonLink"]'),
        fileInput = this.parentNode.querySelectorAll('[name="lessonFile"]'),
        fileInputIsNotPremium = this.parentNode.querySelectorAll('[name="lessonFileIsNotPremium"]'),
        container = linksNote.querySelector('.scroll-wrap'),
        sectionName = linksNote.querySelectorAll('strong'),
        sectionNameFileNotPremium = linksNote.querySelectorAll('div.lessonFileIsNotPremium'),
        a = linksNote.querySelectorAll('a'),
        i = linksNote.querySelectorAll('i'),
        href;

      closeAll( linksNote );
      close(boxFinishedHomeWork);

      for ( var k = 0; k < a.length; k++ ) {
        a[k].parentNode.removeChild( a[k] );
      }

      for (var k = 0; k < i.length; k++) {
          i[k].parentNode.removeChild(i[k]);
      }

      if ( linkInput.length === 0 ) sectionName[0].classList.add('hidden');
      else sectionName[0].classList.remove('hidden');

      if ( fileInput.length === 0 ) sectionName[1].classList.add('hidden');
      else sectionName[1].classList.remove('hidden');
      
      if (fileInputIsNotPremium.length === 0) sectionNameFileNotPremium[0].classList.add('hidden');
      else sectionNameFileNotPremium[0].classList.remove('hidden');

      
      for ( k = 0; k < linkInput.length; k++ ) {
        href = linkInput[k].value;
        if ( !href ) continue;

        a = document.createElement('a');
        a.innerHTML = href;
        a.href = href.match(/https?:\/\//) ? href : 'http://' + href;
        container.insertBefore(a, sectionName[1]);
      }

      for ( k = 0; k < fileInput.length; k++ ) {
        href = fileInput[k].getAttribute('data-path');
        if ( !href || !fileInput[k].value ) continue;
        a = document.createElement('a');
        a.innerHTML = fileInput[k].value;
        a.href = href.match(/https?:\/\//) ? href : 'http://' + href;
        container.appendChild(a);
      }
      
      for (k = 0; k < fileInputIsNotPremium.length; k++) {
        href = fileInputIsNotPremium[k].getAttribute('data-paid-url');
        if (!href) continue;
        a = document.createElement('a');
        i = document.createElement('i');
        i.innerHTML = fileInputIsNotPremium[k].value;
        container.appendChild(i);
        a.innerHTML = fileInputIsNotPremium[k].getAttribute('data-paid-txt');
        a.href = fileInputIsNotPremium[k].getAttribute('data-paid-url');
        container.appendChild(a);
      }
      
      calculatePosition( this.parentNode, linksNote );
    }
  }

  function messageControl() {
    var homeTaskCell = document.querySelectorAll('.diary-task'),
      input,
      button;

    messageNote.querySelector('.close').onclick = function () {
      close(messageNote);
    };

    for ( var i = 0; i < homeTaskCell.length; i++ ) {
      input = homeTaskCell[i].querySelector('[name="messageToParent"]');
      if ( !input || !input.value ) continue;
      button = document.createElement('i');
      button.classList.add('material-icons');
      button.innerHTML = 'feedback';
      button.onclick = msgNoteControl;
      homeTaskCell[i].appendChild( button );
    }

    function msgNoteControl() {
      var input = this.parentNode.querySelector('[name="messageToParent"]'),
        container = messageNote.querySelector('.scroll-wrap span');

      closeAll( messageNote );
      container.innerHTML = input.value;
      calculatePosition( this.parentNode, messageNote );
    }
  }
  function bookControl() {
    var input = document.querySelectorAll('.book-term-id'),
      button;
    for ( var i = 0; i < input.length; i++ ) {
      button = document.createElement('i');
      button.classList.add('material-icons');
      button.innerHTML = '&#xE0E0;'; // import_contacts
      button.onclick = function () {
        var isDemo = document.querySelector('[name=bookDemo]');
        showPopup( this.parentNode, 'popupBook', {demo: isDemo} );
      };
      input[i].parentNode.appendChild( button );
    }
  }
  function calculatePosition(cell, note) {
    var x, y;
    clearDirection();
    note.classList.remove('hidden');

    x = cell.getBoundingClientRect().left
      + cell.getBoundingClientRect().width / 2
      - note.parentNode.getBoundingClientRect().left;
    y = cell.getBoundingClientRect().top
      - note.parentNode.getBoundingClientRect().top;

    note.style.left = Math.ceil( x - note.clientWidth/2 ) + 'px'; // Math.ceil for the stupid Chrome
    note.style.top = Math.ceil( y - note.clientHeight ) + 'px';

    note.i = cell.i; // watch number of a <tr> the note called from
    checkOtherNotes( note );

    note.classList.add('visible');
  }
  function checkOtherNotes(note) {
      var anotherNote = getAnotherNote(note);
      if (anotherNote === undefined) {
          return;
      }
      if (anotherNote.classList.contains('visible')) {
          if (markTr !== themeTr) { // different <tr>
              close(anotherNote);
          } else { // the same <tr>
              if (note.classList.contains('diary-note-theme')) {
                  note.classList.add('toLeft');
                  anotherNote.classList.add('toRight');
              } else {
                  note.classList.add('toRight');
                  anotherNote.classList.add('toLeft');
              }
          }
      }
    setTimeout(function () {
      if ( anotherNote.getBoundingClientRect().right > window.innerWidth - 30 ) {
        close( anotherNote );
        return checkOtherNotes( note );
      }
      if ( note.getBoundingClientRect().right > window.innerWidth - 30 ) {
        close( anotherNote );
        note.classList.remove('toRight');
        note.classList.add('toLeft');
      }
    }, 300);
  }
  function closeAll( exception ) {
    for ( var i = 0; i < allNotes.length; i++ ) {
      if ( allNotes[i] && allNotes[i] !== exception ) close( allNotes[i] );
    }
  }
  function close( note ) {
    if ( !note ) return;
    note.classList.remove('visible');
    setTimeout(function () {
      note.classList.add('hidden');
      note.removeAttribute('style');
    }, 300);
    clearDirection();
  }
  function clearDirection() {
    for ( var i = 0; i < allNotes.length; i++ ) {
      allNotes[i].classList.remove('toLeft');
      allNotes[i].classList.remove('toRight');
    }
  }
  function getAnotherNote(note) {
    if ( allNotes[0] === note ) return allNotes[1];
    return allNotes[0];
  }
}

function copyToBuffer( element, selector ) {
    /* Example 1:
     <div onclick="copyToBuffer(this)">Hello baby!</div>
     Example 2:
     <div onclick="copyToBuffer(this)">Text: <span class="textToCopy">Hello baby!</span></div>
     Example 3:
     <div onclick="copyToBuffer(this, '.custom_selector')">Text: <span class="custom_selector">Hello baby!</span></div>
     */
  var textarea = document.createElement('textarea'),
    keyPreview = document.querySelector('.key-preview');

  if ( !selector ) selector = '.textToCopy';
  element = element.querySelector( selector ) || element;

  textarea.value = element.innerHTML;
  textarea.style.position = 'absolute'; // 'display:none' doesn't work...
  textarea.style.left = '-1000px';
  document.body.appendChild( textarea );
  textarea.select();
  document.execCommand('copy');

  message(
    getLocalization( 'RRKey', 'The key' )
    + ' <b>' + element.innerHTML + '</b> '
    + getLocalization( 'YYRRCopyIntoBuffer', 'has been copied to the buffer' )
  );

  document.body.removeChild( textarea );

  if ( keyPreview ) preview();
  function preview() {
    var span, b, classId;
    span = keyPreview.querySelector('span');
    if ( !span ) {
      span = document.createElement('span');
      keyPreview.appendChild( span );
    }
    b = keyPreview.querySelector('b');
    if ( !b ) {
      b = document.createElement('b');
      keyPreview.appendChild( b );
    }
    if ( element.tagName === 'TD' ) {
      classId = 'Ключ 2 (класс ' + element.parentNode.cells[0].innerHTML + '): ';
      span.innerHTML = getLocalization( 'YYRRKey2', classId );
    } else {
      span.innerHTML = getLocalization( 'YYRRKey1', 'Ключ 1 (школьный): ' );
    }
    b.innerHTML = element.innerHTML;
  }
}

var maximizeContent = (function () {
  var fullScreenFlag = false;
  return function ( element ) {
    var pageContent = document.querySelector('.page-content');
    if ( !fullScreenFlag ) {
      goScroll();
      pageContent.classList.add('fullWidth');
      //header.closeLocalMenu();
      element.innerHTML = getLocalization( 'YYRRCollapse', 'Compact view' );
    } else {
      window.scrollTo( 0, 0 );
      pageContent.classList.remove('fullWidth');
      //header.openLocalMenu({block: "start", behavior: "smooth"});
      element.innerHTML = getLocalization( 'YYFullScreen', 'Full screen' );
    }
    closeAllBoxes();
    connectedTables();
    fullScreenFlag = !fullScreenFlag;

    function goScroll() {
      var localMenuHandle = document.body.querySelector('.local-menu-handle'),
        scrollTop = document.body.scrollTop || document.documentElement.scrollTop,
        headerHeight;

      if ( localMenuHandle ) {
        headerHeight = localMenuHandle.getBoundingClientRect().bottom;
      } else {
        headerHeight = document.body.querySelector('header').clientHeight;
      }

      window.scrollTo( 0, Math.round(
        element.parentNode.getBoundingClientRect().top
        - headerHeight
        + scrollTop
      ) );
    }
  };
})();

function printContent( selector ) {
  var iframe = document.querySelector('.print-iframe');
  // it isn't possible to create iframe here because of FF security policy; iframe must be in HTML

  iframe.contentDocument.head.innerHTML = '<link href="/css/print-report.css" rel="stylesheet" type="text/css">';
  iframe.contentDocument.body.innerHTML = document.querySelector( selector ).innerHTML;

  setTimeout(function () { // give some time to load print.css
    iframe.contentWindow.focus(); // for IE
    iframe.contentWindow.print();
  },300);
}

// black and white or color marks in journals
function blackAndWhite() {
    var pageContent = document.querySelector('.page-content');
    if (pageContent) {
        const switcher = pageContent.querySelector(".bw-switcher");
        var input;
        if (switcher) {
            input = switcher.querySelector("input");
            if (!input)
                throw 'The block <input type="hidden" name="BlackAndWhite" value="false"> is not found. It must be inside the button!';

            if (input.value === "true") pageContent.classList.add("black-and-white");
            else pageContent.classList.remove("black-and-white");

            switcher.onclick = function () {
                pageContent.classList.toggle("black-and-white");
                input.value = input.value === "true" ? "false" : "true";
            };
        }
    }  
}


function customTitles( element, text ) {
  // container parameter is optional, it uses for new created elements
  // text parameter is optional
  var customTitle, titleText;

  customTitle = document.querySelectorAll('.custom-title'); // prevent not disappearing after contemt updates
  if ( customTitle[0] ) {
    for ( var i = 0; i < customTitle.length; i++ ) {
      document.body.removeChild( customTitle[i] );
    }
  }

  if ( !element ) { // scan all the document
    element = document.querySelectorAll('[popover-title]');
    if ( element[0] ) {
      for ( i = 0; i < element.length; i++ ) {
        if ( element[i].title ) addEvents( element[i] );
      }
    }
  } else {
    addEvents( element );
  }

  function addEvents( element ) {
    element.onmouseover = createCustomTitle;
    element.onmouseout = destroyCustomTitle;
    element.onmouseup = destroyCustomTitle; // for 'close' buttons
  }

  function createCustomTitle(e) {
    var placeX, placeY;

    titleText = this.title;
    this.removeAttribute('popover-title');

    customTitle = document.createElement('div');
    customTitle.innerHTML = text ? text : titleText;
    customTitle.classList.add('custom-title');
    // insertBefore instead appendChild to prevent blurring on header hovering
    document.body.insertBefore( customTitle, document.querySelector('header') );


    placeY = this.getBoundingClientRect().top;
    placeX = this.getBoundingClientRect().left + this.clientWidth / 2;
    if ( Math.abs( placeX - e.clientX ) > 100 ) placeX = e.clientX; // prevent too far appearance

    // customTitle must appear before calculate is it fall outside the window
    customTitle.style.top = placeY - customTitle.clientHeight + 'px';
    if ( customTitle.getBoundingClientRect().top < 0 ) {
      customTitle.classList.add('atSide');
      customTitle.style.top = placeY
        + this.clientHeight / 2
        - customTitle.clientHeight / 2
        + 'px';
      placeX = this.getBoundingClientRect().right;
    }

    customTitle.style.left = placeX + 'px';
    if ( customTitle.getBoundingClientRect().right > window.innerWidth - 10 ) {
      customTitle.classList.add('toLeft');
      if ( customTitle.classList.contains('atSide') ) {
        placeX = this.getBoundingClientRect().left - customTitle.clientWidth;
      } else {
        placeX -= customTitle.clientWidth;
      }
      customTitle.style.left = placeX + 'px';
    }

    setTimeout(function () {
      customTitle.classList.add('visible'); // to use css transition
    }, 500);
  }
  function destroyCustomTitle() {
    if ( document.querySelector('.custom-title') ) { // prevent double triggering
      this.title = titleText;
      document.body.removeChild( customTitle );
    }
  }
}

function rangeControl() {
  var range = document.querySelectorAll('input[type=range]');
  if ( !range.length ) return;
  for ( var i = 0; i < range.length; i++ ) {
    if ( range[i].classList.contains('range-styled') ) new RangeStyled( range[i] );
    else if ( range[i].classList.contains('range-hinted') ) new RangeHinted( range[i] );
    else new RangeOutput( range[i] );
  }
}
function RangeStyled( element ) {
  var max, min, step, startX, startY, posMax, pos, newPos, value, l, n,
    p = element.parentNode,
    s = element.nextElementSibling,
    base, track, line, grip;

  element.parentNode.style.whiteSpace = 'nowrap';
  element.parentNode.style.userSelect = 'none';
  base = document.createElement('div');
  base.classList.add('range-base');
  track = document.createElement('div');
  line = document.createElement('i');
  track.appendChild( line );
  grip = document.createElement('span');
  track.appendChild( grip );
  base.appendChild( track );
  if ( s ) p.insertBefore( base, s );
  else p.appendChild( base );

  max = parseInt( element.max ) || 100;
  min = parseInt( element.min ) || 0;
  step = parseInt( element.step ) || 1;

  setPosition();

  grip.addEventListener( 'mousedown', setActive );
  element.addEventListener( 'change', setPosition );
  window.addEventListener( 'resize', setPosition );

  function setPosition() {
    value = parseInt( element.value );
    grip.innerHTML = value;
    track.style.width = element.clientWidth + 'px';
    track.style.left =
      - track.parentNode.getBoundingClientRect().left
      + element.getBoundingClientRect().left
      + 'px';
    posMax = Math.floor( track.clientWidth - grip.clientWidth );
    l = posMax * step / ( max - min ); // step length, px
    n = ( value - min ) / step; // current number of steps
    pos = l * n; // position, px
    if ( Math.ceil( pos ) > posMax ) pos = posMax;
    grip.style.left = pos + 'px';
    line.style.width = pos + 'px';
  }
  function setActive( event ) {
    startX = event.clientX;
    startY = event.clientY;
    grip.classList.add('active');
    document.addEventListener( 'mousemove', moveGrip );
    document.addEventListener( 'mouseup', unsetActive );
  }
  function unsetActive() {
    pos = newPos;
    element.value = value;
    grip.classList.remove('active');
    document.removeEventListener( 'mousemove', moveGrip );
    document.removeEventListener( 'mouseup', unsetActive );
  }
  function moveGrip( event ) {
    var dX = event.clientX - startX,
      dY = event.clientY - startY;

    newPos = pos + l * Math.floor( dX / l );

    if ( Math.abs( dX ) > posMax + 100 || Math.abs( dY ) > 100 ) unsetActive();
    if ( newPos < 0 ) newPos = 0;
    if ( newPos > posMax ) newPos = posMax;
    grip.style.left = newPos + 'px';
    line.style.width = newPos + 'px';
    value = Math.round( ( newPos / posMax ) * ( max - min ) + min );
    grip.innerHTML = value;
  }
}
function RangeHinted( element ) {
  var base, hint,
    p = element.parentNode,
    s = element.nextElementSibling,
    max, min;

  if ( isIE() ) return;

  max = element.max || 100;
  min = element.min || 0;

  base = document.createElement('div');
  base.classList.add('range-base');
  hint = document.createElement('div');
  hint.innerHTML = element.value.toString();
  base.appendChild( hint );
  if ( s ) p.insertBefore( base, s );
  else p.appendChild( base );

  hint.style.bottom = element.clientHeight + 'px';

  element.addEventListener( 'mousedown', showHint );
  element.addEventListener( 'mouseup', hideHint );
  element.addEventListener( 'blur', hideHint );

  function showHint() {
    hint.classList.add('active');
    getHintValue();
    element.addEventListener( 'mousemove', getHintValue );
  }
  function hideHint() {
    hint.classList.remove('active');
    element.removeEventListener( 'mousemove', getHintValue );
  }
  function getHintValue() {
    var l, w;
    hint.innerHTML = element.value.toString();
    l = hint.parentNode.getBoundingClientRect().left - element.getBoundingClientRect().left;
    w = element.clientWidth - hint.clientWidth;
    hint.style.left = - l + w * ( element.value - min ) / ( max - min ) + 'px';
  }
}
function RangeOutput( element ) {
  var o = document.querySelectorAll('[data-output="' + element.id + '"]');

  if ( !o.length ) return;

  element.addEventListener( 'change', getOutputValue );

  getOutputValue();
  element.addEventListener( 'mousedown', function () {
    element.addEventListener( 'mousemove', getOutputValue );
  } );
  element.addEventListener( 'mouseup', function () {
    element.removeEventListener( 'mousemove', getOutputValue );
  } );

  function getOutputValue() {
    for ( var i = 0; i < o.length; i++ ) {
      o[i].innerHTML = element.value;
    }
  }
}

function dependRadio() {
    
    /*  Example
     <input type="radio" name="aa">
     <div class="dependRadioMaster">
     <input type="radio" name="aa">
     </div>
     <div class="dependRadioSlave">
     <input type="radio" name="bb" selected>
     <input type="radio" name="bb">
     </div>
     */
  var master = document.querySelectorAll('.dependRadioMaster [type="radio"]'),
    slave = document.querySelectorAll('.dependRadioSlave [type="radio"]'),
    masterSib,
    checked,
    disabled = true;
  if ( !master.length || !slave.length ) return;

  for ( var i = 0; i < master.length; i++ ) {
    if ( master[i].checked ) {
      disabled = false;
      break;
    }
  }
  controlSlaves();

  masterSib = document.querySelectorAll('[name=' + master[0].name + ']');
  for ( i = 0; i < masterSib.length; i++ ) {
      masterSib[i].onchange = function () {
          
      disabled = !getParentByClassName(this, 'dependRadioMaster');
      controlSlaves();
    };
  }

  function controlSlaves() {
      
    for ( var j = 0; j < slave.length; j++ ) {
      if ( slave[j].checked ) checked = j;
      slave[j].disabled = disabled;
      slave[j].checked = false;
    }
    if ( !disabled && checked >= 0 ) slave[checked].checked = true;
  }
}
function checkInputParent() {
    
  var nestedInput = document.querySelectorAll('[type="radio"] + label input, [type="checkbox"] + label input');
  if ( !nestedInput ) return;
  for ( var i = 0; i < nestedInput.length; i++ ) {
      nestedInput[i].addEventListener('change', function () {
          
      var id = this.parentNode.getAttribute('for'),
        parent;
      if ( !id ) {
        console.warn('<label> doesn`t have an attribute "for"');
        return;
      }
      parent = document.getElementById( id );
      if ( !parent ) {
        console.warn('can`t find an <input> with id="' + id + '"');
        return;
      }
      parent.onchange();
      parent.checked = true;
    });
  }
}

//------------------------------------------------ POPUPS
// POPUPS opening control v.5 (contains jQuery)
function showPopup(element, popupClass, options) {
  // Examples:
  // <i onclick="showPopup(this, 'popupConfirm', {name: 'Стереть', func: goToHell, button: 'Burn'})"></i>
  // <i onclick="showPopup(this, 'popupEditStudent', {name: 'Информация об учащемся', tab1: 2, tab2: 3})"></i>
  //
  // options possible: func, name, span, text, button, tab1, tab2, demo, top, width, bookTitle, bookId
  // first parameter is needed to pass it to next functions
  var popup = document.querySelector('.' + popupClass),
    popupWrap = popup.parentNode,
    popupContent = popup.querySelector('.popup_content'),
    iframe, link, linkPrefix, linkSuffix,
    popupName = popup.querySelector('.popup_name'),
    popupNameSpan = popupName.querySelector('.span'),
    popupCloseButton = popup.querySelectorAll('.icon_close'),
    popupActionButton = popup.querySelector('.popup_footer [class*="button"]:last-child');

  if (!options) options = {};

  if ( options.button ) popupActionButton.innerHTML = options.button;

  if ( popupCloseButton[1] && !popupCloseButton[1].innerHTML ) {
    popupCloseButton[1].innerHTML = 'Cancel';
  }

  // defaults for Confirmation
  if ( popupClass === 'popupConfirm' ) {
    if ( !options.name ) options.name = getLocalization( 'YYRRConfirmation', 'Confirm' );
    if ( !options.text ) options.text = getLocalization( 'YYRRConfirmDelete', 'Please confirm' );
    if ( !options.button ) options.button = getLocalization( 'YYDelete', 'Confirm' );
  }

  if ( options.text ) popupContent.innerHTML = '<p>' + options.text + '</p>';
  if ( options.button ) popupActionButton.innerHTML = options.button;
  if ( options.cancel ) popupCloseButton[1].innerHTML = options.cancel;

  // Set name of popup
  if ( options.name ) {
    popupName.innerHTML = options.name;
  } else if ( element.hasAttribute('title') ) {
    popupName.innerHTML = element.getAttribute('title');
  }

  // Set span after name of popup
  if ( options.span ) {
    if ( !popupNameSpan ) {
      popupNameSpan = document.createElement('span');
      popupName.appendChild(popupNameSpan);
    }
    popupNameSpan.innerHTML = options.span;
  }

  // Run the function by clicking on the Action Button (the last button in popup's footer)
  if ( options.func && popupActionButton ) {
    popupActionButton.onclick = function () {
      options.func(element);
    };
  }

  // If options have tabs
  if ( options.tab1 ) {
    var tab1 = switchTabTo(popup, options.tab1);
    if ( options.tab2 ) {
      switchTabTo(tab1, options.tab2);
    } else if ( tab1.querySelector('[class*="tabMenuItem"]') ) {
      switchTabTo(tab1, 1);
    }
  } else if ( popup.querySelector('[class*="tabMenuItem"]') ) {
    switchTabTo(popup, 1);
  }

  // E-Books support
  if ( popupClass === 'popupBook' ) {
    popupName.innerHTML =
      options.bookTitle ?
        options.bookTitle
        : element.querySelector('input.title-for-book-term').value;

    if ( options.demo ) {
      linkPrefix = '/ElectronicBook/GetMegaBookDemoParagraphUrl/?homeworkTitle=';
      linkSuffix = options.bookTitle ?
        options.bookTitle
        : element.querySelector('input.title-for-book-term').value;
      link = linkPrefix + linkSuffix;
      $.get(link).done(function (response) {
        if (response) {
          link = response;
          setIframe();
        }
      }).fail(function () {
        message('Paragraph loading error', 'error');
      });
    } else {
      linkPrefix = '/ElectronicBook/GetBookParagraph/?bookTermId=';
      linkSuffix = options.bookId ?
        options.bookId
        : element.querySelector('input.book-term-id').value;
      link = linkPrefix + linkSuffix;
      setIframe();
    }

    function setIframe() {
      iframe = popupContent.querySelector('iframe');
      if (iframe) {
        iframe.src = link;
      } else {
        iframe = document.createElement('iframe');
        iframe.src = link; // yes, it must be after Create but before Append
        popupContent.appendChild(iframe);
      }
    }
  }

  function switchTabTo( element, number ) {
    var elementClassNames = element.querySelector('[class*="tabMenuItem"]').className.split(' '),
      elementMenuItem, elementContentItem;

    for (var j = 0; j < elementClassNames.length; j++) {
      if ( elementClassNames[j].search('tabMenuItem') === 0 ) break;
    }
    elementMenuItem = element.querySelectorAll('.' + elementClassNames[j]);
    elementContentItem = element.querySelectorAll('.' + elementClassNames[j].replace('Menu','Content'));
    for (i = 0; i < elementMenuItem.length; i++) {
      elementMenuItem[i].classList.remove('selected');
      elementContentItem[i].classList.remove('selected');
    }
    elementMenuItem[number - 1].classList.add('selected');
    elementContentItem[number - 1].classList.add('selected');
    return elementContentItem[number - 1];
  }

  setTimeout(function () {
    if ( options.width ) popup.style.width = options.width + 'px';
    else popup.removeAttribute('style');
    popupWrap.classList.add("active");
    document.body.style.overflow = 'hidden';
  },0);

  // Close popup
  /*
   popupWrap.onclick = function (e) { // Closing by outside click
   if (e.target === popupWrap) { popupClose() }
   };
   */
  for (var i = 0; i < popupCloseButton.length; i++) {
    popupCloseButton[i].onclick = popupClose;
  }
  function popupClose() {
    popupWrap.classList.remove("active");
    document.body.style.overflow = 'auto';
  }

  setTimeout(function () {
    dragging( popup, options.top );
  },300);
}
// POPUP with HTML
function showPopupHTML( element, html, options ) {
  /*
   element: HTML element fired popup; title of this element used as popup name (if it is not set in options)
   html: standard HTML markup
   options: {
   width: width of popup in px (integer),
   name: name of the popup,
   button: name of the bottom button,
   closeCallback
   }
   */
  var popupWrap, popup;
  if ( !options ) options = {};

  buildPopup();
  buildPopupHeader();
  buildPopupContent();
  buildPopupFooter();
  setTimeout(function () {
    popupWrap.classList.add("active");
    document.body.style.overflow = 'hidden';
  },0);
  setTimeout(function () {
    dragging( popup );
  },300);

  function buildPopup() {
    popupWrap = document.createElement('div');
    popupWrap.classList.add('popup_wrap');

    popup = document.createElement('div');
    popup.classList.add('popup');
    if ( options.width ) popup.style.width = options.width + 'px';

    popupWrap.appendChild( popup );
    document.body.appendChild( popupWrap );
  }

  function buildPopupHeader() {
    var popupHeader, popupName, iconClose;

    popupHeader = document.createElement('div');
    popupHeader.classList.add('popup_header');

    popupName = document.createElement('div');
    popupName.classList.add('popup_name');
    popupName.innerHTML = options.name || element.title || element.innerHTML;
    popupHeader.appendChild( popupName );

    iconClose = document.createElement('i');
    iconClose.classList.add('material-icons');
    iconClose.classList.add('button-design-04');
    iconClose.classList.add('icon_close');
    iconClose.title = getLocalization( 'YYClose', 'Close' );
    iconClose.innerHTML = 'close';
    iconClose.onclick = closePopup;
    popupHeader.appendChild( iconClose );

    popup.appendChild( popupHeader );
  }

  function buildPopupContent() {
    var popupContent = document.createElement('div');
    popupContent.classList.add('popup_content');
    popupContent.innerHTML = html;
    popup.appendChild( popupContent );
  }

  function buildPopupFooter() {
    var popupFooter, button;
    popupFooter = document.createElement('div');
    popupFooter.classList.add('popup_footer');

    button = document.createElement('button');
    button.classList.add('button-design-01');
    button.innerHTML = options.button ? options.button : 'OK';
    button.onclick = closePopup;

    popupFooter.appendChild( button );
    popup.appendChild( popupFooter );
  }

  function closePopup() {
    popupWrap.classList.remove("active");
    setTimeout(function () {
      document.body.removeChild( popupWrap );
      document.body.style.overflow = 'auto';
      if (options.closeCallback) {
        options.closeCallback();
      }
    }, 300);
  }
}
// POPUPS positioning & dragging v.2
function dragging( popup, top ) {
  var popupHandle = popup.querySelector('.popup_name'),
    popupInitialX, popupInitialY, dragged = false;

  // align the element to the parent's center
  popupAlign();
  window.addEventListener('resize', popupAlign);
  popup.addEventListener('click', function(event) {
    if ( event.target !== popupHandle ) popupAlign();
  });
  function popupAlign() {
    var popupHeader = popup.querySelector('.popup_header'),
      popupContent = popup.querySelectorAll('.popup_content'),
      popupFooter = popup.querySelector('.popup_footer');
    if ( popupHeader && popupContent[0] && popupFooter ) {
      for ( var i = 0; i < popupContent.length; i++ ) {
        popupContent[i].style.maxHeight = Math.floor(
            window.innerHeight * 0.8
            - popupHeader.clientHeight
            - popupFooter.clientHeight
          ) + 'px';
      }
    }
    /*if ( !dragged ) {
      popupInitialX = Math.ceil( (window.innerWidth - popup.clientWidth) / 2 );
      if ( top || top === 0 ) {
        popupInitialY = top;
      } else {
        popupInitialY = Math.ceil( (window.innerHeight - popup.clientHeight) / 2 );
      }
      if ( popupInitialY < 0 ) popupInitialY = 0;
      if ( popupInitialY > 150 && popup.clientHeight > 300 ) popupInitialY = 150;

      popup.style.left = popupInitialX + 'px';
      popup.style.top = popupInitialY + 'px';
    }*/
  }

  // control dragging
  popupHandle.onmousedown = function(dragStart) {
    document.body.addEventListener('mousemove', controlDragging);
    document.body.addEventListener('mouseup', stopDragging);
    function controlDragging(drag) {
      popup.style.left = popupInitialX + drag.clientX - dragStart.clientX + "px";
      popup.style.top = popupInitialY + drag.clientY - dragStart.clientY + "px";
      dragged = true;
    }
    function stopDragging() {
      document.body.removeEventListener('mousemove', controlDragging);
      document.body.removeEventListener('mousemove', stopDragging);
      popupInitialX = parseInt(popup.style.left);
      popupInitialY = parseInt(popup.style.top);
      if (popupInitialX < 0) {
        popupInitialX = 0;
      } else if (popupInitialX + popup.clientWidth > window.innerWidth) {
        popupInitialX = window.innerWidth - popup.clientWidth;
      }
      if (popupInitialY < 0) {
        popupInitialY = 0;
      } else if (popupInitialY + popup.clientHeight > window.innerHeight) {
        popupInitialY = window.innerHeight - popup.clientHeight;
      }
      popup.style.left = popupInitialX + 'px';
      popup.style.top = popupInitialY + 'px';
    }
  };
}
function testFunction( element ) {
  //element.parentNode.parentNode.style.background = 'orange';
  element = element || this;
  alert('Элемент ' + element.className + ' вызвал функцию ' + testFunction.name );
}

//------------------------------------------------ ACCOUNT
// editing users
function editUser() {
  var container = document.querySelectorAll('.user-info');
  if ( !container.length ) return;
  for ( var i = 0; i < container.length; i++ ) {
    new User( container[i] );
  }

  function User( container ) {
    var buttonEdit = container.querySelector('.icon-edit'),
      h3 = container.querySelector('h3'),
      form = container.querySelector('form'),
      buttonClear;

    if ( !( buttonEdit && h3 && form ) ) {
      console.warn('user-info block is not complete');
      return;
    }

    buttonClear = form.querySelector('button');

    buttonEdit.onclick = function () {
      form.classList.add('active');
    };

    h3.onclick = function () {
      form.classList.add('active');
    };

    buttonClear.onclick = function () {
      form.classList.remove('active');
      return false;
    };
  }
}
// editing images
function editImage() {
  var container = document.querySelectorAll('.userImageEditable'),
    popup = document.querySelector('.popupEditImage');

  if ( !container || !popup ) return;

  var imageInPopup = popup.querySelector('.imageBox img'),
    imageBox = popup.querySelector('.imageBox'),
    cropArea = popup.querySelector('.cropArea'),
    cropCircle = popup.querySelector('.cropCircle'),
    inputFile = popup.querySelector('[type="file"]'),
    resetButton = popup.querySelector('.buttonReset'),
    closeButton = popup.querySelector('.icon_close'),
    deleteButton = popup.querySelector('.buttonDelete'),
    cropGripNW = popup.querySelector('.cropGripNW'),
    cropGripNE = popup.querySelector('.cropGripNE'),
    cropGripSE = popup.querySelector('.cropGripSE'),
    cropGripSW = popup.querySelector('.cropGripSW'),
    popupUser = popup.querySelector('[name="UserId"]'),
    popupImageW = popup.querySelector('[name="imageW"]'),
    popupImageH = popup.querySelector('[name="imageH"]'),
    popupCropX = popup.querySelector('[name="cropX"]'),
    popupCropY = popup.querySelector('[name="cropY"]'),
    popupCropW = popup.querySelector('[name="cropW"]');

  for ( var i = 0; i < container.length; i++ ) {
    container[i].onclick = imageEditor;
  }

  function imageEditor( event ) {
    var block = event.target.parentNode.parentNode,
      cursorX, cursorY,
      imageW, imageH, cropX, cropY, cropW;

    popup.parentNode.classList.add('active');
    loadDataFromPage();

    resetButton.onclick = loadDataFromPage;

    inputFile.onchange = function () {
      imageInPopup.src = URL.createObjectURL( inputFile.files[0] );
      defaultCropArea();
    };

    closeButton.onclick = function () {
      popup.parentNode.classList.remove('active');
    };

    deleteButton.onclick = defaultImage;

    imageBox.onmousedown = function(event) {
      event.preventDefault(); // stop drag'n'drop
    };

    if ( 'ontouchstart' in window ) {
      cropArea.ontouchstart = function (event) {
        cursorX = event.touches[0].clientX;
        cursorY = event.touches[0].clientY;
        popup.ontouchend = stopCrop;
      };
      cropCircle.ontouchstart = function () {
        popup.ontouchmove = moveCropArea;
      };
      cropGripNW.ontouchstart = function () {
        popup.ontouchmove = function (event) {
          moveCropCorner( event, [1,1,-1,1,1] );
        };
      };
      cropGripNE.ontouchstart = function () {
        popup.ontouchmove = function (event) {
          moveCropCorner( event, [0,1,-1,-1,1] );
        };
      };
      cropGripSE.ontouchstart = function () {
        popup.ontouchmove = function (event) {
          moveCropCorner( event, [0,0,1,1,1] );
        };
      };
      cropGripSW.ontouchstart = function () {
        popup.ontouchmove = function (event) {
          moveCropCorner( event, [1,0,-1,1,-1] );
        };
      };
    } else {
      cropArea.onmousedown = function (event) {
        cursorX = event.clientX;
        cursorY = event.clientY;
        popup.onmouseup = stopCrop;
        popup.onmouseleave = stopCrop;
      };
      cropCircle.onmousedown = function () {
        popup.onmousemove = moveCropArea;
      };
      cropGripNW.onmousedown = function () {
        popup.onmousemove = function (event) {
          moveCropCorner( event, [1,1,-1,1,1] );
          // [left, top, scale, inversion, inversion]
        };
      };
      cropGripNE.onmousedown = function () {
        popup.onmousemove = function (event) {
          moveCropCorner( event, [0,1,-1,-1,1] );
        };
      };
      cropGripSE.onmousedown = function () {
        popup.onmousemove = function (event) {
          moveCropCorner( event, [0,0,1,1,1] );
        };
      };
      cropGripSW.onmousedown = function () {
        popup.onmousemove = function (event) {
          moveCropCorner( event, [1,0,-1,1,-1] );
        };
      };
    }

    function loadDataFromPage() {
      inputFile.value = '';
      imageInPopup.src = block.querySelector('[name="imageURL"]').value;
      imageW = parseInt( block.querySelector('[name="imageW"]').value );
      imageH = parseInt( block.querySelector('[name="imageH"]').value );
      cropX = parseInt( block.querySelector('[name="cropX"]').value );
      cropY = parseInt( block.querySelector('[name="cropY"]').value );
      cropW = parseInt( block.querySelector('[name="cropW"]').value );
      if ( !imageH || !imageW ) {
        defaultImage();
        return;
      }
      imageInPopup.style.height = imageH + 'px';
      imageInPopup.style.width = imageW + 'px';
      setPopupData();
    }
    function setPopupData( doNotSetArea ) {
      popupUser.value = block.querySelector('[name="UserId"]').value;
      popupImageW.value = imageW;
      popupImageH.value = imageH;
      popupCropX.value = cropX;
      popupCropY.value = cropY;
      popupCropW.value = cropW;
      imageInPopup.removeAttribute('style');
      if ( !doNotSetArea ) setArea();
    }
    function setArea() {
      cropArea.removeAttribute('style');
      cropArea.style.left = cropX + 'px';
      cropArea.style.top = cropY + 'px';
      cropArea.style.height = cropArea.style.width = cropW + 'px';
    }
    function defaultImage() {
      imageInPopup.removeAttribute('style');
      imageInPopup.src = '/images/login-image-green.png';
      cropArea.style.display = 'none';
      popupImageW.removeAttribute('value');
      popupImageH.removeAttribute('value');
      popupCropX.removeAttribute('value');
      popupCropY.removeAttribute('value');
      popupCropW.removeAttribute('value');
    }
    function defaultCropArea() {
      cropArea.style.opacity = 0;
      setTimeout(function () {
        var w = imageInPopup.parentNode.clientWidth,
          h = imageInPopup.parentNode.clientHeight;

        imageW = imageInPopup.clientWidth;
        imageH = imageInPopup.clientHeight;

        if ( imageW < 100 && imageH < 100 ) {
          cropArea.style.display = 'none';
          cropX = 0;
          cropY = 0;
          cropW = imageW;
        } else {
          if ( w > h ) {
            cropY = 0;
            cropW = Math.floor( h );
            cropX = Math.floor( ( w - h ) / 2 );
          } else {
            cropX = 0;
            cropW = Math.floor( w );
            cropY = Math.floor( ( h - w ) / 2 );
          }
        }
        setPopupData();
      },500);
    }
    function moveCropArea(event) {
      var dX, dY, left, top, e;
      event.preventDefault();
      e = event.touches ? event.touches[0] : event;
      dX = Math.floor( cursorX - e.clientX );
      dY = Math.floor( cursorY - e.clientY );
      left = cropX - dX;
      top = cropY - dY;

      if ( left < 0 ) cropArea.style.left = 0;
      else if ( left + cropW > imageBox.clientWidth ) {
        cropArea.style.left = imageBox.clientWidth - cropW + 'px';
      }
      else cropArea.style.left = left + 'px';

      if ( top < 0 ) cropArea.style.top = 0;
      else if ( top + cropW > imageBox.clientHeight ) {
        cropArea.style.top = imageBox.clientHeight - cropW + 'px';
      }
      else cropArea.style.top = top + 'px';
    }
    function moveCropCorner( event, corner ) {
      var dX, dY, d, e, left, top, width;
      event.preventDefault();
      e = event.touches ? event.touches[0] : event;
      dX = ( e.clientX - cursorX ) * corner[3];
      dY = ( e.clientY - cursorY ) * corner[4];
      d = Math.abs(dX) > Math.abs(dY) ? dX : dY;

      if ( cropW + d * corner[2] < 100 ) {
        d = ( cropW - 100 ) * - corner[2]; // limit by size
      }
      else if ( corner[0] && d < - cropX ) {
        d = - cropX; // limit by left side
      }
      else if ( corner[1] && d < - cropY ) {
        d = - cropY; // limit by top side
      }
      else if ( !corner[0] && cropX + cropW + d * corner[2] > imageW ) {
        d = corner[2] * ( imageW - cropX - cropW ); // limit by right side
      }
      else if ( !corner[1] && cropY + cropW + d * corner[4] > imageH ) {
        d = corner[4] * ( imageH - cropY - cropW );  // limit by bottom side
      }

      left = Math.floor( cropX + d * corner[0] );
      top = Math.floor( cropY + d * corner[1] );
      width = Math.floor( cropW + d * corner[2] );

      if ( left < 0 ) left = 0;
      if ( top < 0 ) top = 0;
      if ( left + width > imageW ) left = imageW - width;
      if ( top + width > imageH ) top = imageH - width;
      if ( width > imageH ) width = imageH;
      if ( width > imageW ) width = imageW;

      cropArea.style.left = left + 'px';
      cropArea.style.top = top + 'px';
      cropArea.style.width = cropArea.style.height = width + 'px';
    }
    function stopCrop() {
      popup.onmouseup = null;
      popup.onmouseleave = null;
      popup.onmousemove = null;
      cropX = parseInt( cropArea.style.left );
      cropY = parseInt( cropArea.style.top );
      cropW = parseInt( cropArea.style.width );
      setPopupData( true );
    }
  }
}
// view box for images
function viewBox() {
  var callButton = document.querySelectorAll('.view-box-link'),
    box, img, p;
  if ( !callButton.length ) return;

  createViewBox();

  for ( var i = 0; i < callButton.length; i ++ ) {
    callButton[i].onclick = showViewBox;
  }

  function createViewBox() {
    var content, closeButton;
    box = document.querySelector('.view-box');
    if ( box ) {
      img = box.querySelector('img');
      p = box.querySelector('p');
      closeButton = box.querySelector('.icon_close');
    } else {
      box = document.createElement('div');
      box.classList.add('view-box');
      content = document.createElement('div');
      content.classList.add('view-box-content');
      img = new Image;
      p = document.createElement('p');
      closeButton = document.createElement('i');
      closeButton.classList.add('material-icons');
      closeButton.classList.add('button-design-01');
      closeButton.classList.add('button-small');
      closeButton.classList.add('icon_close');
      closeButton.innerHTML = 'close';
      content.appendChild( closeButton );
      content.appendChild( img );
      content.appendChild( p );
      box.appendChild( content );
      document.body.appendChild( box );
    }
    closeButton.onclick = function () {
      box.classList.remove('active');
    };
  }
  function showViewBox( e ) {
    img.src = e.currentTarget.href;
    p.innerHTML = e.target.alt;
    box.classList.add('active');
    return false;
  }
}

//------------------------------------------------ SERVICE FUNCTIONS
function getParentByTag( child, tag ) {
  if ( child.parentNode.tagName === tag.toUpperCase() ) return child.parentNode;
  if ( child.parentNode.tagName === 'BODY' ) throw 'No "' + tag + '" tag found';
  return getParentByTag( child.parentNode, tag );
}

function getParentByClassName( child, className ) {
  if ( child.parentNode.classList.contains( className ) ) return child.parentNode;
  if ( child.parentNode === document.body ) return false;
  return getParentByClassName( child.parentNode, className );
}

function closeAllBoxes( exeption ) {
  var box = [
    marksBox,
    boxLesson,
    boxFinishedHomeWork,
    boxLessonType,
    boxLessonInfo,
    boxMarkInfo,
    boxSubjectTeachers,
    boxForecastedMarkInfo,
    payPassesBox,
    payAbsencesBox,
    behaviorBox
  ];

  for ( var i = 0; i < box.length; i++ ) {
    if ( box[i] && box[i] !== exeption ) box[i].close(true);
  }
}

function getLocalization( id, defaultText ) {
  var element = document.getElementById( id );
  return element ? element.innerHTML : defaultText;
}

function isIE() {
  // Detect IE and Edge
  var a = navigator.userAgent;
  return !!( a.match(/Trident/g) || a.match(/MSIE/g) || a.match(/Edge/g) );
}

function closeAttentionLineInit() {
    document.addEventListener('click', function (e) {
        if (e.target && e.target.classList.contains("attention-line-close")) {
            var secondsInOneDay = 60 * 60 * 24;
            var attentionLineNode = e.target.parentNode.parentNode;
            var attentionLineId = attentionLineNode.id;

            document.cookie = attentionLineId + "=closed; path=/; max-age=" + secondsInOneDay;

            attentionLineNode.remove();
        }
    });
}

function getFamilyKey(event) {
    if (!$("#FamilyKey").is(':disabled')) {
        event.preventDefault();
        if ($("#regForm").validate().element("#Email") &&
            $("#regForm").validate().element("#ClassId")) {
            grecaptcha.execute(grecaptchaWidget1);
        }
    }
}

function validateForm(event) {
    event.preventDefault();
    if ($("#regForm").valid()) {
        grecaptcha.execute(grecaptchaWidget2);
    }
}

function onSubmit(token) {
    $("#CaptchaToken").val(token);
    $("#FamilyKey").prop("disabled", false); //если не заинейблить то не достанет значени при сабмите
    $("#regForm").submit();
}

function onGetFamilyKey(token) {
    $("#cs-loader").show();
    $.ajax({
        type: 'POST',
        url: '/Account/RegisterFamily',
        data: {
            classKey: $("#ClassId").val(),
            email: $("#Email").val(),
            token: token
        },
    }).done(function (response) {
        if (response && response != "captchaError") {
            $("#FamilyKey").val(response);
            $("#regForm").validate().element("#FamilyKey");
            $("#FamilyKey").prop("disabled", true);
            $("#cs-loader").hide();
        }
        else if (response && response == "captchaError") {
            $(".validation-summary-errors > ul").append('<li>reCAPTCHA error occured. Please try again.</li>');
            grecaptcha.reset();
            $("#cs-loader").hide();
        }
        else {
            grecaptcha.reset();
            $("#cs-loader").hide();
        }
    }).fail(function () {
        grecaptcha.reset();
        $("#cs-loader").hide();
    });
}

//редактирование попапов

function deletePopup(popup) {
    $("#main-loading").slideDown();
    var row = $(popup).parent().parent();
    var popupName = row.data("name");
    var url = "/Helper/DeletePopup";
    var unknownError = $('#footerUnknownErrorJs').text();
    if (typeof popupName !== "undefined") {
        $.post(url, { popupName: popupName })
            .done(function (response) {
                if (response && !response.ErrorMessages) {
                    popup.parentElement.parentElement.remove();
                    $(".popupConfirm").parent().removeClass("active");
                    document.body.style.overflow = 'auto';
                    var WWTeacherSuccessDelete = $('#WWTeacherSuccessDelete').text();
                    message(WWTeacherSuccessDelete);
                } else {
                    if (response.ErrorMessages) {
                        message(response.ErrorMessages, "error");
                    } else {
                        message(unknownError, "error");
                    }
                }
            })
            .fail(function () {
                message(unknownError, "error");
            })
            .always(function () {
                $("#main-loading").slideUp();
            });
    }
}

function addPopup() {
    var clone = $(".ql-editor").children().clone(true, true);
    $(".popupPreviewPopup").find($("#text_content")).empty();
    $(".popupPreviewPopup").find($("#text_content")).append(clone);

    $(".popupPreviewPopup").find($("#image_content")).attr('src', '');
    $("#PopupContent").val($(".popupPreviewPopup").parent().html());

    if ($("#hidden-IsForParents").val() === 'false' &&
        $("#hidden-IsForTeachers").val() === 'false' &&
        $("#hidden-IsForPupils").val() === 'false' &&
        $("#hidden-IsForUnlogged").val() === 'false') {
        alert("Необходимо выбрать роли");
        return;
    }
    $("#main-loading").slideDown();
    $("#HiddenForm").submit();
}

function hideAll() {
    if ($(".popupPreviewPopup")) {
        $(".popupPreviewPopup").find($(".image-container")).hide();
        $("#image-preview-container").hide();
        $(".popupPreviewPopup").find($("#more-link-container")).hide();
        $(".popupPreviewPopup").find($("#popup-more-button")).hide();
    }
}

function readImage(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();
        reader.onload = function (e) {
            $(".popupPreviewPopup").find($(".image-container")).show();
            $("#image-preview-container").show();
            $(".popupPreviewPopup").find($("#image_content")).attr('src', e.target.result);
            $("#preview-image").attr('src', e.target.result);
        }
        reader.readAsDataURL(input.files[0]);
    }
}

function removeImage() {
    $(".popupPreviewPopup").find($(".image-container")).hide();
    $("#image-preview-container").hide();
    $(".popupPreviewPopup").find($("#image_content")).attr('src', '');
    $("#preview-image").attr('src', '');
    $("#upload-image").val('');
}

function moreButtonLink(elem) {
    if (elem.value === 'true') {
        $("#more-link").show();
        $(".popupPreviewPopup").find($("#popup-more-button")).show();
    }
    else {
        $("#more-link").hide();
        $(".popupPreviewPopup").find($("#popup-more-button")).hide();
    }
}

function changePopupTitle(input) {
    $("#popup-name").prop("title", input.value);
    $(".popupPreviewPopup").find($(".popup_name")).text(input.value);
}

function changePopupLink(input) {
    $(".popupPreviewPopup").find($("#popup-more-button")).attr('href', input.value);
}

function previewPopup() {
    if ($("#hidden-more-button").value === 'true') {
        $(".popupPreviewPopup").find($("#popup-more-button")).attr("href", $("#more-link").val());
    }

    var clone = $(".ql-editor").children().clone(true, true);
    $(".popupPreviewPopup").find($("#text_content")).empty();
    $(".popupPreviewPopup").find($("#text_content")).append(clone);

    showPopup(document.getElementById("popup-name"), "popupPreviewPopup");
}

function showClassEventsPopup(button) {
    $("#main-loading").slideDown();
    var classId = $(button).data("id");
    var url = "/Client/GetClassEvents";
    var title = $('.show-class-events').val();
    $.get(url, { classId: classId }).done(function (response) {
        var container = $("#main-popup-container");
        container.html("");
        container.html(response);
        showPopup(this, "popupClassEvents", { name: title });
        initPageJS();
    }).always(function () {
        $("#main-loading").slideUp();
    });
}

function addRow(button) {
    var tableBody = $(button).closest('div').find('table > tbody');
    var templateRow = tableBody.find('tr:first').clone();

    templateRow.appendTo(tableBody).show('slow');
}

function removeRow(row) {
    $(row).closest('tr').hide(250, function () {
        $(this).remove();
    });
}

function saveClassEvents() {
    $("#main-loading").slideDown();

    var schoolId = $('table > tbody').data('schoolid');
    var classId = $('table > tbody').data('classid');
    var tableRows = $('table > tbody > tr:visible');
    var isRowsValid = true;

    var eventsData = [];
    tableRows.each(function (index, tr) {
        debugger;
        if (!isRowsValid) return false;
        var row = $(tr);
        var eventId = row.data('id');
        var eventTitle = row.find('[name=title]').val();
        var eventPlace = row.find('[name=place]').val();
        var eventDate = row.find('[name=date]').val();
        var eventTime = row.find('[name=time]').val();

        if (eventTitle == '' || eventPlace == '' || eventDate == '' || eventTime == '') {
            message('Есть незаполненные поля!');
            $("#main-loading").slideUp();
            isRowsValid = false;
            return false;
        }

        var rowData = {
            Id: eventId,
            Title: eventTitle,
            Place: eventPlace,
            Date: eventDate,
            Time: eventTime
        };

        eventsData.push(rowData);
    });

    if (!isRowsValid) return false;

    var model = {
        schoolId: schoolId,
        classId: classId,
        events: eventsData
    }

    $.ajax({
        url: "/Staff/SaveClassEvents/",
        type: "POST",
        data: JSON.stringify(model),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8'
    }).done(function (response) {

        tableRows.each(function (index, tr) {
            var row = $(tr);
            var eventId = row.data('id', response.eventsIds[index]);
        });

        message(response.message);
    }).always(function () {
        $("#main-loading").slideUp();
    });
};
/*!
 * dist/jquery.inputmask.min
 * https://github.com/RobinHerbots/Inputmask
 * Copyright (c) 2010 - 2020 Robin Herbots
 * Licensed under the MIT license
 * Version: 5.0.4-beta.3
 */
!function webpackUniversalModuleDefinition(root,factory){if("object"==typeof exports&&"object"==typeof module)module.exports=factory(require("jquery"));else if("function"==typeof define&&define.amd)define(["jquery"],factory);else{var a="object"==typeof exports?factory(require("jquery")):factory(root.jQuery);for(var i in a)("object"==typeof exports?exports:root)[i]=a[i]}}(window,function(__WEBPACK_EXTERNAL_MODULE__3__){return modules=[function(module){module.exports=JSON.parse('{"BACKSPACE":8,"BACKSPACE_SAFARI":127,"DELETE":46,"DOWN":40,"END":35,"ENTER":13,"ESCAPE":27,"HOME":36,"INSERT":45,"LEFT":37,"PAGE_DOWN":34,"PAGE_UP":33,"RIGHT":39,"SPACE":32,"TAB":9,"UP":38,"X":88,"CONTROL":17}')},function(module,exports,__webpack_require__){"use strict";function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var $=__webpack_require__(2),window=__webpack_require__(4),document=window.document,generateMaskSet=__webpack_require__(5).generateMaskSet,analyseMask=__webpack_require__(5).analyseMask,maskScope=__webpack_require__(8);function Inputmask(alias,options,internal){if(!(this instanceof Inputmask))return new Inputmask(alias,options,internal);this.el=void 0,this.events={},this.maskset=void 0,!0!==internal&&($.isPlainObject(alias)?options=alias:(options=options||{},alias&&(options.alias=alias)),this.opts=$.extend(!0,{},this.defaults,options),this.noMasksCache=options&&void 0!==options.definitions,this.userOptions=options||{},resolveAlias(this.opts.alias,options,this.opts),this.isRTL=this.opts.numericInput),this.refreshValue=!1,this.undoValue=void 0,this.$el=void 0,this.skipKeyPressEvent=!1,this.skipInputEvent=!1,this.validationEvent=!1,this.ignorable=!1,this.maxLength,this.mouseEnter=!1,this.originalPlaceholder=void 0}function resolveAlias(aliasStr,options,opts){var aliasDefinition=Inputmask.prototype.aliases[aliasStr];return aliasDefinition?(aliasDefinition.alias&&resolveAlias(aliasDefinition.alias,void 0,opts),$.extend(!0,opts,aliasDefinition),$.extend(!0,opts,options),!0):(null===opts.mask&&(opts.mask=aliasStr),!1)}function importAttributeOptions(npt,opts,userOptions,dataAttribute){function importOption(option,optionData){optionData=void 0!==optionData?optionData:npt.getAttribute(dataAttribute+option),null!==optionData&&("string"==typeof optionData&&(0===option.indexOf("on")?optionData=window[optionData]:"false"===optionData?optionData=!1:"true"===optionData&&(optionData=!0)),userOptions[option]=optionData)}if(!0===opts.importDataAttributes){var attrOptions=npt.getAttribute(dataAttribute),option,dataoptions,optionData,p;if(attrOptions&&""!==attrOptions&&(attrOptions=attrOptions.replace(/'/g,'"'),dataoptions=JSON.parse("{"+attrOptions+"}")),dataoptions)for(p in optionData=void 0,dataoptions)if("alias"===p.toLowerCase()){optionData=dataoptions[p];break}for(option in importOption("alias",optionData),userOptions.alias&&resolveAlias(userOptions.alias,userOptions,opts),opts){if(dataoptions)for(p in optionData=void 0,dataoptions)if(p.toLowerCase()===option.toLowerCase()){optionData=dataoptions[p];break}importOption(option,optionData)}}return $.extend(!0,opts,userOptions),"rtl"!==npt.dir&&!opts.rightAlign||(npt.style.textAlign="right"),"rtl"!==npt.dir&&!opts.numericInput||(npt.dir="ltr",npt.removeAttribute("dir"),opts.isRTL=!0),Object.keys(userOptions).length}Inputmask.prototype={dataAttribute:"data-inputmask-",defaults:{_maxTestPos:500,placeholder:"_",optionalmarker:["[","]"],quantifiermarker:["{","}"],groupmarker:["(",")"],alternatormarker:"|",escapeChar:"\\",mask:null,regex:null,oncomplete:$.noop,onincomplete:$.noop,oncleared:$.noop,repeat:0,greedy:!1,autoUnmask:!1,removeMaskOnSubmit:!1,clearMaskOnLostFocus:!0,insertMode:!0,insertModeVisual:!0,clearIncomplete:!1,alias:null,onKeyDown:$.noop,onBeforeMask:null,onBeforePaste:function onBeforePaste(pastedValue,opts){return $.isFunction(opts.onBeforeMask)?opts.onBeforeMask.call(this,pastedValue,opts):pastedValue},onBeforeWrite:null,onUnMask:null,showMaskOnFocus:!0,showMaskOnHover:!0,onKeyValidation:$.noop,skipOptionalPartCharacter:" ",numericInput:!1,rightAlign:!1,undoOnEscape:!0,radixPoint:"",_radixDance:!1,groupSeparator:"",keepStatic:null,positionCaretOnTab:!0,tabThrough:!1,supportsInputType:["text","tel","url","password","search"],ignorables:[8,9,19,27,33,34,35,36,37,38,39,40,45,46,93,112,113,114,115,116,117,118,119,120,121,122,123,0,229],isComplete:null,preValidation:null,postValidation:null,staticDefinitionSymbol:void 0,jitMasking:!1,nullable:!0,inputEventOnly:!1,noValuePatching:!1,positionCaretOnClick:"lvp",casing:null,inputmode:"text",importDataAttributes:!0,shiftPositions:!0},definitions:{9:{validator:"[0-9\uff11-\uff19]",definitionSymbol:"*"},a:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",definitionSymbol:"*"},"*":{validator:"[0-9\uff11-\uff19A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]"}},aliases:{},masksCache:{},mask:function mask(elems){var that=this;return"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:elems,$.each(elems,function(ndx,el){var scopedOpts=$.extend(!0,{},that.opts);if(importAttributeOptions(el,scopedOpts,$.extend(!0,{},that.userOptions),that.dataAttribute)){var maskset=generateMaskSet(scopedOpts,that.noMasksCache);void 0!==maskset&&(void 0!==el.inputmask&&(el.inputmask.opts.autoUnmask=!0,el.inputmask.remove()),el.inputmask=new Inputmask(void 0,void 0,!0),el.inputmask.opts=scopedOpts,el.inputmask.noMasksCache=that.noMasksCache,el.inputmask.userOptions=$.extend(!0,{},that.userOptions),el.inputmask.isRTL=scopedOpts.isRTL||scopedOpts.numericInput,el.inputmask.el=el,el.inputmask.$el=$(el),el.inputmask.maskset=maskset,$.data(el,"_inputmask_opts",scopedOpts),maskScope.call(el.inputmask,{action:"mask"}))}}),elems&&elems[0]&&elems[0].inputmask||this},option:function option(options,noremask){return"string"==typeof options?this.opts[options]:"object"===_typeof(options)?($.extend(this.userOptions,options),this.el&&!0!==noremask&&this.mask(this.el),this):void 0},unmaskedvalue:function unmaskedvalue(value){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"unmaskedvalue",value:value})},remove:function remove(){return maskScope.call(this,{action:"remove"})},getemptymask:function getemptymask(){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"getemptymask"})},hasMaskedValue:function hasMaskedValue(){return!this.opts.autoUnmask},isComplete:function isComplete(){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"isComplete"})},getmetadata:function getmetadata(){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"getmetadata"})},isValid:function isValid(value){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"isValid",value:value})},format:function format(value,metadata){return this.maskset=this.maskset||generateMaskSet(this.opts,this.noMasksCache),maskScope.call(this,{action:"format",value:value,metadata:metadata})},setValue:function setValue(value){this.el&&$(this.el).trigger("setvalue",[value])},analyseMask:analyseMask},Inputmask.extendDefaults=function(options){$.extend(!0,Inputmask.prototype.defaults,options)},Inputmask.extendDefinitions=function(definition){$.extend(!0,Inputmask.prototype.definitions,definition)},Inputmask.extendAliases=function(alias){$.extend(!0,Inputmask.prototype.aliases,alias)},Inputmask.format=function(value,options,metadata){return Inputmask(options).format(value,metadata)},Inputmask.unmask=function(value,options){return Inputmask(options).unmaskedvalue(value)},Inputmask.isValid=function(value,options){return Inputmask(options).isValid(value)},Inputmask.remove=function(elems){"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:elems,$.each(elems,function(ndx,el){el.inputmask&&el.inputmask.remove()})},Inputmask.setValue=function(elems,value){"string"==typeof elems&&(elems=document.getElementById(elems)||document.querySelectorAll(elems)),elems=elems.nodeName?[elems]:elems,$.each(elems,function(ndx,el){el.inputmask?el.inputmask.setValue(value):$(el).trigger("setvalue",[value])})};var escapeRegexRegex=new RegExp("(\\"+["/",".","*","+","?","|","(",")","[","]","{","}","\\","$","^"].join("|\\")+")","gim");Inputmask.escapeRegex=function(str){return str.replace(escapeRegexRegex,"\\$1")},Inputmask.dependencyLib=$,window.Inputmask=Inputmask,module.exports=Inputmask},function(module,exports,__webpack_require__){"use strict";var jquery=__webpack_require__(3);if(void 0===jquery)throw"jQuery not loaded!";module.exports=jquery},function(module,exports){module.exports=__WEBPACK_EXTERNAL_MODULE__3__},function(module,exports,__webpack_require__){"use strict";var __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}__WEBPACK_AMD_DEFINE_RESULT__=function(){return"undefined"!=typeof window?window:new(eval("require('jsdom').JSDOM"))("").window}.call(exports,__webpack_require__,exports,module),void 0===__WEBPACK_AMD_DEFINE_RESULT__||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},function(module,exports,__webpack_require__){"use strict";var $=__webpack_require__(2);function generateMaskSet(opts,nocache){var ms;function generateMask(mask,metadata,opts){var regexMask=!1,masksetDefinition,maskdefKey;if(null!==mask&&""!==mask||(regexMask=null!==opts.regex,mask=regexMask?(mask=opts.regex,mask.replace(/^(\^)(.*)(\$)$/,"$2")):(regexMask=!0,".*")),1===mask.length&&!1===opts.greedy&&0!==opts.repeat&&(opts.placeholder=""),0<opts.repeat||"*"===opts.repeat||"+"===opts.repeat){var repeatStart="*"===opts.repeat?0:"+"===opts.repeat?1:opts.repeat;mask=opts.groupmarker[0]+mask+opts.groupmarker[1]+opts.quantifiermarker[0]+repeatStart+","+opts.repeat+opts.quantifiermarker[1]}return maskdefKey=regexMask?"regex_"+opts.regex:opts.numericInput?mask.split("").reverse().join(""):mask,!1!==opts.keepStatic&&(maskdefKey="ks_"+maskdefKey),void 0===Inputmask.prototype.masksCache[maskdefKey]||!0===nocache?(masksetDefinition={mask:mask,maskToken:Inputmask.prototype.analyseMask(mask,regexMask,opts),validPositions:{},_buffer:void 0,buffer:void 0,tests:{},excludes:{},metadata:metadata,maskLength:void 0,jitOffset:{}},!0!==nocache&&(Inputmask.prototype.masksCache[maskdefKey]=masksetDefinition,masksetDefinition=$.extend(!0,{},Inputmask.prototype.masksCache[maskdefKey]))):masksetDefinition=$.extend(!0,{},Inputmask.prototype.masksCache[maskdefKey]),masksetDefinition}if($.isFunction(opts.mask)&&(opts.mask=opts.mask(opts)),$.isArray(opts.mask)){if(1<opts.mask.length){null===opts.keepStatic&&(opts.keepStatic=!0);var altMask=opts.groupmarker[0];return $.each(opts.isRTL?opts.mask.reverse():opts.mask,function(ndx,msk){1<altMask.length&&(altMask+=opts.groupmarker[1]+opts.alternatormarker+opts.groupmarker[0]),void 0===msk.mask||$.isFunction(msk.mask)?altMask+=msk:altMask+=msk.mask}),altMask+=opts.groupmarker[1],generateMask(altMask,opts.mask,opts)}opts.mask=opts.mask.pop()}return null===opts.keepStatic&&(opts.keepStatic=!1),ms=opts.mask&&void 0!==opts.mask.mask&&!$.isFunction(opts.mask.mask)?generateMask(opts.mask.mask,opts.mask,opts):generateMask(opts.mask,opts.mask,opts),ms}function analyseMask(mask,regexMask,opts){var tokenizer=/(?:[?*+]|\{[0-9+*]+(?:,[0-9+*]*)?(?:\|[0-9+*]*)?\})|[^.?*+^${[]()|\\]+|./g,regexTokenizer=/\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,escaped=!1,currentToken=new MaskToken,match,m,openenings=[],maskTokens=[],openingToken,currentOpeningToken,alternator,lastMatch,closeRegexGroup=!1;function MaskToken(isGroup,isOptional,isQuantifier,isAlternator){this.matches=[],this.openGroup=isGroup||!1,this.alternatorGroup=!1,this.isGroup=isGroup||!1,this.isOptional=isOptional||!1,this.isQuantifier=isQuantifier||!1,this.isAlternator=isAlternator||!1,this.quantifier={min:1,max:1}}function insertTestDefinition(mtoken,element,position){position=void 0!==position?position:mtoken.matches.length;var prevMatch=mtoken.matches[position-1];if(regexMask)0===element.indexOf("[")||escaped&&/\\d|\\s|\\w]/i.test(element)||"."===element?mtoken.matches.splice(position++,0,{fn:new RegExp(element,opts.casing?"i":""),static:!1,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==element,casing:null,def:element,placeholder:void 0,nativeDef:element}):(escaped&&(element=element[element.length-1]),$.each(element.split(""),function(ndx,lmnt){prevMatch=mtoken.matches[position-1],mtoken.matches.splice(position++,0,{fn:/[a-z]/i.test(opts.staticDefinitionSymbol||lmnt)?new RegExp("["+(opts.staticDefinitionSymbol||lmnt)+"]",opts.casing?"i":""):null,static:!0,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==lmnt&&!0!==prevMatch.static,casing:null,def:opts.staticDefinitionSymbol||lmnt,placeholder:void 0!==opts.staticDefinitionSymbol?lmnt:void 0,nativeDef:(escaped?"'":"")+lmnt})})),escaped=!1;else{var maskdef=(opts.definitions?opts.definitions[element]:void 0)||Inputmask.prototype.definitions[element];maskdef&&!escaped?mtoken.matches.splice(position++,0,{fn:maskdef.validator?"string"==typeof maskdef.validator?new RegExp(maskdef.validator,opts.casing?"i":""):new function(){this.test=maskdef.validator}:new RegExp("."),static:maskdef.static||!1,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==(maskdef.definitionSymbol||element),casing:maskdef.casing,def:maskdef.definitionSymbol||element,placeholder:maskdef.placeholder,nativeDef:element,generated:maskdef.generated}):(mtoken.matches.splice(position++,0,{fn:/[a-z]/i.test(opts.staticDefinitionSymbol||element)?new RegExp("["+(opts.staticDefinitionSymbol||element)+"]",opts.casing?"i":""):null,static:!0,optionality:!1,newBlockMarker:void 0===prevMatch?"master":prevMatch.def!==element&&!0!==prevMatch.static,casing:null,def:opts.staticDefinitionSymbol||element,placeholder:void 0!==opts.staticDefinitionSymbol?element:void 0,nativeDef:(escaped?"'":"")+element}),escaped=!1)}}function verifyGroupMarker(maskToken){maskToken&&maskToken.matches&&$.each(maskToken.matches,function(ndx,token){var nextToken=maskToken.matches[ndx+1];(void 0===nextToken||void 0===nextToken.matches||!1===nextToken.isQuantifier)&&token&&token.isGroup&&(token.isGroup=!1,regexMask||(insertTestDefinition(token,opts.groupmarker[0],0),!0!==token.openGroup&&insertTestDefinition(token,opts.groupmarker[1]))),verifyGroupMarker(token)})}function defaultCase(){if(0<openenings.length){if(currentOpeningToken=openenings[openenings.length-1],insertTestDefinition(currentOpeningToken,m),currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++)alternator.matches[mndx].isGroup&&(alternator.matches[mndx].isGroup=!1);0<openenings.length?(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(alternator)):currentToken.matches.push(alternator)}}else insertTestDefinition(currentToken,m)}function reverseTokens(maskToken){function reverseStatic(st){return st===opts.optionalmarker[0]?st=opts.optionalmarker[1]:st===opts.optionalmarker[1]?st=opts.optionalmarker[0]:st===opts.groupmarker[0]?st=opts.groupmarker[1]:st===opts.groupmarker[1]&&(st=opts.groupmarker[0]),st}for(var match in maskToken.matches=maskToken.matches.reverse(),maskToken.matches)if(Object.prototype.hasOwnProperty.call(maskToken.matches,match)){var intMatch=parseInt(match);if(maskToken.matches[match].isQuantifier&&maskToken.matches[intMatch+1]&&maskToken.matches[intMatch+1].isGroup){var qt=maskToken.matches[match];maskToken.matches.splice(match,1),maskToken.matches.splice(intMatch+1,0,qt)}void 0!==maskToken.matches[match].matches?maskToken.matches[match]=reverseTokens(maskToken.matches[match]):maskToken.matches[match]=reverseStatic(maskToken.matches[match])}return maskToken}function groupify(matches){var groupToken=new MaskToken(!0);return groupToken.openGroup=!1,groupToken.matches=matches,groupToken}function closeGroup(){if(openingToken=openenings.pop(),openingToken.openGroup=!1,void 0!==openingToken)if(0<openenings.length){if(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(openingToken),currentOpeningToken.isAlternator){alternator=openenings.pop();for(var mndx=0;mndx<alternator.matches.length;mndx++)alternator.matches[mndx].isGroup=!1,alternator.matches[mndx].alternatorGroup=!1;0<openenings.length?(currentOpeningToken=openenings[openenings.length-1],currentOpeningToken.matches.push(alternator)):currentToken.matches.push(alternator)}}else currentToken.matches.push(openingToken);else defaultCase()}function groupQuantifier(matches){var lastMatch=matches.pop();return lastMatch.isQuantifier&&(lastMatch=groupify([matches.pop(),lastMatch])),lastMatch}for(regexMask&&(opts.optionalmarker[0]=void 0,opts.optionalmarker[1]=void 0);match=regexMask?regexTokenizer.exec(mask):tokenizer.exec(mask);){if(m=match[0],regexMask)switch(m.charAt(0)){case"?":m="{0,1}";break;case"+":case"*":m="{"+m+"}";break;case"|":if(0===openenings.length){var altRegexGroup=groupify(currentToken.matches);altRegexGroup.openGroup=!0,openenings.push(altRegexGroup),currentToken.matches=[],closeRegexGroup=!0}break}if(escaped)defaultCase();else switch(m.charAt(0)){case"(?=":break;case"(?!":break;case"(?<=":break;case"(?<!":break;case opts.escapeChar:escaped=!0,regexMask&&defaultCase();break;case opts.optionalmarker[1]:case opts.groupmarker[1]:closeGroup();break;case opts.optionalmarker[0]:openenings.push(new MaskToken(!1,!0));break;case opts.groupmarker[0]:openenings.push(new MaskToken(!0));break;case opts.quantifiermarker[0]:var quantifier=new MaskToken(!1,!1,!0);m=m.replace(/[{}]/g,"");var mqj=m.split("|"),mq=mqj[0].split(","),mq0=isNaN(mq[0])?mq[0]:parseInt(mq[0]),mq1=1===mq.length?mq0:isNaN(mq[1])?mq[1]:parseInt(mq[1]);"*"!==mq0&&"+"!==mq0||(mq0="*"===mq1?0:1),quantifier.quantifier={min:mq0,max:mq1,jit:mqj[1]};var matches=0<openenings.length?openenings[openenings.length-1].matches:currentToken.matches;if(match=matches.pop(),match.isAlternator){matches.push(match),matches=match.matches;var groupToken=new MaskToken(!0),tmpMatch=matches.pop();matches.push(groupToken),matches=groupToken.matches,match=tmpMatch}match.isGroup||(match=groupify([match])),matches.push(match),matches.push(quantifier);break;case opts.alternatormarker:if(0<openenings.length){currentOpeningToken=openenings[openenings.length-1];var subToken=currentOpeningToken.matches[currentOpeningToken.matches.length-1];lastMatch=currentOpeningToken.openGroup&&(void 0===subToken.matches||!1===subToken.isGroup&&!1===subToken.isAlternator)?openenings.pop():groupQuantifier(currentOpeningToken.matches)}else lastMatch=groupQuantifier(currentToken.matches);if(lastMatch.isAlternator)openenings.push(lastMatch);else if(lastMatch.alternatorGroup?(alternator=openenings.pop(),lastMatch.alternatorGroup=!1):alternator=new MaskToken(!1,!1,!1,!0),alternator.matches.push(lastMatch),openenings.push(alternator),lastMatch.openGroup){lastMatch.openGroup=!1;var alternatorGroup=new MaskToken(!0);alternatorGroup.alternatorGroup=!0,openenings.push(alternatorGroup)}break;default:defaultCase()}}for(closeRegexGroup&&closeGroup();0<openenings.length;)openingToken=openenings.pop(),currentToken.matches.push(openingToken);return 0<currentToken.matches.length&&(verifyGroupMarker(currentToken),maskTokens.push(currentToken)),(opts.numericInput||opts.isRTL)&&reverseTokens(maskTokens[0]),maskTokens}module.exports={generateMaskSet:generateMaskSet,analyseMask:analyseMask}},function(module,exports,__webpack_require__){"use strict";__webpack_require__(7),__webpack_require__(10),__webpack_require__(11),__webpack_require__(12),module.exports=__webpack_require__(1)},function(module,exports,__webpack_require__){"use strict";var Inputmask=__webpack_require__(1);Inputmask.extendDefinitions({A:{validator:"[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",casing:"upper"},"&":{validator:"[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",casing:"upper"},"#":{validator:"[0-9A-Fa-f]",casing:"upper"}});var ipValidatorRegex=new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]");function ipValidator(chrs,maskset,pos,strict,opts){return chrs=-1<pos-1&&"."!==maskset.buffer[pos-1]?(chrs=maskset.buffer[pos-1]+chrs,-1<pos-2&&"."!==maskset.buffer[pos-2]?maskset.buffer[pos-2]+chrs:"0"+chrs):"00"+chrs,ipValidatorRegex.test(chrs)}Inputmask.extendAliases({cssunit:{regex:"[+-]?[0-9]+\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)"},url:{regex:"(https?|ftp)//.*",autoUnmask:!1},ip:{mask:"i[i[i]].j[j[j]].k[k[k]].l[l[l]]",definitions:{i:{validator:ipValidator},j:{validator:ipValidator},k:{validator:ipValidator},l:{validator:ipValidator}},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return maskedValue},inputmode:"numeric"},email:{mask:"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",greedy:!1,casing:"lower",onBeforePaste:function onBeforePaste(pastedValue,opts){return pastedValue=pastedValue.toLowerCase(),pastedValue.replace("mailto:","")},definitions:{"*":{validator:"[0-9\uff11-\uff19A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5!#$%&'*+/=?^_`{|}~-]"},"-":{validator:"[0-9A-Za-z-]"}},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return maskedValue},inputmode:"email"},mac:{mask:"##:##:##:##:##:##"},vin:{mask:"V{13}9{4}",definitions:{V:{validator:"[A-HJ-NPR-Za-hj-npr-z\\d]",casing:"upper"}},clearIncomplete:!0,autoUnmask:!0},ssn:{mask:"999-99-9999",postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict){return/^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(buffer.join(""))}}}),module.exports=Inputmask},function(module,exports,__webpack_require__){"use strict";__webpack_require__(9);var $=__webpack_require__(2),window=__webpack_require__(4),document=window.document,ua=window.navigator&&window.navigator.userAgent||"",ie=0<ua.indexOf("MSIE ")||0<ua.indexOf("Trident/"),mobile="ontouchstart"in window,iemobile=/iemobile/i.test(ua),iphone=/iphone/i.test(ua)&&!iemobile,keyCode=__webpack_require__(0);module.exports=function maskScope(actionObj){var inputmask=this,maskset=inputmask.maskset,opts=inputmask.opts,el=inputmask.el,isRTL=inputmask.isRTL||(inputmask.isRTL=opts.numericInput);function getMaskTemplate(baseOnInput,minimalPos,includeMode,noJit,clearOptionalTail){var greedy=opts.greedy;clearOptionalTail&&(opts.greedy=!1),minimalPos=minimalPos||0;var maskTemplate=[],ndxIntlzr,pos=0,test,testPos,jitRenderStatic;do{if(!0===baseOnInput&&maskset.validPositions[pos])testPos=clearOptionalTail&&!0===maskset.validPositions[pos].match.optionality&&void 0===maskset.validPositions[pos+1]&&(!0===maskset.validPositions[pos].generatedInput||maskset.validPositions[pos].input==opts.skipOptionalPartCharacter&&0<pos)?determineTestTemplate(pos,getTests(pos,ndxIntlzr,pos-1)):maskset.validPositions[pos],test=testPos.match,ndxIntlzr=testPos.locator.slice(),maskTemplate.push(!0===includeMode?testPos.input:!1===includeMode?test.nativeDef:getPlaceholder(pos,test));else{testPos=getTestTemplate(pos,ndxIntlzr,pos-1),test=testPos.match,ndxIntlzr=testPos.locator.slice();var jitMasking=!0!==noJit&&(!1!==opts.jitMasking?opts.jitMasking:test.jit);jitRenderStatic=jitRenderStatic&&test.static&&test.def!==opts.groupSeparator&&null===test.fn||maskset.validPositions[pos-1]&&test.static&&test.def!==opts.groupSeparator&&null===test.fn,jitRenderStatic||!1===jitMasking||void 0===jitMasking||"number"==typeof jitMasking&&isFinite(jitMasking)&&pos<jitMasking?maskTemplate.push(!1===includeMode?test.nativeDef:getPlaceholder(pos,test)):jitRenderStatic=!1}pos++}while((void 0===inputmask.maxLength||pos<inputmask.maxLength)&&(!0!==test.static||""!==test.def)||pos<minimalPos);return""===maskTemplate[maskTemplate.length-1]&&maskTemplate.pop(),!1===includeMode&&void 0!==maskset.maskLength||(maskset.maskLength=pos-1),opts.greedy=greedy,maskTemplate}function resetMaskSet(soft){maskset.buffer=void 0,!0!==soft&&(maskset.validPositions={},maskset.p=0)}function getLastValidPosition(closestTo,strict,validPositions){var before=-1,after=-1,valids=validPositions||maskset.validPositions;for(var posNdx in void 0===closestTo&&(closestTo=-1),valids){var psNdx=parseInt(posNdx);valids[psNdx]&&(strict||!0!==valids[psNdx].generatedInput)&&(psNdx<=closestTo&&(before=psNdx),closestTo<=psNdx&&(after=psNdx))}return-1===before||before==closestTo?after:-1==after?before:closestTo-before<after-closestTo?before:after}function getDecisionTaker(tst){var decisionTaker=tst.locator[tst.alternation];return"string"==typeof decisionTaker&&0<decisionTaker.length&&(decisionTaker=decisionTaker.split(",")[0]),void 0!==decisionTaker?decisionTaker.toString():""}function getLocator(tst,align){var locator=(null!=tst.alternation?tst.mloc[getDecisionTaker(tst)]:tst.locator).join("");if(""!==locator)for(;locator.length<align;)locator+="0";return locator}function determineTestTemplate(pos,tests){pos=0<pos?pos-1:0;for(var altTest=getTest(pos),targetLocator=getLocator(altTest),tstLocator,closest,bestMatch,ndx=0;ndx<tests.length;ndx++){var tst=tests[ndx];tstLocator=getLocator(tst,targetLocator.length);var distance=Math.abs(tstLocator-targetLocator);(void 0===closest||""!==tstLocator&&distance<closest||bestMatch&&!opts.greedy&&bestMatch.match.optionality&&"master"===bestMatch.match.newBlockMarker&&(!tst.match.optionality||!tst.match.newBlockMarker)||bestMatch&&bestMatch.match.optionalQuantifier&&!tst.match.optionalQuantifier)&&(closest=distance,bestMatch=tst)}return bestMatch}function getTestTemplate(pos,ndxIntlzr,tstPs){return maskset.validPositions[pos]||determineTestTemplate(pos,getTests(pos,ndxIntlzr?ndxIntlzr.slice():ndxIntlzr,tstPs))}function getTest(pos,tests){return maskset.validPositions[pos]?maskset.validPositions[pos]:(tests||getTests(pos))[0]}function positionCanMatchDefinition(pos,testDefinition,opts){for(var valid=!1,tests=getTests(pos),tndx=0;tndx<tests.length;tndx++){if(tests[tndx].match&&(!(tests[tndx].match.nativeDef!==testDefinition.match[opts.shiftPositions?"def":"nativeDef"]||opts.shiftPositions&&testDefinition.match.static)||tests[tndx].match.nativeDef===testDefinition.match.nativeDef)){valid=!0;break}if(tests[tndx].match&&tests[tndx].match.def===testDefinition.match.nativeDef){valid=void 0;break}}return!1===valid&&void 0!==maskset.jitOffset[pos]&&(valid=positionCanMatchDefinition(pos+maskset.jitOffset[pos],testDefinition,opts)),valid}function getTests(pos,ndxIntlzr,tstPs){var maskTokens=maskset.maskToken,testPos=ndxIntlzr?tstPs:0,ndxInitializer=ndxIntlzr?ndxIntlzr.slice():[0],matches=[],insertStop=!1,latestMatch,cacheDependency=ndxIntlzr?ndxIntlzr.join(""):"";function resolveTestFromToken(maskToken,ndxInitializer,loopNdx,quantifierRecurse){function handleMatch(match,loopNdx,quantifierRecurse){function isFirstMatch(latestMatch,tokenGroup){var firstMatch=0===$.inArray(latestMatch,tokenGroup.matches);return firstMatch||$.each(tokenGroup.matches,function(ndx,match){if(!0===match.isQuantifier?firstMatch=isFirstMatch(latestMatch,tokenGroup.matches[ndx-1]):Object.prototype.hasOwnProperty.call(match,"matches")&&(firstMatch=isFirstMatch(latestMatch,match)),firstMatch)return!1}),firstMatch}function resolveNdxInitializer(pos,alternateNdx,targetAlternation){var bestMatch,indexPos;if((maskset.tests[pos]||maskset.validPositions[pos])&&$.each(maskset.tests[pos]||[maskset.validPositions[pos]],function(ndx,lmnt){if(lmnt.mloc[alternateNdx])return bestMatch=lmnt,!1;var alternation=void 0!==targetAlternation?targetAlternation:lmnt.alternation,ndxPos=void 0!==lmnt.locator[alternation]?lmnt.locator[alternation].toString().indexOf(alternateNdx):-1;(void 0===indexPos||ndxPos<indexPos)&&-1!==ndxPos&&(bestMatch=lmnt,indexPos=ndxPos)}),bestMatch){var bestMatchAltIndex=bestMatch.locator[bestMatch.alternation],locator=bestMatch.mloc[alternateNdx]||bestMatch.mloc[bestMatchAltIndex]||bestMatch.locator;return locator.slice((void 0!==targetAlternation?targetAlternation:bestMatch.alternation)+1)}return void 0!==targetAlternation?resolveNdxInitializer(pos,alternateNdx):void 0}function isSubsetOf(source,target){function expand(pattern){for(var expanded=[],start=-1,end,i=0,l=pattern.length;i<l;i++)if("-"===pattern.charAt(i))for(end=pattern.charCodeAt(i+1);++start<end;)expanded.push(String.fromCharCode(start));else start=pattern.charCodeAt(i),expanded.push(pattern.charAt(i));return expanded.join("")}return source.match.def===target.match.nativeDef||!(!(opts.regex||source.match.fn instanceof RegExp&&target.match.fn instanceof RegExp)||!0===source.match.static||!0===target.match.static)&&-1!==expand(target.match.fn.toString().replace(/[[\]/]/g,"")).indexOf(expand(source.match.fn.toString().replace(/[[\]/]/g,"")))}function staticCanMatchDefinition(source,target){return!0===source.match.static&&!0!==target.match.static&&target.match.fn.test(source.match.def,maskset,pos,!1,opts,!1)}function setMergeLocators(targetMatch,altMatch){var alternationNdx=targetMatch.alternation,shouldMerge=void 0===altMatch||alternationNdx===altMatch.alternation&&-1===targetMatch.locator[alternationNdx].toString().indexOf(altMatch.locator[alternationNdx]);if(!shouldMerge&&alternationNdx>altMatch.alternation)for(var i=altMatch.alternation;i<alternationNdx;i++)if(targetMatch.locator[i]!==altMatch.locator[i]){alternationNdx=i,shouldMerge=!0;break}if(shouldMerge){targetMatch.mloc=targetMatch.mloc||{};var locNdx=targetMatch.locator[alternationNdx];if(void 0!==locNdx){if("string"==typeof locNdx&&(locNdx=locNdx.split(",")[0]),void 0===targetMatch.mloc[locNdx]&&(targetMatch.mloc[locNdx]=targetMatch.locator.slice()),void 0!==altMatch){for(var ndx in altMatch.mloc)"string"==typeof ndx&&(ndx=ndx.split(",")[0]),void 0===targetMatch.mloc[ndx]&&(targetMatch.mloc[ndx]=altMatch.mloc[ndx]);targetMatch.locator[alternationNdx]=Object.keys(targetMatch.mloc).join(",")}return!0}targetMatch.alternation=void 0}return!1}function isSameLevel(targetMatch,altMatch){if(targetMatch.locator.length!==altMatch.locator.length)return!1;for(var locNdx=targetMatch.alternation+1;locNdx<targetMatch.locator.length;locNdx++)if(targetMatch.locator[locNdx]!==altMatch.locator[locNdx])return!1;return!0}if(testPos>opts._maxTestPos&&void 0!==quantifierRecurse)throw"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. "+maskset.mask;if(testPos===pos&&void 0===match.matches)return matches.push({match:match,locator:loopNdx.reverse(),cd:cacheDependency,mloc:{}}),!0;if(void 0!==match.matches){if(match.isGroup&&quantifierRecurse!==match){if(match=handleMatch(maskToken.matches[$.inArray(match,maskToken.matches)+1],loopNdx,quantifierRecurse),match)return!0}else if(match.isOptional){var optionalToken=match,mtchsNdx=matches.length;if(match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse),match){if($.each(matches,function(ndx,mtch){mtchsNdx<=ndx&&(mtch.match.optionality=!0)}),latestMatch=matches[matches.length-1].match,void 0!==quantifierRecurse||!isFirstMatch(latestMatch,optionalToken))return!0;insertStop=!0,testPos=pos}}else if(match.isAlternator){var alternateToken=match,malternateMatches=[],maltMatches,currentMatches=matches.slice(),loopNdxCnt=loopNdx.length,altIndex=0<ndxInitializer.length?ndxInitializer.shift():-1;if(-1===altIndex||"string"==typeof altIndex){var currentPos=testPos,ndxInitializerClone=ndxInitializer.slice(),altIndexArr=[],amndx;if("string"==typeof altIndex)altIndexArr=altIndex.split(",");else for(amndx=0;amndx<alternateToken.matches.length;amndx++)altIndexArr.push(amndx.toString());if(void 0!==maskset.excludes[pos]){for(var altIndexArrClone=altIndexArr.slice(),i=0,exl=maskset.excludes[pos].length;i<exl;i++){var excludeSet=maskset.excludes[pos][i].toString().split(":");loopNdx.length==excludeSet[1]&&altIndexArr.splice(altIndexArr.indexOf(excludeSet[0]),1)}0===altIndexArr.length&&(delete maskset.excludes[pos],altIndexArr=altIndexArrClone)}(!0===opts.keepStatic||isFinite(parseInt(opts.keepStatic))&&currentPos>=opts.keepStatic)&&(altIndexArr=altIndexArr.slice(0,1));for(var unMatchedAlternation=!1,ndx=0;ndx<altIndexArr.length;ndx++){amndx=parseInt(altIndexArr[ndx]),matches=[],ndxInitializer="string"==typeof altIndex&&resolveNdxInitializer(testPos,amndx,loopNdxCnt)||ndxInitializerClone.slice(),alternateToken.matches[amndx]&&handleMatch(alternateToken.matches[amndx],[amndx].concat(loopNdx),quantifierRecurse)?match=!0:0===ndx&&(unMatchedAlternation=!0),maltMatches=matches.slice(),testPos=currentPos,matches=[];for(var ndx1=0;ndx1<maltMatches.length;ndx1++){var altMatch=maltMatches[ndx1],dropMatch=!1;altMatch.match.jit=altMatch.match.jit||unMatchedAlternation,altMatch.alternation=altMatch.alternation||loopNdxCnt,setMergeLocators(altMatch);for(var ndx2=0;ndx2<malternateMatches.length;ndx2++){var altMatch2=malternateMatches[ndx2];if("string"!=typeof altIndex||void 0!==altMatch.alternation&&-1!==$.inArray(altMatch.locator[altMatch.alternation].toString(),altIndexArr)){if(altMatch.match.nativeDef===altMatch2.match.nativeDef){dropMatch=!0,setMergeLocators(altMatch2,altMatch);break}if(isSubsetOf(altMatch,altMatch2)){setMergeLocators(altMatch,altMatch2)&&(dropMatch=!0,malternateMatches.splice(malternateMatches.indexOf(altMatch2),0,altMatch));break}if(isSubsetOf(altMatch2,altMatch)){setMergeLocators(altMatch2,altMatch);break}if(staticCanMatchDefinition(altMatch,altMatch2)){isSameLevel(altMatch,altMatch2)||void 0!==el.inputmask.userOptions.keepStatic?setMergeLocators(altMatch,altMatch2)&&(dropMatch=!0,malternateMatches.splice(malternateMatches.indexOf(altMatch2),0,altMatch)):opts.keepStatic=!0;break}}}dropMatch||malternateMatches.push(altMatch)}}matches=currentMatches.concat(malternateMatches),testPos=pos,insertStop=0<matches.length,match=0<malternateMatches.length,ndxInitializer=ndxInitializerClone.slice()}else match=handleMatch(alternateToken.matches[altIndex]||maskToken.matches[altIndex],[altIndex].concat(loopNdx),quantifierRecurse);if(match)return!0}else if(match.isQuantifier&&quantifierRecurse!==maskToken.matches[$.inArray(match,maskToken.matches)-1])for(var qt=match,qndx=0<ndxInitializer.length?ndxInitializer.shift():0;qndx<(isNaN(qt.quantifier.max)?qndx+1:qt.quantifier.max)&&testPos<=pos;qndx++){var tokenGroup=maskToken.matches[$.inArray(qt,maskToken.matches)-1];if(match=handleMatch(tokenGroup,[qndx].concat(loopNdx),tokenGroup),match){if(latestMatch=matches[matches.length-1].match,latestMatch.optionalQuantifier=qndx>=qt.quantifier.min,latestMatch.jit=(qndx||1)*tokenGroup.matches.indexOf(latestMatch)>=qt.quantifier.jit,latestMatch.optionalQuantifier&&isFirstMatch(latestMatch,tokenGroup)){insertStop=!0,testPos=pos;break}return latestMatch.jit&&(maskset.jitOffset[pos]=tokenGroup.matches.length-tokenGroup.matches.indexOf(latestMatch)),!0}}else if(match=resolveTestFromToken(match,ndxInitializer,loopNdx,quantifierRecurse),match)return!0}else testPos++}for(var tndx=0<ndxInitializer.length?ndxInitializer.shift():0;tndx<maskToken.matches.length;tndx++)if(!0!==maskToken.matches[tndx].isQuantifier){var match=handleMatch(maskToken.matches[tndx],[tndx].concat(loopNdx),quantifierRecurse);if(match&&testPos===pos)return match;if(pos<testPos)break}}function mergeLocators(pos,tests){var locator=[];return $.isArray(tests)||(tests=[tests]),0<tests.length&&(void 0===tests[0].alternation||!0===opts.keepStatic?(locator=determineTestTemplate(pos,tests.slice()).locator.slice(),0===locator.length&&(locator=tests[0].locator.slice())):$.each(tests,function(ndx,tst){if(""!==tst.def)if(0===locator.length)locator=tst.locator.slice();else for(var i=0;i<locator.length;i++)tst.locator[i]&&-1===locator[i].toString().indexOf(tst.locator[i])&&(locator[i]+=","+tst.locator[i])})),locator}if(-1<pos&&(void 0===inputmask.maxLength||pos<inputmask.maxLength)){if(void 0===ndxIntlzr){for(var previousPos=pos-1,test;void 0===(test=maskset.validPositions[previousPos]||maskset.tests[previousPos])&&-1<previousPos;)previousPos--;void 0!==test&&-1<previousPos&&(ndxInitializer=mergeLocators(previousPos,test),cacheDependency=ndxInitializer.join(""),testPos=previousPos)}if(maskset.tests[pos]&&maskset.tests[pos][0].cd===cacheDependency)return maskset.tests[pos];for(var mtndx=ndxInitializer.shift();mtndx<maskTokens.length;mtndx++){var match=resolveTestFromToken(maskTokens[mtndx],ndxInitializer,[mtndx]);if(match&&testPos===pos||pos<testPos)break}}return 0!==matches.length&&!insertStop||matches.push({match:{fn:null,static:!0,optionality:!1,casing:null,def:"",placeholder:""},locator:[],mloc:{},cd:cacheDependency}),void 0!==ndxIntlzr&&maskset.tests[pos]?$.extend(!0,[],matches):(maskset.tests[pos]=$.extend(!0,[],matches),maskset.tests[pos])}function getBufferTemplate(){return void 0===maskset._buffer&&(maskset._buffer=getMaskTemplate(!1,1),void 0===maskset.buffer&&(maskset.buffer=maskset._buffer.slice())),maskset._buffer}function getBuffer(noCache){return void 0!==maskset.buffer&&!0!==noCache||(maskset.buffer=getMaskTemplate(!0,getLastValidPosition(),!0),void 0===maskset._buffer&&(maskset._buffer=maskset.buffer.slice())),maskset.buffer}function refreshFromBuffer(start,end,buffer){var i,p,skipOptionalPartCharacter=opts.skipOptionalPartCharacter,bffr=isRTL?buffer.slice().reverse():buffer;if(opts.skipOptionalPartCharacter="",!0===start)resetMaskSet(),maskset.tests={},start=0,end=buffer.length,p=determineNewCaretPosition({begin:0,end:0},!1).begin;else{for(i=start;i<end;i++)delete maskset.validPositions[i];p=start}var keypress=new $.Event("keypress");for(i=start;i<end;i++){keypress.which=bffr[i].toString().charCodeAt(0),inputmask.ignorable=!1;var valResult=EventHandlers.keypressEvent.call(el,keypress,!0,!1,!1,p);!1!==valResult&&(p=valResult.forwardPosition)}opts.skipOptionalPartCharacter=skipOptionalPartCharacter}function casing(elem,test,pos){switch(opts.casing||test.casing){case"upper":elem=elem.toUpperCase();break;case"lower":elem=elem.toLowerCase();break;case"title":var posBefore=maskset.validPositions[pos-1];elem=0===pos||posBefore&&posBefore.input===String.fromCharCode(keyCode.SPACE)?elem.toUpperCase():elem.toLowerCase();break;default:if($.isFunction(opts.casing)){var args=Array.prototype.slice.call(arguments);args.push(maskset.validPositions),elem=opts.casing.apply(this,args)}}return elem}function checkAlternationMatch(altArr1,altArr2,na){for(var altArrC=opts.greedy?altArr2:altArr2.slice(0,1),isMatch=!1,naArr=void 0!==na?na.split(","):[],naNdx,i=0;i<naArr.length;i++)-1!==(naNdx=altArr1.indexOf(naArr[i]))&&altArr1.splice(naNdx,1);for(var alndx=0;alndx<altArr1.length;alndx++)if(-1!==$.inArray(altArr1[alndx],altArrC)){isMatch=!0;break}return isMatch}function alternate(maskPos,c,strict,fromIsValid,rAltPos,selection){var validPsClone=$.extend(!0,{},maskset.validPositions),tstClone=$.extend(!0,{},maskset.tests),lastAlt,alternation,isValidRslt=!1,returnRslt=!1,altPos,prevAltPos,i,validPos,decisionPos,lAltPos=void 0!==rAltPos?rAltPos:getLastValidPosition(),nextPos,input,begin,end;if(selection&&(begin=selection.begin,end=selection.end,selection.begin>selection.end&&(begin=selection.end,end=selection.begin)),-1===lAltPos&&void 0===rAltPos)lastAlt=0,prevAltPos=getTest(lastAlt),alternation=prevAltPos.alternation;else for(;0<=lAltPos;lAltPos--)if(altPos=maskset.validPositions[lAltPos],altPos&&void 0!==altPos.alternation){if(prevAltPos&&prevAltPos.locator[altPos.alternation]!==altPos.locator[altPos.alternation])break;lastAlt=lAltPos,alternation=maskset.validPositions[lastAlt].alternation,prevAltPos=altPos}if(void 0!==alternation){decisionPos=parseInt(lastAlt),maskset.excludes[decisionPos]=maskset.excludes[decisionPos]||[],!0!==maskPos&&maskset.excludes[decisionPos].push(getDecisionTaker(prevAltPos)+":"+prevAltPos.alternation);var validInputs=[],resultPos=-1;for(i=decisionPos;i<getLastValidPosition(void 0,!0)+1;i++)-1===resultPos&&maskPos<=i&&void 0!==c&&(validInputs.push(c),resultPos=validInputs.length-1),validPos=maskset.validPositions[i],validPos&&!0!==validPos.generatedInput&&(void 0===selection||i<begin||end<=i)&&validInputs.push(validPos.input),delete maskset.validPositions[i];for(-1===resultPos&&void 0!==c&&(validInputs.push(c),resultPos=validInputs.length-1);void 0!==maskset.excludes[decisionPos]&&maskset.excludes[decisionPos].length<10;){for(maskset.tests={},resetMaskSet(!0),isValidRslt=!0,i=0;i<validInputs.length&&(nextPos=isValidRslt.caret||getLastValidPosition(void 0,!0)+1,input=validInputs[i],isValidRslt=isValid(nextPos,input,!1,fromIsValid,!0));i++)i===resultPos&&(returnRslt=isValidRslt),1==maskPos&&isValidRslt&&(returnRslt={caretPos:i});if(isValidRslt)break;if(resetMaskSet(),prevAltPos=getTest(decisionPos),maskset.validPositions=$.extend(!0,{},validPsClone),maskset.tests=$.extend(!0,{},tstClone),!maskset.excludes[decisionPos]){returnRslt=alternate(maskPos,c,strict,fromIsValid,decisionPos-1,selection);break}var decisionTaker=getDecisionTaker(prevAltPos);if(-1!==maskset.excludes[decisionPos].indexOf(decisionTaker+":"+prevAltPos.alternation)){returnRslt=alternate(maskPos,c,strict,fromIsValid,decisionPos-1,selection);break}for(maskset.excludes[decisionPos].push(decisionTaker+":"+prevAltPos.alternation),i=decisionPos;i<getLastValidPosition(void 0,!0)+1;i++)delete maskset.validPositions[i]}}return returnRslt&&!1===opts.keepStatic||delete maskset.excludes[decisionPos],returnRslt}function isValid(pos,c,strict,fromIsValid,fromAlternate,validateOnly){function isSelection(posObj){return isRTL?1<posObj.begin-posObj.end||posObj.begin-posObj.end==1:1<posObj.end-posObj.begin||posObj.end-posObj.begin==1}strict=!0===strict;var maskPos=pos;function processCommandObject(commandObj){if(void 0!==commandObj){if(void 0!==commandObj.remove&&($.isArray(commandObj.remove)||(commandObj.remove=[commandObj.remove]),$.each(commandObj.remove.sort(function(a,b){return b.pos-a.pos}),function(ndx,lmnt){revalidateMask({begin:lmnt,end:lmnt+1})}),commandObj.remove=void 0),void 0!==commandObj.insert&&($.isArray(commandObj.insert)||(commandObj.insert=[commandObj.insert]),$.each(commandObj.insert.sort(function(a,b){return a.pos-b.pos}),function(ndx,lmnt){""!==lmnt.c&&isValid(lmnt.pos,lmnt.c,void 0===lmnt.strict||lmnt.strict,void 0!==lmnt.fromIsValid?lmnt.fromIsValid:fromIsValid)}),commandObj.insert=void 0),commandObj.refreshFromBuffer&&commandObj.buffer){var refresh=commandObj.refreshFromBuffer;refreshFromBuffer(!0===refresh?refresh:refresh.start,refresh.end,commandObj.buffer),commandObj.refreshFromBuffer=void 0}void 0!==commandObj.rewritePosition&&(maskPos=commandObj.rewritePosition,commandObj=!0)}return commandObj}function _isValid(position,c,strict){var rslt=!1;return $.each(getTests(position),function(ndx,tst){var test=tst.match;if(getBuffer(!0),rslt=null!=test.fn?test.fn.test(c,maskset,position,strict,opts,isSelection(pos)):(c===test.def||c===opts.skipOptionalPartCharacter)&&""!==test.def&&{c:getPlaceholder(position,test,!0)||test.def,pos:position},!1!==rslt){var elem=void 0!==rslt.c?rslt.c:c,validatedPos=position;return elem=elem===opts.skipOptionalPartCharacter&&!0===test.static?getPlaceholder(position,test,!0)||test.def:elem,rslt=processCommandObject(rslt),!0!==rslt&&void 0!==rslt.pos&&rslt.pos!==position&&(validatedPos=rslt.pos),!0!==rslt&&void 0===rslt.pos&&void 0===rslt.c?!1:(!1===revalidateMask(pos,$.extend({},tst,{input:casing(elem,test,validatedPos)}),fromIsValid,validatedPos)&&(rslt=!1),!1)}}),rslt}void 0!==pos.begin&&(maskPos=isRTL?pos.end:pos.begin);var result=!0,positionsClone=$.extend(!0,{},maskset.validPositions);if(!1===opts.keepStatic&&void 0!==maskset.excludes[maskPos]&&!0!==fromAlternate&&!0!==fromIsValid)for(var i=maskPos;i<(isRTL?pos.begin:pos.end);i++)void 0!==maskset.excludes[i]&&(maskset.excludes[i]=void 0,delete maskset.tests[i]);if($.isFunction(opts.preValidation)&&!0!==fromIsValid&&!0!==validateOnly&&(result=opts.preValidation.call(el,getBuffer(),maskPos,c,isSelection(pos),opts,maskset,pos,strict||fromAlternate),result=processCommandObject(result)),!0===result){if(void 0===inputmask.maxLength||maskPos<inputmask.maxLength){if(result=_isValid(maskPos,c,strict),(!strict||!0===fromIsValid)&&!1===result&&!0!==validateOnly){var currentPosValid=maskset.validPositions[maskPos];if(!currentPosValid||!0!==currentPosValid.match.static||currentPosValid.match.def!==c&&c!==opts.skipOptionalPartCharacter){if(opts.insertMode||void 0===maskset.validPositions[seekNext(maskPos)]||pos.end>maskPos){var skip=!1;if(maskset.jitOffset[maskPos]&&void 0===maskset.validPositions[seekNext(maskPos)]&&(result=isValid(maskPos+maskset.jitOffset[maskPos],c,!0),!1!==result&&(!0!==fromAlternate&&(result.caret=maskPos),skip=!0)),pos.end>maskPos&&(maskset.validPositions[maskPos]=void 0),!skip&&!isMask(maskPos,opts.keepStatic))for(var nPos=maskPos+1,snPos=seekNext(maskPos);nPos<=snPos;nPos++)if(result=_isValid(nPos,c,strict),!1!==result){result=trackbackPositions(maskPos,void 0!==result.pos?result.pos:nPos)||result,maskPos=nPos;break}}}else result={caret:seekNext(maskPos)}}}else result=!1;!1!==result||!opts.keepStatic||!isComplete(getBuffer())&&0!==maskPos||strict||!0===fromAlternate?isSelection(pos)&&maskset.tests[maskPos]&&1<maskset.tests[maskPos].length&&opts.keepStatic&&!strict&&!0!==fromAlternate&&(result=alternate(!0)):result=alternate(maskPos,c,strict,fromIsValid,void 0,pos),!0===result&&(result={pos:maskPos})}if($.isFunction(opts.postValidation)&&!0!==fromIsValid&&!0!==validateOnly){var postResult=opts.postValidation.call(el,getBuffer(!0),void 0!==pos.begin?isRTL?pos.end:pos.begin:pos,c,result,opts,maskset,strict);void 0!==postResult&&(result=!0===postResult?result:postResult)}result&&void 0===result.pos&&(result.pos=maskPos),!1===result||!0===validateOnly?(resetMaskSet(!0),maskset.validPositions=$.extend(!0,{},positionsClone)):trackbackPositions(void 0,maskPos,!0);var endResult=processCommandObject(result);return endResult}function trackbackPositions(originalPos,newPos,fillOnly){if(void 0===originalPos)for(originalPos=newPos-1;0<originalPos&&!maskset.validPositions[originalPos];originalPos--);for(var ps=originalPos;ps<newPos;ps++)if(void 0===maskset.validPositions[ps]&&!isMask(ps,!0)){var vp=0==ps?getTest(ps):maskset.validPositions[ps-1];if(vp){var tests=getTests(ps).slice();""===tests[tests.length-1].match.def&&tests.pop();var bestMatch=determineTestTemplate(ps,tests),np;if(bestMatch&&(!0!==bestMatch.match.jit||"master"===bestMatch.match.newBlockMarker&&(np=maskset.validPositions[ps+1])&&!0===np.match.optionalQuantifier)&&(bestMatch=$.extend({},bestMatch,{input:getPlaceholder(ps,bestMatch.match,!0)||bestMatch.match.def}),bestMatch.generatedInput=!0,revalidateMask(ps,bestMatch,!0),!0!==fillOnly)){var cvpInput=maskset.validPositions[newPos].input;return maskset.validPositions[newPos]=void 0,isValid(newPos,cvpInput,!0,!0)}}}}function revalidateMask(pos,validTest,fromIsValid,validatedPos){function IsEnclosedStatic(pos,valids,selection){var posMatch=valids[pos];if(void 0===posMatch||!0!==posMatch.match.static||!0===posMatch.match.optionality||void 0!==valids[0]&&void 0!==valids[0].alternation)return!1;var prevMatch=selection.begin<=pos-1?valids[pos-1]&&!0===valids[pos-1].match.static&&valids[pos-1]:valids[pos-1],nextMatch=selection.end>pos+1?valids[pos+1]&&!0===valids[pos+1].match.static&&valids[pos+1]:valids[pos+1];return prevMatch&&nextMatch}var offset=0,begin=void 0!==pos.begin?pos.begin:pos,end=void 0!==pos.end?pos.end:pos;if(pos.begin>pos.end&&(begin=pos.end,end=pos.begin),validatedPos=void 0!==validatedPos?validatedPos:begin,begin!==end||opts.insertMode&&void 0!==maskset.validPositions[validatedPos]&&void 0===fromIsValid||void 0===validTest){var positionsClone=$.extend(!0,{},maskset.validPositions),lvp=getLastValidPosition(void 0,!0),i;for(maskset.p=begin,i=lvp;begin<=i;i--)delete maskset.validPositions[i],void 0===validTest&&delete maskset.tests[i+1];var valid=!0,j=validatedPos,posMatch=j,t,canMatch;for(validTest&&(maskset.validPositions[validatedPos]=$.extend(!0,{},validTest),posMatch++,j++),i=validTest?end:end-1;i<=lvp;i++){if(void 0!==(t=positionsClone[i])&&!0!==t.generatedInput&&(end<=i||begin<=i&&IsEnclosedStatic(i,positionsClone,{begin:begin,end:end}))){for(;""!==getTest(posMatch).match.def;){if(!1!==(canMatch=positionCanMatchDefinition(posMatch,t,opts))||"+"===t.match.def){"+"===t.match.def&&getBuffer(!0);var result=isValid(posMatch,t.input,"+"!==t.match.def,"+"!==t.match.def);if(valid=!1!==result,j=(result.pos||posMatch)+1,!valid&&canMatch)break}else valid=!1;if(valid){void 0===validTest&&t.match.static&&i===pos.begin&&offset++;break}if(!valid&&posMatch>maskset.maskLength)break;posMatch++}""==getTest(posMatch).match.def&&(valid=!1),posMatch=j}if(!valid)break}if(!valid)return maskset.validPositions=$.extend(!0,{},positionsClone),resetMaskSet(!0),!1}else validTest&&getTest(validatedPos).match.cd===validTest.match.cd&&(maskset.validPositions[validatedPos]=$.extend(!0,{},validTest));return resetMaskSet(!0),offset}function isMask(pos,strict,fuzzy){var test=getTestTemplate(pos).match;if(""===test.def&&(test=getTest(pos).match),!0!==test.static)return test.fn;if(!0===fuzzy&&void 0!==maskset.validPositions[pos]&&!0!==maskset.validPositions[pos].generatedInput)return!0;if(!0!==strict&&-1<pos){if(fuzzy){var tests=getTests(pos);return tests.length>1+(""===tests[tests.length-1].match.def?1:0)}var testTemplate=determineTestTemplate(pos,getTests(pos)),testPlaceHolder=getPlaceholder(pos,testTemplate.match);return testTemplate.match.def!==testPlaceHolder}return!1}function seekNext(pos,newBlock,fuzzy){void 0===fuzzy&&(fuzzy=!0);for(var position=pos+1;""!==getTest(position).match.def&&(!0===newBlock&&(!0!==getTest(position).match.newBlockMarker||!isMask(position,void 0,!0))||!0!==newBlock&&!isMask(position,void 0,fuzzy));)position++;return position}function seekPrevious(pos,newBlock){var position=pos,tests;if(position<=0)return 0;for(;0<--position&&(!0===newBlock&&!0!==getTest(position).match.newBlockMarker||!0!==newBlock&&!isMask(position,void 0,!0)&&(tests=getTests(position),tests.length<2||2===tests.length&&""===tests[1].match.def)););return position}function writeBuffer(input,buffer,caretPos,event,triggerEvents){if(event&&$.isFunction(opts.onBeforeWrite)){var result=opts.onBeforeWrite.call(inputmask,event,buffer,caretPos,opts);if(result){if(result.refreshFromBuffer){var refresh=result.refreshFromBuffer;refreshFromBuffer(!0===refresh?refresh:refresh.start,refresh.end,result.buffer||buffer),buffer=getBuffer(!0)}void 0!==caretPos&&(caretPos=void 0!==result.caret?result.caret:caretPos)}}if(void 0!==input&&(input.inputmask._valueSet(buffer.join("")),void 0===caretPos||void 0!==event&&"blur"===event.type||caret(input,caretPos,void 0,void 0,void 0!==event&&"keydown"===event.type&&(event.keyCode===keyCode.DELETE||event.keyCode===keyCode.BACKSPACE)),!0===triggerEvents)){var $input=$(input),nptVal=input.inputmask._valueGet();input.inputmask.skipInputEvent=!0,$input.trigger("input"),setTimeout(function(){nptVal===getBufferTemplate().join("")?$input.trigger("cleared"):!0===isComplete(buffer)&&$input.trigger("complete")},0)}}function getPlaceholder(pos,test,returnPL){if(test=test||getTest(pos).match,void 0!==test.placeholder||!0===returnPL)return $.isFunction(test.placeholder)?test.placeholder(opts):test.placeholder;if(!0!==test.static)return opts.placeholder.charAt(pos%opts.placeholder.length);if(-1<pos&&void 0===maskset.validPositions[pos]){var tests=getTests(pos),staticAlternations=[],prevTest;if(tests.length>1+(""===tests[tests.length-1].match.def?1:0))for(var i=0;i<tests.length;i++)if(""!==tests[i].match.def&&!0!==tests[i].match.optionality&&!0!==tests[i].match.optionalQuantifier&&(!0===tests[i].match.static||void 0===prevTest||!1!==tests[i].match.fn.test(prevTest.match.def,maskset,pos,!0,opts))&&(staticAlternations.push(tests[i]),!0===tests[i].match.static&&(prevTest=tests[i]),1<staticAlternations.length&&/[0-9a-bA-Z]/.test(staticAlternations[0].match.def)))return opts.placeholder.charAt(pos%opts.placeholder.length)}return test.def}function HandleNativePlaceholder(npt,value){if(ie){if(npt.inputmask._valueGet()!==value&&(npt.placeholder!==value||""===npt.placeholder)){var buffer=getBuffer().slice(),nptValue=npt.inputmask._valueGet();if(nptValue!==value){var lvp=getLastValidPosition();-1===lvp&&nptValue===getBufferTemplate().join("")?buffer=[]:-1!==lvp&&clearOptionalTail(buffer),writeBuffer(npt,buffer)}}}else npt.placeholder!==value&&(npt.placeholder=value,""===npt.placeholder&&npt.removeAttribute("placeholder"))}function determineNewCaretPosition(selectedCaret,tabbed){function doRadixFocus(clickPos){if(""!==opts.radixPoint&&0!==opts.digits){var vps=maskset.validPositions;if(void 0===vps[clickPos]||vps[clickPos].input===getPlaceholder(clickPos)){if(clickPos<seekNext(-1))return!0;var radixPos=$.inArray(opts.radixPoint,getBuffer());if(-1!==radixPos){for(var vp in vps)if(vps[vp]&&radixPos<vp&&vps[vp].input!==getPlaceholder(vp))return!1;return!0}}}return!1}if(tabbed&&(isRTL?selectedCaret.end=selectedCaret.begin:selectedCaret.begin=selectedCaret.end),selectedCaret.begin===selectedCaret.end){switch(opts.positionCaretOnClick){case"none":break;case"select":selectedCaret={begin:0,end:getBuffer().length};break;case"ignore":selectedCaret.end=selectedCaret.begin=seekNext(getLastValidPosition());break;case"radixFocus":if(doRadixFocus(selectedCaret.begin)){var radixPos=getBuffer().join("").indexOf(opts.radixPoint);selectedCaret.end=selectedCaret.begin=opts.numericInput?seekNext(radixPos):radixPos;break}default:var clickPosition=selectedCaret.begin,lvclickPosition=getLastValidPosition(clickPosition,!0),lastPosition=seekNext(-1!==lvclickPosition||isMask(0)?lvclickPosition:0);if(clickPosition<lastPosition)selectedCaret.end=selectedCaret.begin=isMask(clickPosition,!0)||isMask(clickPosition-1,!0)?clickPosition:seekNext(clickPosition);else{var lvp=maskset.validPositions[lvclickPosition],tt=getTestTemplate(lastPosition,lvp?lvp.match.locator:void 0,lvp),placeholder=getPlaceholder(lastPosition,tt.match);if(""!==placeholder&&getBuffer()[lastPosition]!==placeholder&&!0!==tt.match.optionalQuantifier&&!0!==tt.match.newBlockMarker||!isMask(lastPosition,opts.keepStatic)&&tt.match.def===placeholder){var newPos=seekNext(lastPosition);(newPos<=clickPosition||clickPosition===lastPosition)&&(lastPosition=newPos)}selectedCaret.end=selectedCaret.begin=lastPosition}}return selectedCaret}}var EventRuler={on:function on(input,eventName,eventHandler){var ev=function ev(e){e.originalEvent&&(e=e.originalEvent||e,arguments[0]=e);var that=this,args,inputmask=that.inputmask;if(void 0===inputmask&&"FORM"!==this.nodeName){var imOpts=$.data(that,"_inputmask_opts");imOpts?new Inputmask(imOpts).mask(that):EventRuler.off(that)}else{if("setvalue"===e.type||"FORM"===this.nodeName||!(that.disabled||that.readOnly&&!("keydown"===e.type&&e.ctrlKey&&67===e.keyCode||!1===opts.tabThrough&&e.keyCode===keyCode.TAB))){switch(e.type){case"input":if(!0===inputmask.skipInputEvent||e.inputType&&"insertCompositionText"===e.inputType)return inputmask.skipInputEvent=!1,e.preventDefault();break;case"keydown":inputmask.skipKeyPressEvent=!1,inputmask.skipInputEvent=!1;break;case"keypress":if(!0===inputmask.skipKeyPressEvent)return e.preventDefault();inputmask.skipKeyPressEvent=!0;break;case"click":case"focus":return inputmask.validationEvent?(inputmask.validationEvent=!1,input.blur(),HandleNativePlaceholder(input,(isRTL?getBufferTemplate().slice().reverse():getBufferTemplate()).join("")),setTimeout(function(){input.focus()},3e3)):(args=arguments,setTimeout(function(){input.inputmask&&eventHandler.apply(that,args)},0)),!1}var returnVal=eventHandler.apply(that,arguments);return!1===returnVal&&(e.preventDefault(),e.stopPropagation()),returnVal}e.preventDefault()}};input.inputmask.events[eventName]=input.inputmask.events[eventName]||[],input.inputmask.events[eventName].push(ev),-1!==$.inArray(eventName,["submit","reset"])?null!==input.form&&$(input.form).on(eventName,ev):$(input).on(eventName,ev)},off:function off(input,event){var events;input.inputmask&&input.inputmask.events&&(event?(events=[],events[event]=input.inputmask.events[event]):events=input.inputmask.events,$.each(events,function(eventName,evArr){for(;0<evArr.length;){var ev=evArr.pop();-1!==$.inArray(eventName,["submit","reset"])?null!==input.form&&$(input.form).off(eventName,ev):$(input).off(eventName,ev)}delete input.inputmask.events[eventName]}))}},EventHandlers={keydownEvent:function keydownEvent(e){var input=this,$input=$(input),k=e.keyCode,pos=caret(input),kdResult=opts.onKeyDown.call(this,e,getBuffer(),pos,opts);if(void 0!==kdResult)return kdResult;if(k===keyCode.BACKSPACE||k===keyCode.DELETE||iphone&&k===keyCode.BACKSPACE_SAFARI||e.ctrlKey&&k===keyCode.X&&!("oncut"in input))e.preventDefault(),handleRemove(input,k,pos),writeBuffer(input,getBuffer(!0),maskset.p,e,input.inputmask._valueGet()!==getBuffer().join(""));else if(k===keyCode.END||k===keyCode.PAGE_DOWN){e.preventDefault();var caretPos=seekNext(getLastValidPosition());caret(input,e.shiftKey?pos.begin:caretPos,caretPos,!0)}else k===keyCode.HOME&&!e.shiftKey||k===keyCode.PAGE_UP?(e.preventDefault(),caret(input,0,e.shiftKey?pos.begin:0,!0)):(opts.undoOnEscape&&k===keyCode.ESCAPE||90===k&&e.ctrlKey)&&!0!==e.altKey?(checkVal(input,!0,!1,inputmask.undoValue.split("")),$input.trigger("click")):!0===opts.tabThrough&&k===keyCode.TAB?(!0===e.shiftKey?(!0===getTest(pos.begin).match.static&&(pos.begin=seekNext(pos.begin)),pos.end=seekPrevious(pos.begin,!0),pos.begin=seekPrevious(pos.end,!0)):(pos.begin=seekNext(pos.begin,!0),pos.end=seekNext(pos.begin,!0),pos.end<maskset.maskLength&&pos.end--),pos.begin<maskset.maskLength&&(e.preventDefault(),caret(input,pos.begin,pos.end))):e.shiftKey||opts.insertModeVisual&&!1===opts.insertMode&&(k===keyCode.RIGHT?setTimeout(function(){var caretPos=caret(input);caret(input,caretPos.begin)},0):k===keyCode.LEFT&&setTimeout(function(){var caretPos_begin=translatePosition(input.inputmask.caretPos.begin),caretPos_end=translatePosition(input.inputmask.caretPos.end);caret(input,isRTL?caretPos_begin+(caretPos_begin===maskset.maskLength?0:1):caretPos_begin-(0===caretPos_begin?0:1))},0));inputmask.ignorable=-1!==$.inArray(k,opts.ignorables)},keypressEvent:function keypressEvent(e,checkval,writeOut,strict,ndx){var input=this,$input=$(input),k=e.which||e.charCode||e.keyCode;if(!(!0===checkval||e.ctrlKey&&e.altKey)&&(e.ctrlKey||e.metaKey||inputmask.ignorable))return k===keyCode.ENTER&&inputmask.undoValue!==getBuffer().join("")&&(inputmask.undoValue=getBuffer().join(""),setTimeout(function(){$input.trigger("change")},0)),inputmask.skipInputEvent=!0,!0;if(k){44!==k&&46!==k||3!==e.location||""===opts.radixPoint||(k=opts.radixPoint.charCodeAt(0));var pos=checkval?{begin:ndx,end:ndx}:caret(input),forwardPosition,c=String.fromCharCode(k);maskset.writeOutBuffer=!0;var valResult=isValid(pos,c,strict);if(!1!==valResult&&(resetMaskSet(!0),forwardPosition=void 0!==valResult.caret?valResult.caret:seekNext(valResult.pos.begin?valResult.pos.begin:valResult.pos),maskset.p=forwardPosition),forwardPosition=opts.numericInput&&void 0===valResult.caret?seekPrevious(forwardPosition):forwardPosition,!1!==writeOut&&(setTimeout(function(){opts.onKeyValidation.call(input,k,valResult)},0),maskset.writeOutBuffer&&!1!==valResult)){var buffer=getBuffer();writeBuffer(input,buffer,forwardPosition,e,!0!==checkval)}if(e.preventDefault(),checkval)return!1!==valResult&&(valResult.forwardPosition=forwardPosition),valResult}},pasteEvent:function pasteEvent(e){var input=this,inputValue=this.inputmask._valueGet(!0),caretPos=caret(this),tempValue;isRTL&&(tempValue=caretPos.end,caretPos.end=caretPos.begin,caretPos.begin=tempValue);var valueBeforeCaret=inputValue.substr(0,caretPos.begin),valueAfterCaret=inputValue.substr(caretPos.end,inputValue.length);if(valueBeforeCaret==(isRTL?getBufferTemplate().slice().reverse():getBufferTemplate()).slice(0,caretPos.begin).join("")&&(valueBeforeCaret=""),valueAfterCaret==(isRTL?getBufferTemplate().slice().reverse():getBufferTemplate()).slice(caretPos.end).join("")&&(valueAfterCaret=""),window.clipboardData&&window.clipboardData.getData)inputValue=valueBeforeCaret+window.clipboardData.getData("Text")+valueAfterCaret;else{if(!e.clipboardData||!e.clipboardData.getData)return!0;inputValue=valueBeforeCaret+e.clipboardData.getData("text/plain")+valueAfterCaret}var pasteValue=inputValue;if($.isFunction(opts.onBeforePaste)){if(pasteValue=opts.onBeforePaste.call(inputmask,inputValue,opts),!1===pasteValue)return e.preventDefault();pasteValue=pasteValue||inputValue}return checkVal(this,!0,!1,pasteValue.toString().split(""),e),e.preventDefault()},inputFallBackEvent:function inputFallBackEvent(e){function ieMobileHandler(input,inputValue,caretPos){if(iemobile){var inputChar=inputValue.replace(getBuffer().join(""),"");if(1===inputChar.length){var iv=inputValue.split("");iv.splice(caretPos.begin,0,inputChar),inputValue=iv.join("")}}return inputValue}function analyseChanges(inputValue,buffer,caretPos){for(var frontPart=inputValue.substr(0,caretPos.begin).split(""),backPart=inputValue.substr(caretPos.begin).split(""),frontBufferPart=buffer.substr(0,caretPos.begin).split(""),backBufferPart=buffer.substr(caretPos.begin).split(""),fpl=frontPart.length>=frontBufferPart.length?frontPart.length:frontBufferPart.length,bpl=backPart.length>=backBufferPart.length?backPart.length:backBufferPart.length,bl,i,action="",data=[],marker="~",placeholder;frontPart.length<fpl;)frontPart.push("~");for(;frontBufferPart.length<fpl;)frontBufferPart.push("~");for(;backPart.length<bpl;)backPart.unshift("~");for(;backBufferPart.length<bpl;)backBufferPart.unshift("~");var newBuffer=frontPart.concat(backPart),oldBuffer=frontBufferPart.concat(backBufferPart);for(i=0,bl=newBuffer.length;i<bl;i++)switch(placeholder=getPlaceholder(translatePosition(i)),action){case"insertText":oldBuffer[i-1]===newBuffer[i]&&caretPos.begin==newBuffer.length-1&&data.push(newBuffer[i]),i=bl;break;case"insertReplacementText":"~"===newBuffer[i]?caretPos.end++:i=bl;break;case"deleteContentBackward":"~"===newBuffer[i]?caretPos.end++:i=bl;break;default:newBuffer[i]!==oldBuffer[i]&&("~"!==newBuffer[i+1]&&newBuffer[i+1]!==placeholder&&void 0!==newBuffer[i+1]||(oldBuffer[i]!==placeholder||"~"!==oldBuffer[i+1])&&"~"!==oldBuffer[i]?"~"===oldBuffer[i+1]&&oldBuffer[i]===newBuffer[i+1]?(action="insertText",data.push(newBuffer[i]),caretPos.begin--,caretPos.end--):newBuffer[i]!==placeholder&&"~"!==newBuffer[i]&&("~"===newBuffer[i+1]||oldBuffer[i]!==newBuffer[i]&&oldBuffer[i+1]===newBuffer[i+1])?(action="insertReplacementText",data.push(newBuffer[i]),caretPos.begin--):"~"===newBuffer[i]?(action="deleteContentBackward",!isMask(translatePosition(i),!0)&&oldBuffer[i]!==opts.radixPoint||caretPos.end++):i=bl:(action="insertText",data.push(newBuffer[i]),caretPos.begin--,caretPos.end--));break}return{action:action,data:data,caret:caretPos}}var input=this,inputValue=input.inputmask._valueGet(!0),buffer=(isRTL?getBuffer().slice().reverse():getBuffer()).join(""),caretPos=caret(input,void 0,void 0,!0);if(buffer!==inputValue){inputValue=ieMobileHandler(input,inputValue,caretPos);var changes=analyseChanges(inputValue,buffer,caretPos);switch((input.inputmask.shadowRoot||document).activeElement!==input&&input.focus(),writeBuffer(input,getBuffer()),caret(input,caretPos.begin,caretPos.end,!0),changes.action){case"insertText":case"insertReplacementText":$.each(changes.data,function(ndx,entry){var keypress=new $.Event("keypress");keypress.which=entry.charCodeAt(0),inputmask.ignorable=!1,EventHandlers.keypressEvent.call(input,keypress)}),setTimeout(function(){inputmask.$el.trigger("keyup")},0);break;case"deleteContentBackward":var keydown=new $.Event("keydown");keydown.keyCode=keyCode.BACKSPACE,EventHandlers.keydownEvent.call(input,keydown);break;default:applyInputValue(input,inputValue);break}e.preventDefault()}},compositionendEvent:function compositionendEvent(e){inputmask.$el.trigger("input")},setValueEvent:function setValueEvent(e,argument_1,argument_2){var input=this,value=e&&e.detail?e.detail[0]:argument_1;void 0===value&&(value=this.inputmask._valueGet(!0)),applyInputValue(this,value),(e.detail&&void 0!==e.detail[1]||void 0!==argument_2)&&caret(this,e.detail?e.detail[1]:argument_2)},focusEvent:function focusEvent(e){var input=this,nptValue=this.inputmask._valueGet();opts.showMaskOnFocus&&nptValue!==getBuffer().join("")&&writeBuffer(this,getBuffer(),seekNext(getLastValidPosition())),!0!==opts.positionCaretOnTab||!1!==inputmask.mouseEnter||isComplete(getBuffer())&&-1!==getLastValidPosition()||EventHandlers.clickEvent.apply(this,[e,!0]),inputmask.undoValue=getBuffer().join("")},invalidEvent:function invalidEvent(e){inputmask.validationEvent=!0},mouseleaveEvent:function mouseleaveEvent(){var input=this;inputmask.mouseEnter=!1,opts.clearMaskOnLostFocus&&(this.inputmask.shadowRoot||document).activeElement!==this&&HandleNativePlaceholder(this,inputmask.originalPlaceholder)},clickEvent:function clickEvent(e,tabbed){var input=this;if((this.inputmask.shadowRoot||document).activeElement===this){var newCaretPosition=determineNewCaretPosition(caret(this),tabbed);void 0!==newCaretPosition&&caret(this,newCaretPosition)}},cutEvent:function cutEvent(e){var input=this,pos=caret(this),clipboardData=window.clipboardData||e.clipboardData,clipData=isRTL?getBuffer().slice(pos.end,pos.begin):getBuffer().slice(pos.begin,pos.end);clipboardData.setData("text",isRTL?clipData.reverse().join(""):clipData.join("")),document.execCommand&&document.execCommand("copy"),handleRemove(this,keyCode.DELETE,pos),writeBuffer(this,getBuffer(),maskset.p,e,inputmask.undoValue!==getBuffer().join(""))},blurEvent:function blurEvent(e){var $input=$(this),input=this;if(this.inputmask){HandleNativePlaceholder(this,inputmask.originalPlaceholder);var nptValue=this.inputmask._valueGet(),buffer=getBuffer().slice();""!==nptValue&&(opts.clearMaskOnLostFocus&&(-1===getLastValidPosition()&&nptValue===getBufferTemplate().join("")?buffer=[]:clearOptionalTail(buffer)),!1===isComplete(buffer)&&(setTimeout(function(){$input.trigger("incomplete")},0),opts.clearIncomplete&&(resetMaskSet(),buffer=opts.clearMaskOnLostFocus?[]:getBufferTemplate().slice())),writeBuffer(this,buffer,void 0,e)),inputmask.undoValue!==getBuffer().join("")&&(inputmask.undoValue=getBuffer().join(""),$input.trigger("change"))}},mouseenterEvent:function mouseenterEvent(){var input=this;inputmask.mouseEnter=!0,(this.inputmask.shadowRoot||document).activeElement!==this&&(null==inputmask.originalPlaceholder&&this.placeholder!==inputmask.originalPlaceholder&&(inputmask.originalPlaceholder=this.placeholder),opts.showMaskOnHover&&HandleNativePlaceholder(this,(isRTL?getBufferTemplate().slice().reverse():getBufferTemplate()).join("")))},submitEvent:function submitEvent(){inputmask.undoValue!==getBuffer().join("")&&inputmask.$el.trigger("change"),opts.clearMaskOnLostFocus&&-1===getLastValidPosition()&&el.inputmask._valueGet&&el.inputmask._valueGet()===getBufferTemplate().join("")&&el.inputmask._valueSet(""),opts.clearIncomplete&&!1===isComplete(getBuffer())&&el.inputmask._valueSet(""),opts.removeMaskOnSubmit&&(el.inputmask._valueSet(el.inputmask.unmaskedvalue(),!0),setTimeout(function(){writeBuffer(el,getBuffer())},0))},resetEvent:function resetEvent(){el.inputmask.refreshValue=!0,setTimeout(function(){applyInputValue(el,el.inputmask._valueGet(!0))},0)}},valueBuffer;function checkVal(input,writeOut,strict,nptvl,initiatingEvent){var inputmask=this||input.inputmask,inputValue=nptvl.slice(),charCodes="",initialNdx=-1,result=void 0;function isTemplateMatch(ndx,charCodes){for(var targetTemplate=getMaskTemplate(!0,0).slice(ndx,seekNext(ndx)).join("").replace(/'/g,""),charCodeNdx=targetTemplate.indexOf(charCodes);0<charCodeNdx&&" "===targetTemplate[charCodeNdx-1];)charCodeNdx--;var match=0===charCodeNdx&&!isMask(ndx)&&(getTest(ndx).match.nativeDef===charCodes.charAt(0)||!0===getTest(ndx).match.static&&getTest(ndx).match.nativeDef==="'"+charCodes.charAt(0)||" "===getTest(ndx).match.nativeDef&&(getTest(ndx+1).match.nativeDef===charCodes.charAt(0)||!0===getTest(ndx+1).match.static&&getTest(ndx+1).match.nativeDef==="'"+charCodes.charAt(0)));if(!match&&0<charCodeNdx&&!isMask(ndx,!1,!0)){var nextPos=seekNext(ndx);inputmask.caretPos.begin<nextPos&&(inputmask.caretPos={begin:nextPos})}return match}resetMaskSet(),maskset.tests={},initialNdx=opts.radixPoint?determineNewCaretPosition({begin:0,end:0}).begin:0,maskset.p=initialNdx,inputmask.caretPos={begin:initialNdx};var staticMatches=[],prevCaretPos=inputmask.caretPos;if($.each(inputValue,function(ndx,charCode){if(void 0!==charCode)if(void 0===maskset.validPositions[ndx]&&inputValue[ndx]===getPlaceholder(ndx)&&isMask(ndx,!0)&&!1===isValid(ndx,inputValue[ndx],!0,void 0,void 0,!0))maskset.p++;else{var keypress=new $.Event("_checkval");keypress.which=charCode.toString().charCodeAt(0),charCodes+=charCode;var lvp=getLastValidPosition(void 0,!0);isTemplateMatch(initialNdx,charCodes)?result=EventHandlers.keypressEvent.call(input,keypress,!0,!1,strict,lvp+1):(result=EventHandlers.keypressEvent.call(input,keypress,!0,!1,strict,inputmask.caretPos.begin),result&&(initialNdx=inputmask.caretPos.begin+1,charCodes="")),result?(void 0!==result.pos&&maskset.validPositions[result.pos]&&!0===maskset.validPositions[result.pos].match.static&&void 0===maskset.validPositions[result.pos].alternation&&(staticMatches.push(result.pos),isRTL||(result.forwardPosition=result.pos+1)),writeBuffer(void 0,getBuffer(),result.forwardPosition,keypress,!1),inputmask.caretPos={begin:result.forwardPosition,end:result.forwardPosition},prevCaretPos=inputmask.caretPos):inputmask.caretPos=prevCaretPos}}),0<staticMatches.length){var sndx,validPos,nextValid=seekNext(-1,void 0,!1);if(!isComplete(getBuffer())&&staticMatches.length<=nextValid||isComplete(getBuffer())&&0<staticMatches.length&&staticMatches.length!==nextValid&&0===staticMatches[0])for(var nextSndx=nextValid;void 0!==(sndx=staticMatches.shift());){var keypress=new $.Event("_checkval");if(validPos=maskset.validPositions[sndx],validPos.generatedInput=!0,keypress.which=validPos.input.charCodeAt(0),result=EventHandlers.keypressEvent.call(input,keypress,!0,!1,strict,nextSndx),result&&void 0!==result.pos&&result.pos!==sndx&&maskset.validPositions[result.pos]&&!0===maskset.validPositions[result.pos].match.static)staticMatches.push(result.pos);else if(!result)break;nextSndx++}else for(;sndx=staticMatches.pop();)validPos=maskset.validPositions[sndx],validPos&&(validPos.generatedInput=!0)}if(writeOut)for(var vndx in writeBuffer(input,getBuffer(),result?result.forwardPosition:void 0,initiatingEvent||new $.Event("checkval"),initiatingEvent&&"input"===initiatingEvent.type&&inputmask.undoValue!==getBuffer().join("")),maskset.validPositions)!0!==maskset.validPositions[vndx].match.generated&&delete maskset.validPositions[vndx].generatedInput}function unmaskedvalue(input){if(input){if(void 0===input.inputmask)return input.value;input.inputmask&&input.inputmask.refreshValue&&applyInputValue(input,input.inputmask._valueGet(!0))}var umValue=[],vps=maskset.validPositions;for(var pndx in vps)vps[pndx]&&vps[pndx].match&&(1!=vps[pndx].match.static||!0!==vps[pndx].generatedInput)&&umValue.push(vps[pndx].input);var unmaskedValue=0===umValue.length?"":(isRTL?umValue.reverse():umValue).join("");if($.isFunction(opts.onUnMask)){var bufferValue=(isRTL?getBuffer().slice().reverse():getBuffer()).join("");unmaskedValue=opts.onUnMask.call(inputmask,bufferValue,unmaskedValue,opts)}return unmaskedValue}function translatePosition(pos){return!isRTL||"number"!=typeof pos||opts.greedy&&""===opts.placeholder||!el||(pos=el.inputmask._valueGet().length-pos),pos}function caret(input,begin,end,notranslate,isDelete){var range;if(void 0===begin)return"selectionStart"in input&&"selectionEnd"in input?(begin=input.selectionStart,end=input.selectionEnd):window.getSelection?(range=window.getSelection().getRangeAt(0),range.commonAncestorContainer.parentNode!==input&&range.commonAncestorContainer!==input||(begin=range.startOffset,end=range.endOffset)):document.selection&&document.selection.createRange&&(range=document.selection.createRange(),begin=0-range.duplicate().moveStart("character",-input.inputmask._valueGet().length),end=begin+range.text.length),{begin:notranslate?begin:translatePosition(begin),end:notranslate?end:translatePosition(end)};if($.isArray(begin)&&(end=isRTL?begin[0]:begin[1],begin=isRTL?begin[1]:begin[0]),void 0!==begin.begin&&(end=isRTL?begin.begin:begin.end,begin=isRTL?begin.end:begin.begin),"number"==typeof begin){begin=notranslate?begin:translatePosition(begin),end=notranslate?end:translatePosition(end),end="number"==typeof end?end:begin;var scrollCalc=parseInt(((input.ownerDocument.defaultView||window).getComputedStyle?(input.ownerDocument.defaultView||window).getComputedStyle(input,null):input.currentStyle).fontSize)*end;if(input.scrollLeft=scrollCalc>input.scrollWidth?scrollCalc:0,input.inputmask.caretPos={begin:begin,end:end},opts.insertModeVisual&&!1===opts.insertMode&&begin===end&&(isDelete||end++),input===(input.inputmask.shadowRoot||document).activeElement)if("setSelectionRange"in input)input.setSelectionRange(begin,end);else if(window.getSelection){if(range=document.createRange(),void 0===input.firstChild||null===input.firstChild){var textNode=document.createTextNode("");input.appendChild(textNode)}range.setStart(input.firstChild,begin<input.inputmask._valueGet().length?begin:input.inputmask._valueGet().length),range.setEnd(input.firstChild,end<input.inputmask._valueGet().length?end:input.inputmask._valueGet().length),range.collapse(!0);var sel=window.getSelection();sel.removeAllRanges(),sel.addRange(range)}else input.createTextRange&&(range=input.createTextRange(),range.collapse(!0),range.moveEnd("character",end),range.moveStart("character",begin),range.select())}}function determineLastRequiredPosition(returnDefinition){var buffer=getMaskTemplate(!0,getLastValidPosition(),!0,!0),bl=buffer.length,pos,lvp=getLastValidPosition(),positions={},lvTest=maskset.validPositions[lvp],ndxIntlzr=void 0!==lvTest?lvTest.locator.slice():void 0,testPos;for(pos=lvp+1;pos<buffer.length;pos++)testPos=getTestTemplate(pos,ndxIntlzr,pos-1),ndxIntlzr=testPos.locator.slice(),positions[pos]=$.extend(!0,{},testPos);var lvTestAlt=lvTest&&void 0!==lvTest.alternation?lvTest.locator[lvTest.alternation]:void 0;for(pos=bl-1;lvp<pos&&(testPos=positions[pos],(testPos.match.optionality||testPos.match.optionalQuantifier&&testPos.match.newBlockMarker||lvTestAlt&&(lvTestAlt!==positions[pos].locator[lvTest.alternation]&&1!=testPos.match.static||!0===testPos.match.static&&testPos.locator[lvTest.alternation]&&checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","),lvTestAlt.toString().split(","))&&""!==getTests(pos)[0].def))&&buffer[pos]===getPlaceholder(pos,testPos.match));pos--)bl--;return returnDefinition?{l:bl,def:positions[bl]?positions[bl].match:void 0}:bl}function clearOptionalTail(buffer){buffer.length=0;for(var template=getMaskTemplate(!0,0,!0,void 0,!0),lmnt;void 0!==(lmnt=template.shift());)buffer.push(lmnt);return buffer}function isComplete(buffer){if($.isFunction(opts.isComplete))return opts.isComplete(buffer,opts);if("*"!==opts.repeat){var complete=!1,lrp=determineLastRequiredPosition(!0),aml=seekPrevious(lrp.l);if(void 0===lrp.def||lrp.def.newBlockMarker||lrp.def.optionality||lrp.def.optionalQuantifier){complete=!0;for(var i=0;i<=aml;i++){var test=getTestTemplate(i).match;if(!0!==test.static&&void 0===maskset.validPositions[i]&&!0!==test.optionality&&!0!==test.optionalQuantifier||!0===test.static&&buffer[i]!==getPlaceholder(i,test)){complete=!1;break}}}return complete}}function handleRemove(input,k,pos,strict,fromIsValid){if((opts.numericInput||isRTL)&&(k===keyCode.BACKSPACE?k=keyCode.DELETE:k===keyCode.DELETE&&(k=keyCode.BACKSPACE),isRTL)){var pend=pos.end;pos.end=pos.begin,pos.begin=pend}var lvp=getLastValidPosition(void 0,!0),offset;if(pos.end>=getBuffer().length&&lvp>=pos.end&&(pos.end=lvp+1),k===keyCode.BACKSPACE?pos.end-pos.begin<1&&(pos.begin=seekPrevious(pos.begin)):k===keyCode.DELETE&&pos.begin===pos.end&&(pos.end=isMask(pos.end,!0,!0)?pos.end+1:seekNext(pos.end)+1),!1!==(offset=revalidateMask(pos))){if(!0!==strict&&!1!==opts.keepStatic||null!==opts.regex&&-1!==getTest(pos.begin).match.def.indexOf("|")){var result=alternate(!0);if(result){var newPos=void 0!==result.caret?result.caret:result.pos?seekNext(result.pos.begin?result.pos.begin:result.pos):getLastValidPosition(-1,!0);(k!==keyCode.DELETE||pos.begin>newPos)&&pos.begin}}!0!==strict&&(maskset.p=k===keyCode.DELETE?pos.begin+offset:pos.begin)}}function applyInputValue(input,value){input.inputmask.refreshValue=!1,$.isFunction(opts.onBeforeMask)&&(value=opts.onBeforeMask.call(inputmask,value,opts)||value),value=value.toString().split(""),checkVal(input,!0,!1,value),inputmask.undoValue=getBuffer().join(""),(opts.clearMaskOnLostFocus||opts.clearIncomplete)&&input.inputmask._valueGet()===getBufferTemplate().join("")&&-1===getLastValidPosition()&&input.inputmask._valueSet("")}function mask(){function isElementTypeSupported(input,opts){function patchValueProperty(npt){var valueGet,valueSet;function patchValhook(type){if($.valHooks&&(void 0===$.valHooks[type]||!0!==$.valHooks[type].inputmaskpatch)){var valhookGet=$.valHooks[type]&&$.valHooks[type].get?$.valHooks[type].get:function(elem){return elem.value},valhookSet=$.valHooks[type]&&$.valHooks[type].set?$.valHooks[type].set:function(elem,value){return elem.value=value,elem};$.valHooks[type]={get:function get(elem){if(elem.inputmask){if(elem.inputmask.opts.autoUnmask)return elem.inputmask.unmaskedvalue();var result=valhookGet(elem);return-1!==getLastValidPosition(void 0,void 0,elem.inputmask.maskset.validPositions)||!0!==opts.nullable?result:""}return valhookGet(elem)},set:function set(elem,value){var result=valhookSet(elem,value);return elem.inputmask&&applyInputValue(elem,value),result},inputmaskpatch:!0}}}function getter(){return this.inputmask?this.inputmask.opts.autoUnmask?this.inputmask.unmaskedvalue():-1!==getLastValidPosition()||!0!==opts.nullable?(this.inputmask.shadowRoot||document.activeElement)===this&&opts.clearMaskOnLostFocus?(isRTL?clearOptionalTail(getBuffer().slice()).reverse():clearOptionalTail(getBuffer().slice())).join(""):valueGet.call(this):"":valueGet.call(this)}function setter(value){valueSet.call(this,value),this.inputmask&&applyInputValue(this,value)}function installNativeValueSetFallback(npt){EventRuler.on(npt,"mouseenter",function(){var input=this,value=this.inputmask._valueGet(!0);value!==(isRTL?getBuffer().reverse():getBuffer()).join("")&&applyInputValue(this,value)})}if(!npt.inputmask.__valueGet){if(!0!==opts.noValuePatching){if(Object.getOwnPropertyDescriptor){var valueProperty=Object.getPrototypeOf?Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt),"value"):void 0;valueProperty&&valueProperty.get&&valueProperty.set?(valueGet=valueProperty.get,valueSet=valueProperty.set,Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:!0})):"input"!==npt.tagName.toLowerCase()&&(valueGet=function valueGet(){return this.textContent},valueSet=function valueSet(value){this.textContent=value},Object.defineProperty(npt,"value",{get:getter,set:setter,configurable:!0}))}else document.__lookupGetter__&&npt.__lookupGetter__("value")&&(valueGet=npt.__lookupGetter__("value"),valueSet=npt.__lookupSetter__("value"),npt.__defineGetter__("value",getter),npt.__defineSetter__("value",setter));npt.inputmask.__valueGet=valueGet,npt.inputmask.__valueSet=valueSet}npt.inputmask._valueGet=function(overruleRTL){return isRTL&&!0!==overruleRTL?valueGet.call(this.el).split("").reverse().join(""):valueGet.call(this.el)},npt.inputmask._valueSet=function(value,overruleRTL){valueSet.call(this.el,null==value?"":!0!==overruleRTL&&isRTL?value.split("").reverse().join(""):value)},void 0===valueGet&&(valueGet=function valueGet(){return this.value},valueSet=function valueSet(value){this.value=value},patchValhook(npt.type),installNativeValueSetFallback(npt))}}"textarea"!==input.tagName.toLowerCase()&&opts.ignorables.push(keyCode.ENTER);var elementType=input.getAttribute("type"),isSupported="input"===input.tagName.toLowerCase()&&-1!==$.inArray(elementType,opts.supportsInputType)||input.isContentEditable||"textarea"===input.tagName.toLowerCase();if(!isSupported)if("input"===input.tagName.toLowerCase()){var el=document.createElement("input");el.setAttribute("type",elementType),isSupported="text"===el.type,el=null}else isSupported="partial";return!1!==isSupported?patchValueProperty(input):input.inputmask=void 0,isSupported}EventRuler.off(el);var isSupported=isElementTypeSupported(el,opts);if(!1!==isSupported){inputmask.originalPlaceholder=el.placeholder,inputmask.maxLength=void 0!==el?el.maxLength:void 0,-1===inputmask.maxLength&&(inputmask.maxLength=void 0),"inputMode"in el&&null===el.getAttribute("inputmode")&&(el.inputMode=opts.inputmode,el.setAttribute("inputmode",opts.inputmode)),!0===isSupported&&(opts.showMaskOnFocus=opts.showMaskOnFocus&&-1===["cc-number","cc-exp"].indexOf(el.autocomplete),iphone&&(opts.insertModeVisual=!1),EventRuler.on(el,"submit",EventHandlers.submitEvent),EventRuler.on(el,"reset",EventHandlers.resetEvent),EventRuler.on(el,"blur",EventHandlers.blurEvent),EventRuler.on(el,"focus",EventHandlers.focusEvent),EventRuler.on(el,"invalid",EventHandlers.invalidEvent),EventRuler.on(el,"click",EventHandlers.clickEvent),EventRuler.on(el,"mouseleave",EventHandlers.mouseleaveEvent),EventRuler.on(el,"mouseenter",EventHandlers.mouseenterEvent),EventRuler.on(el,"paste",EventHandlers.pasteEvent),EventRuler.on(el,"cut",EventHandlers.cutEvent),EventRuler.on(el,"complete",opts.oncomplete),EventRuler.on(el,"incomplete",opts.onincomplete),EventRuler.on(el,"cleared",opts.oncleared),mobile||!0===opts.inputEventOnly?el.removeAttribute("maxLength"):(EventRuler.on(el,"keydown",EventHandlers.keydownEvent),EventRuler.on(el,"keypress",EventHandlers.keypressEvent)),EventRuler.on(el,"input",EventHandlers.inputFallBackEvent),EventRuler.on(el,"compositionend",EventHandlers.compositionendEvent)),EventRuler.on(el,"setvalue",EventHandlers.setValueEvent),inputmask.undoValue=getBufferTemplate().join("");var activeElement=(el.inputmask.shadowRoot||document).activeElement;if(""!==el.inputmask._valueGet(!0)||!1===opts.clearMaskOnLostFocus||activeElement===el){applyInputValue(el,el.inputmask._valueGet(!0),opts);var buffer=getBuffer().slice();!1===isComplete(buffer)&&opts.clearIncomplete&&resetMaskSet(),opts.clearMaskOnLostFocus&&activeElement!==el&&(-1===getLastValidPosition()?buffer=[]:clearOptionalTail(buffer)),(!1===opts.clearMaskOnLostFocus||opts.showMaskOnFocus&&activeElement===el||""!==el.inputmask._valueGet(!0))&&writeBuffer(el,buffer),activeElement===el&&caret(el,seekNext(getLastValidPosition()))}}}if(void 0!==actionObj)switch(actionObj.action){case"isComplete":return el=actionObj.el,isComplete(getBuffer());case"unmaskedvalue":return void 0!==el&&void 0===actionObj.value||(valueBuffer=actionObj.value,valueBuffer=($.isFunction(opts.onBeforeMask)&&opts.onBeforeMask.call(inputmask,valueBuffer,opts)||valueBuffer).split(""),checkVal.call(this,void 0,!1,!1,valueBuffer),$.isFunction(opts.onBeforeWrite)&&opts.onBeforeWrite.call(inputmask,void 0,getBuffer(),0,opts)),unmaskedvalue(el);case"mask":mask();break;case"format":return valueBuffer=($.isFunction(opts.onBeforeMask)&&opts.onBeforeMask.call(inputmask,actionObj.value,opts)||actionObj.value).split(""),checkVal.call(this,void 0,!0,!1,valueBuffer),actionObj.metadata?{value:isRTL?getBuffer().slice().reverse().join(""):getBuffer().join(""),metadata:maskScope.call(this,{action:"getmetadata"},maskset,opts)}:isRTL?getBuffer().slice().reverse().join(""):getBuffer().join("");case"isValid":actionObj.value?(valueBuffer=($.isFunction(opts.onBeforeMask)&&opts.onBeforeMask.call(inputmask,actionObj.value,opts)||actionObj.value).split(""),checkVal.call(this,void 0,!0,!1,valueBuffer)):actionObj.value=isRTL?getBuffer().slice().reverse().join(""):getBuffer().join("");for(var buffer=getBuffer(),rl=determineLastRequiredPosition(),lmib=buffer.length-1;rl<lmib&&!isMask(lmib);lmib--);return buffer.splice(rl,lmib+1-rl),isComplete(buffer)&&actionObj.value===(isRTL?getBuffer().slice().reverse().join(""):getBuffer().join(""));case"getemptymask":return getBufferTemplate().join("");case"remove":if(el&&el.inputmask){$.data(el,"_inputmask_opts",null);var cv=opts.autoUnmask?unmaskedvalue(el):el.inputmask._valueGet(opts.autoUnmask),valueProperty;cv!==getBufferTemplate().join("")?el.inputmask._valueSet(cv,opts.autoUnmask):el.inputmask._valueSet(""),EventRuler.off(el),Object.getOwnPropertyDescriptor&&Object.getPrototypeOf?(valueProperty=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el),"value"),valueProperty&&el.inputmask.__valueGet&&Object.defineProperty(el,"value",{get:el.inputmask.__valueGet,set:el.inputmask.__valueSet,configurable:!0})):document.__lookupGetter__&&el.__lookupGetter__("value")&&el.inputmask.__valueGet&&(el.__defineGetter__("value",el.inputmask.__valueGet),el.__defineSetter__("value",el.inputmask.__valueSet)),el.inputmask=void 0}return el;case"getmetadata":if($.isArray(maskset.metadata)){var maskTarget=getMaskTemplate(!0,0,!1).join("");return $.each(maskset.metadata,function(ndx,mtdt){if(mtdt.mask===maskTarget)return maskTarget=mtdt,!1}),maskTarget}return maskset.metadata}}},function(module,exports,__webpack_require__){"use strict";function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}"function"!=typeof Object.getPrototypeOf&&(Object.getPrototypeOf="object"===_typeof("test".__proto__)?function(object){return object.__proto__}:function(object){return object.constructor.prototype})},function(module,exports,__webpack_require__){"use strict";function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var Inputmask=__webpack_require__(1),$=Inputmask.dependencyLib,keyCode=__webpack_require__(0),formatCode={d:["[1-9]|[12][0-9]|3[01]",Date.prototype.setDate,"day",Date.prototype.getDate],dd:["0[1-9]|[12][0-9]|3[01]",Date.prototype.setDate,"day",function(){return pad(Date.prototype.getDate.call(this),2)}],ddd:[""],dddd:[""],m:["[1-9]|1[012]",Date.prototype.setMonth,"month",function(){return Date.prototype.getMonth.call(this)+1}],mm:["0[1-9]|1[012]",Date.prototype.setMonth,"month",function(){return pad(Date.prototype.getMonth.call(this)+1,2)}],mmm:[""],mmmm:[""],yy:["[0-9]{2}",Date.prototype.setFullYear,"year",function(){return pad(Date.prototype.getFullYear.call(this),2)}],yyyy:["[0-9]{4}",Date.prototype.setFullYear,"year",function(){return pad(Date.prototype.getFullYear.call(this),4)}],h:["[1-9]|1[0-2]",Date.prototype.setHours,"hours",Date.prototype.getHours],hh:["0[1-9]|1[0-2]",Date.prototype.setHours,"hours",function(){return pad(Date.prototype.getHours.call(this),2)}],hx:[function(x){return"[0-9]{".concat(x,"}")},Date.prototype.setHours,"hours",function(x){return Date.prototype.getHours}],H:["1?[0-9]|2[0-3]",Date.prototype.setHours,"hours",Date.prototype.getHours],HH:["0[0-9]|1[0-9]|2[0-3]",Date.prototype.setHours,"hours",function(){return pad(Date.prototype.getHours.call(this),2)}],Hx:[function(x){return"[0-9]{".concat(x,"}")},Date.prototype.setHours,"hours",function(x){return function(){return pad(Date.prototype.getHours.call(this),x)}}],M:["[1-5]?[0-9]",Date.prototype.setMinutes,"minutes",Date.prototype.getMinutes],MM:["0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]",Date.prototype.setMinutes,"minutes",function(){return pad(Date.prototype.getMinutes.call(this),2)}],s:["[1-5]?[0-9]",Date.prototype.setSeconds,"seconds",Date.prototype.getSeconds],ss:["0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]",Date.prototype.setSeconds,"seconds",function(){return pad(Date.prototype.getSeconds.call(this),2)}],l:["[0-9]{3}",Date.prototype.setMilliseconds,"milliseconds",function(){return pad(Date.prototype.getMilliseconds.call(this),3)}],L:["[0-9]{2}",Date.prototype.setMilliseconds,"milliseconds",function(){return pad(Date.prototype.getMilliseconds.call(this),2)}],t:["[ap]"],tt:["[ap]m"],T:["[AP]"],TT:["[AP]M"],Z:[""],o:[""],S:[""]},formatAlias={isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:ss",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"};function formatcode(match){var dynMatches=new RegExp("\\d+$").exec(match[0]);if(dynMatches&&void 0!==dynMatches[0]){var fcode=formatCode[match[0][0]+"x"].slice("");return fcode[0]=fcode[0](dynMatches[0]),fcode[3]=fcode[3](dynMatches[0]),fcode}if(formatCode[match[0]])return formatCode[match[0]]}function getTokenizer(opts){if(!opts.tokenizer){var tokens=[],dyntokens=[];for(var ndx in formatCode)if(/\.*x$/.test(ndx)){var dynToken=ndx[0]+"\\d+";-1===dyntokens.indexOf(dynToken)&&dyntokens.push(dynToken)}else-1===tokens.indexOf(ndx[0])&&tokens.push(ndx[0]);opts.tokenizer="("+(0<dyntokens.length?dyntokens.join("|")+"|":"")+tokens.join("+|")+")+?|.",opts.tokenizer=new RegExp(opts.tokenizer,"g")}return opts.tokenizer}function isValidDate(dateParts,currentResult){return(!isFinite(dateParts.rawday)||"29"==dateParts.day&&!isFinite(dateParts.rawyear)||new Date(dateParts.date.getFullYear(),isFinite(dateParts.rawmonth)?dateParts.month:dateParts.date.getMonth()+1,0).getDate()>=dateParts.day)&&currentResult}function isDateInRange(dateParts,opts){var result=!0;if(opts.min){if(dateParts.rawyear){var rawYear=dateParts.rawyear.replace(/[^0-9]/g,""),minYear=opts.min.year.substr(0,rawYear.length);result=minYear<=rawYear}dateParts.year===dateParts.rawyear&&opts.min.date.getTime()==opts.min.date.getTime()&&(result=opts.min.date.getTime()<=dateParts.date.getTime())}return result&&opts.max&&opts.max.date.getTime()==opts.max.date.getTime()&&(result=opts.max.date.getTime()>=dateParts.date.getTime()),result}function parse(format,dateObjValue,opts,raw){var mask="",match,fcode;for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(format);)if(void 0===dateObjValue)if(fcode=formatcode(match))mask+="("+fcode[0]+")";else switch(match[0]){case"[":mask+="(";break;case"]":mask+=")?";break;default:mask+=Inputmask.escapeRegex(match[0])}else if(fcode=formatcode(match))if(!0!==raw&&fcode[3]){var getFn=fcode[3];mask+=getFn.call(dateObjValue.date)}else fcode[2]?mask+=dateObjValue["raw"+fcode[2]]:mask+=match[0];else mask+=match[0];return mask}function pad(val,len){for(val=String(val),len=len||2;val.length<len;)val="0"+val;return val}function analyseMask(maskString,format,opts){var dateObj={date:new Date(1,0,1)},targetProp,mask=maskString,match,dateOperation;function extendProperty(value){var correctedValue=value.replace(/[^0-9]/g,"0");return correctedValue}function setValue(dateObj,value,opts){dateObj[targetProp]=extendProperty(value),dateObj["raw"+targetProp]=value,void 0!==dateOperation&&dateOperation.call(dateObj.date,"month"==targetProp?parseInt(dateObj[targetProp])-1:dateObj[targetProp])}if("string"==typeof mask){for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(format);){var value=mask.slice(0,match[0].length);formatCode.hasOwnProperty(match[0])&&(targetProp=formatCode[match[0]][2],dateOperation=formatCode[match[0]][1],setValue(dateObj,value,opts)),mask=mask.slice(value.length)}return dateObj}if(mask&&"object"===_typeof(mask)&&mask.hasOwnProperty("date"))return mask}function importDate(dateObj,opts){var match,date="";for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(opts.inputFormat);)"d"===match[0].charAt(0)?date+=pad(dateObj.getDate(),match[0].length):"m"===match[0].charAt(0)?date+=pad(dateObj.getMonth()+1,match[0].length):"yyyy"===match[0]?date+=dateObj.getFullYear().toString():"y"===match[0].charAt(0)&&(date+=pad(dateObj.getYear(),match[0].length));return date}function getTokenMatch(pos,opts){var calcPos=0,targetMatch,match,matchLength=0;for(getTokenizer(opts).lastIndex=0;match=getTokenizer(opts).exec(opts.inputFormat);){var dynMatches=new RegExp("\\d+$").exec(match[0]);if(matchLength=dynMatches?parseInt(dynMatches[0]):match[0].length,calcPos+=matchLength,pos<=calcPos){targetMatch=match,match=getTokenizer(opts).exec(opts.inputFormat);break}}return{targetMatchIndex:calcPos-matchLength,nextMatch:match,targetMatch:targetMatch}}Inputmask.extendAliases({datetime:{mask:function mask(opts){return opts.numericInput=!1,formatCode.S=opts.i18n.ordinalSuffix.join("|"),opts.inputFormat=formatAlias[opts.inputFormat]||opts.inputFormat,opts.displayFormat=formatAlias[opts.displayFormat]||opts.displayFormat||opts.inputFormat,opts.outputFormat=formatAlias[opts.outputFormat]||opts.outputFormat||opts.inputFormat,opts.placeholder=""!==opts.placeholder?opts.placeholder:opts.inputFormat.replace(/[[\]]/,""),opts.regex=parse(opts.inputFormat,void 0,opts),opts.min=analyseMask(opts.min,opts.inputFormat,opts),opts.max=analyseMask(opts.max,opts.inputFormat,opts),null},placeholder:"",inputFormat:"isoDateTime",displayFormat:void 0,outputFormat:void 0,min:null,max:null,skipOptionalPartCharacter:"",i18n:{dayNames:["Mon","Tue","Wed","Thu","Fri","Sat","Sun","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],ordinalSuffix:["st","nd","rd","th"]},preValidation:function preValidation(buffer,pos,c,isSelection,opts,maskset,caretPos,strict){if(strict)return!0;if(isNaN(c)&&buffer[pos]!==c){var tokenMatch=getTokenMatch(pos,opts);if(tokenMatch.nextMatch&&tokenMatch.nextMatch[0]===c&&1<tokenMatch.targetMatch[0].length){var validator=formatCode[tokenMatch.targetMatch[0]][0];if(new RegExp(validator).test("0"+buffer[pos-1]))return buffer[pos]=buffer[pos-1],buffer[pos-1]="0",{fuzzy:!0,buffer:buffer,refreshFromBuffer:{start:pos-1,end:pos+1},pos:pos+1}}}return!0},postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict){if(strict)return!0;var tokenMatch,validator;if(!1===currentResult)return tokenMatch=getTokenMatch(pos+1,opts),tokenMatch.targetMatch&&tokenMatch.targetMatchIndex===pos&&1<tokenMatch.targetMatch[0].length&&void 0!==formatCode[tokenMatch.targetMatch[0]]&&(validator=formatCode[tokenMatch.targetMatch[0]][0],new RegExp(validator).test("0"+c))?{insert:[{pos:pos,c:"0"},{pos:pos+1,c:c}],pos:pos+1}:currentResult;if(currentResult.fuzzy&&(buffer=currentResult.buffer,pos=currentResult.pos),tokenMatch=getTokenMatch(pos,opts),tokenMatch.targetMatch&&tokenMatch.targetMatch[0]&&void 0!==formatCode[tokenMatch.targetMatch[0]]){validator=formatCode[tokenMatch.targetMatch[0]][0];var part=buffer.slice(tokenMatch.targetMatchIndex,tokenMatch.targetMatchIndex+tokenMatch.targetMatch[0].length);!1===new RegExp(validator).test(part.join(""))&&2===tokenMatch.targetMatch[0].length&&maskset.validPositions[tokenMatch.targetMatchIndex]&&maskset.validPositions[tokenMatch.targetMatchIndex+1]&&(maskset.validPositions[tokenMatch.targetMatchIndex+1].input="0")}var result=currentResult,dateParts=analyseMask(buffer.join(""),opts.inputFormat,opts);return result&&dateParts.date.getTime()==dateParts.date.getTime()&&(result=isValidDate(dateParts,result),result=result&&isDateInRange(dateParts,opts)),pos&&result&&currentResult.pos!==pos?{buffer:parse(opts.inputFormat,dateParts,opts).split(""),refreshFromBuffer:{start:pos,end:currentResult.pos}}:result},onKeyDown:function onKeyDown(e,buffer,caretPos,opts){var input=this;e.ctrlKey&&e.keyCode===keyCode.RIGHT&&(this.inputmask._valueSet(importDate(new Date,opts)),$(this).trigger("setvalue"))},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){return unmaskedValue?parse(opts.outputFormat,analyseMask(maskedValue,opts.inputFormat,opts),opts,!0):unmaskedValue},casing:function casing(elem,test,pos,validPositions){return 0==test.nativeDef.indexOf("[ap]")?elem.toLowerCase():0==test.nativeDef.indexOf("[AP]")?elem.toUpperCase():elem},onBeforeMask:function onBeforeMask(initialValue,opts){return"[object Date]"===Object.prototype.toString.call(initialValue)&&(initialValue=importDate(initialValue,opts)),initialValue},insertMode:!1,shiftPositions:!1,keepStatic:!1,inputmode:"numeric"}}),module.exports=Inputmask},function(module,exports,__webpack_require__){"use strict";var Inputmask=__webpack_require__(1),$=Inputmask.dependencyLib,keyCode=__webpack_require__(0);function autoEscape(txt,opts){for(var escapedTxt="",i=0;i<txt.length;i++)Inputmask.prototype.definitions[txt.charAt(i)]||opts.definitions[txt.charAt(i)]||opts.optionalmarker[0]===txt.charAt(i)||opts.optionalmarker[1]===txt.charAt(i)||opts.quantifiermarker[0]===txt.charAt(i)||opts.quantifiermarker[1]===txt.charAt(i)||opts.groupmarker[0]===txt.charAt(i)||opts.groupmarker[1]===txt.charAt(i)||opts.alternatormarker===txt.charAt(i)?escapedTxt+="\\"+txt.charAt(i):escapedTxt+=txt.charAt(i);return escapedTxt}function alignDigits(buffer,digits,opts,force){if(0<buffer.length&&0<digits&&(!opts.digitsOptional||force)){var radixPosition=$.inArray(opts.radixPoint,buffer);-1===radixPosition&&(buffer.push(opts.radixPoint),radixPosition=buffer.length-1);for(var i=1;i<=digits;i++)isFinite(buffer[radixPosition+i])||(buffer[radixPosition+i]="0")}return buffer}function findValidator(symbol,maskset){var posNdx=0;if("+"===symbol){for(posNdx in maskset.validPositions);posNdx=parseInt(posNdx)}for(var tstNdx in maskset.tests)if(tstNdx=parseInt(tstNdx),posNdx<=tstNdx)for(var ndx=0,ndxl=maskset.tests[tstNdx].length;ndx<ndxl;ndx++)if((void 0===maskset.validPositions[tstNdx]||"-"===symbol)&&maskset.tests[tstNdx][ndx].match.def===symbol)return tstNdx+(void 0!==maskset.validPositions[tstNdx]&&"-"!==symbol?1:0);return posNdx}function findValid(symbol,maskset){var ret=-1;return $.each(maskset.validPositions,function(ndx,tst){if(tst&&tst.match.def===symbol)return ret=parseInt(ndx),!1}),ret}function parseMinMaxOptions(opts){void 0===opts.parseMinMaxOptions&&(null!==opts.min&&(opts.min=opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator),"g"),""),","===opts.radixPoint&&(opts.min=opts.min.replace(opts.radixPoint,".")),opts.min=isFinite(opts.min)?parseFloat(opts.min):NaN,isNaN(opts.min)&&(opts.min=Number.MIN_VALUE)),null!==opts.max&&(opts.max=opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator),"g"),""),","===opts.radixPoint&&(opts.max=opts.max.replace(opts.radixPoint,".")),opts.max=isFinite(opts.max)?parseFloat(opts.max):NaN,isNaN(opts.max)&&(opts.max=Number.MAX_VALUE)),opts.parseMinMaxOptions="done")}function genMask(opts){opts.repeat=0,opts.groupSeparator===opts.radixPoint&&opts.digits&&"0"!==opts.digits&&("."===opts.radixPoint?opts.groupSeparator=",":","===opts.radixPoint?opts.groupSeparator=".":opts.groupSeparator="")," "===opts.groupSeparator&&(opts.skipOptionalPartCharacter=void 0),1<opts.placeholder.length&&(opts.placeholder=opts.placeholder.charAt(0)),"radixFocus"===opts.positionCaretOnClick&&""===opts.placeholder&&(opts.positionCaretOnClick="lvp");var decimalDef="0",radixPointDef=opts.radixPoint;!0===opts.numericInput&&void 0===opts.__financeInput?(decimalDef="1",opts.positionCaretOnClick="radixFocus"===opts.positionCaretOnClick?"lvp":opts.positionCaretOnClick,opts.digitsOptional=!1,isNaN(opts.digits)&&(opts.digits=2),opts._radixDance=!1,radixPointDef=","===opts.radixPoint?"?":"!",""!==opts.radixPoint&&void 0===opts.definitions[radixPointDef]&&(opts.definitions[radixPointDef]={},opts.definitions[radixPointDef].validator="["+opts.radixPoint+"]",opts.definitions[radixPointDef].placeholder=opts.radixPoint,opts.definitions[radixPointDef].static=!0,opts.definitions[radixPointDef].generated=!0)):(opts.__financeInput=!1,opts.numericInput=!0);var mask="[+]",altMask;if(mask+=autoEscape(opts.prefix,opts),""!==opts.groupSeparator?(void 0===opts.definitions[opts.groupSeparator]&&(opts.definitions[opts.groupSeparator]={},opts.definitions[opts.groupSeparator].validator="["+opts.groupSeparator+"]",opts.definitions[opts.groupSeparator].placeholder=opts.groupSeparator,opts.definitions[opts.groupSeparator].static=!0,opts.definitions[opts.groupSeparator].generated=!0),mask+=opts._mask(opts)):mask+="9{+}",void 0!==opts.digits&&0!==opts.digits){var dq=opts.digits.toString().split(",");isFinite(dq[0])&&dq[1]&&isFinite(dq[1])?mask+=radixPointDef+decimalDef+"{"+opts.digits+"}":(isNaN(opts.digits)||0<parseInt(opts.digits))&&(opts.digitsOptional?(altMask=mask+radixPointDef+decimalDef+"{0,"+opts.digits+"}",opts.keepStatic=!0):mask+=radixPointDef+decimalDef+"{"+opts.digits+"}")}return mask+=autoEscape(opts.suffix,opts),mask+="[-]",altMask&&(mask=[altMask+autoEscape(opts.suffix,opts)+"[-]",mask]),opts.greedy=!1,parseMinMaxOptions(opts),mask}function hanndleRadixDance(pos,c,radixPos,maskset,opts){return opts._radixDance&&opts.numericInput&&c!==opts.negationSymbol.back&&pos<=radixPos&&(0<radixPos||c==opts.radixPoint)&&(void 0===maskset.validPositions[pos-1]||maskset.validPositions[pos-1].input!==opts.negationSymbol.back)&&(pos-=1),pos}function decimalValidator(chrs,maskset,pos,strict,opts){var radixPos=maskset.buffer?maskset.buffer.indexOf(opts.radixPoint):-1,result=-1!==radixPos&&new RegExp("[0-9\uff11-\uff19]").test(chrs);return opts._radixDance&&result&&null==maskset.validPositions[radixPos]?{insert:{pos:radixPos===pos?radixPos+1:radixPos,c:opts.radixPoint},pos:pos}:result}function checkForLeadingZeroes(buffer,opts){var numberMatches=new RegExp("(^"+(""!==opts.negationSymbol.front?Inputmask.escapeRegex(opts.negationSymbol.front)+"?":"")+Inputmask.escapeRegex(opts.prefix)+")(.*)("+Inputmask.escapeRegex(opts.suffix)+(""!=opts.negationSymbol.back?Inputmask.escapeRegex(opts.negationSymbol.back)+"?":"")+"$)").exec(buffer.slice().reverse().join("")),number=numberMatches?numberMatches[2]:"",leadingzeroes=!1;return number&&(number=number.split(opts.radixPoint.charAt(0))[0],leadingzeroes=new RegExp("^[0"+opts.groupSeparator+"]*").exec(number)),!(!leadingzeroes||!(1<leadingzeroes[0].length||0<leadingzeroes[0].length&&leadingzeroes[0].length<number.length))&&leadingzeroes}Inputmask.extendAliases({numeric:{mask:genMask,_mask:function _mask(opts){return"("+opts.groupSeparator+"999){+|1}"},digits:"*",digitsOptional:!0,enforceDigitsOnBlur:!1,radixPoint:".",positionCaretOnClick:"radixFocus",_radixDance:!0,groupSeparator:"",allowMinus:!0,negationSymbol:{front:"-",back:""},prefix:"",suffix:"",min:null,max:null,step:1,unmaskAsNumber:!1,roundingFN:Math.round,inputmode:"numeric",shortcuts:{k:"000",m:"000000"},placeholder:"0",greedy:!1,rightAlign:!0,insertMode:!0,autoUnmask:!1,skipOptionalPartCharacter:"",definitions:{0:{validator:decimalValidator},1:{validator:decimalValidator,definitionSymbol:"9"},"+":{validator:function validator(chrs,maskset,pos,strict,opts){return opts.allowMinus&&("-"===chrs||chrs===opts.negationSymbol.front)}},"-":{validator:function validator(chrs,maskset,pos,strict,opts){return opts.allowMinus&&chrs===opts.negationSymbol.back}}},preValidation:function preValidation(buffer,pos,c,isSelection,opts,maskset,caretPos,strict){if(!1!==opts.__financeInput&&c===opts.radixPoint)return!1;var pattern;if(pattern=opts.shortcuts&&opts.shortcuts[c]){if(1<pattern.length)for(var inserts=[],i=0;i<pattern.length;i++)inserts.push({pos:pos+i,c:pattern[i],strict:!1});return{insert:inserts}}var radixPos=$.inArray(opts.radixPoint,buffer),initPos=pos;if(pos=hanndleRadixDance(pos,c,radixPos,maskset,opts),"-"===c||c===opts.negationSymbol.front){if(!0!==opts.allowMinus)return!1;var isNegative=!1,front=findValid("+",maskset),back=findValid("-",maskset);return-1!==front&&(isNegative=[front,back]),!1!==isNegative?{remove:isNegative,caret:initPos}:{insert:[{pos:findValidator("+",maskset),c:opts.negationSymbol.front,fromIsValid:!0},{pos:findValidator("-",maskset),c:opts.negationSymbol.back,fromIsValid:void 0}],caret:initPos+opts.negationSymbol.back.length}}if(strict)return!0;if(-1!==radixPos&&!0===opts._radixDance&&!1===isSelection&&c===opts.radixPoint&&void 0!==opts.digits&&(isNaN(opts.digits)||0<parseInt(opts.digits))&&radixPos!==pos)return{caret:opts._radixDance&&pos===radixPos-1?radixPos+1:radixPos};if(!1===opts.__financeInput)if(isSelection){if(opts.digitsOptional)return{rewritePosition:caretPos.end};if(!opts.digitsOptional){if(caretPos.begin>radixPos&&caretPos.end<=radixPos)return c===opts.radixPoint?{insert:{pos:radixPos+1,c:"0",fromIsValid:!0},rewritePosition:radixPos}:{rewritePosition:radixPos+1};if(caretPos.begin<radixPos)return{rewritePosition:caretPos.begin-1}}}else if(!opts.showMaskOnHover&&!opts.showMaskOnFocus&&!opts.digitsOptional&&0<opts.digits&&""===this.inputmask.__valueGet.call(this))return{rewritePosition:radixPos};return{rewritePosition:pos}},postValidation:function postValidation(buffer,pos,c,currentResult,opts,maskset,strict){if(!1===currentResult)return currentResult;if(strict)return!0;if(null!==opts.min||null!==opts.max){var unmasked=opts.onUnMask(buffer.slice().reverse().join(""),void 0,$.extend({},opts,{unmaskAsNumber:!0}));if(null!==opts.min&&unmasked<opts.min&&(unmasked.toString().length>=opts.min.toString().length||unmasked<0))return!1;if(null!==opts.max&&unmasked>opts.max)return!1}return currentResult},onUnMask:function onUnMask(maskedValue,unmaskedValue,opts){if(""===unmaskedValue&&!0===opts.nullable)return unmaskedValue;var processValue=maskedValue.replace(opts.prefix,"");return processValue=processValue.replace(opts.suffix,""),processValue=processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator),"g"),""),""!==opts.placeholder.charAt(0)&&(processValue=processValue.replace(new RegExp(opts.placeholder.charAt(0),"g"),"0")),opts.unmaskAsNumber?(""!==opts.radixPoint&&-1!==processValue.indexOf(opts.radixPoint)&&(processValue=processValue.replace(Inputmask.escapeRegex.call(this,opts.radixPoint),".")),processValue=processValue.replace(new RegExp("^"+Inputmask.escapeRegex(opts.negationSymbol.front)),"-"),processValue=processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back)+"$"),""),Number(processValue)):processValue},isComplete:function isComplete(buffer,opts){var maskedValue=(opts.numericInput?buffer.slice().reverse():buffer).join("");return maskedValue=maskedValue.replace(new RegExp("^"+Inputmask.escapeRegex(opts.negationSymbol.front)),"-"),maskedValue=maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back)+"$"),""),maskedValue=maskedValue.replace(opts.prefix,""),maskedValue=maskedValue.replace(opts.suffix,""),maskedValue=maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator)+"([0-9]{3})","g"),"$1"),","===opts.radixPoint&&(maskedValue=maskedValue.replace(Inputmask.escapeRegex(opts.radixPoint),".")),isFinite(maskedValue)},onBeforeMask:function onBeforeMask(initialValue,opts){var radixPoint=opts.radixPoint||",";isFinite(opts.digits)&&(opts.digits=parseInt(opts.digits)),"number"!=typeof initialValue&&"number"!==opts.inputType||""===radixPoint||(initialValue=initialValue.toString().replace(".",radixPoint));var valueParts=initialValue.split(radixPoint),integerPart=valueParts[0].replace(/[^\-0-9]/g,""),decimalPart=1<valueParts.length?valueParts[1].replace(/[^0-9]/g,""):"",forceDigits=1<valueParts.length;initialValue=integerPart+(""!==decimalPart?radixPoint+decimalPart:decimalPart);var digits=0;if(""!==radixPoint&&(digits=opts.digitsOptional?opts.digits<decimalPart.length?opts.digits:decimalPart.length:opts.digits,""!==decimalPart||!opts.digitsOptional)){var digitsFactor=Math.pow(10,digits||1);initialValue=initialValue.replace(Inputmask.escapeRegex(radixPoint),"."),isNaN(parseFloat(initialValue))||(initialValue=(opts.roundingFN(parseFloat(initialValue)*digitsFactor)/digitsFactor).toFixed(digits)),initialValue=initialValue.toString().replace(".",radixPoint)}if(0===opts.digits&&-1!==initialValue.indexOf(radixPoint)&&(initialValue=initialValue.substring(0,initialValue.indexOf(radixPoint))),null!==opts.min||null!==opts.max){var numberValue=initialValue.toString().replace(radixPoint,".");null!==opts.min&&numberValue<opts.min?initialValue=opts.min.toString().replace(".",radixPoint):null!==opts.max&&numberValue>opts.max&&(initialValue=opts.max.toString().replace(".",radixPoint))}return alignDigits(initialValue.toString().split(""),digits,opts,forceDigits).join("")},onBeforeWrite:function onBeforeWrite(e,buffer,caretPos,opts){function stripBuffer(buffer,stripRadix){if(!1!==opts.__financeInput||stripRadix){var position=$.inArray(opts.radixPoint,buffer);-1!==position&&buffer.splice(position,1)}if(""!==opts.groupSeparator)for(;-1!==(position=buffer.indexOf(opts.groupSeparator));)buffer.splice(position,1);return buffer}var result,leadingzeroes=checkForLeadingZeroes(buffer,opts);if(leadingzeroes){var buf=buffer.slice().reverse(),caretNdx=buf.join("").indexOf(leadingzeroes[0]);buf.splice(caretNdx,leadingzeroes[0].length);var newCaretPos=buf.length-caretNdx;stripBuffer(buf),result={refreshFromBuffer:!0,buffer:buf.reverse(),caret:caretPos<newCaretPos?caretPos:newCaretPos}}if(e)switch(e.type){case"blur":case"checkval":if(null!==opts.min){var unmasked=opts.onUnMask(buffer.slice().reverse().join(""),void 0,$.extend({},opts,{unmaskAsNumber:!0}));if(null!==opts.min&&unmasked<opts.min)return{refreshFromBuffer:!0,buffer:alignDigits(opts.min.toString().replace(".",opts.radixPoint).split(""),opts.digits,opts).reverse()}}if(buffer[buffer.length-1]===opts.negationSymbol.front){var nmbrMtchs=new RegExp("(^"+(""!=opts.negationSymbol.front?Inputmask.escapeRegex(opts.negationSymbol.front)+"?":"")+Inputmask.escapeRegex(opts.prefix)+")(.*)("+Inputmask.escapeRegex(opts.suffix)+(""!=opts.negationSymbol.back?Inputmask.escapeRegex(opts.negationSymbol.back)+"?":"")+"$)").exec(stripBuffer(buffer.slice(),!0).reverse().join("")),number=nmbrMtchs?nmbrMtchs[2]:"";0==number&&(result={refreshFromBuffer:!0,buffer:[0]})}else""!==opts.radixPoint&&buffer[0]===opts.radixPoint&&(result&&result.buffer?result.buffer.shift():(buffer.shift(),result={refreshFromBuffer:!0,buffer:stripBuffer(buffer)}));if(opts.enforceDigitsOnBlur){result=result||{};var bffr=result&&result.buffer||buffer.slice().reverse();result.refreshFromBuffer=!0,result.buffer=alignDigits(bffr,opts.digits,opts,!0).reverse()}}return result},onKeyDown:function onKeyDown(e,buffer,caretPos,opts){var $input=$(this),bffr;if(e.ctrlKey)switch(e.keyCode){case keyCode.UP:return this.inputmask.__valueSet.call(this,parseFloat(this.inputmask.unmaskedvalue())+parseInt(opts.step)),$input.trigger("setvalue"),!1;case keyCode.DOWN:return this.inputmask.__valueSet.call(this,parseFloat(this.inputmask.unmaskedvalue())-parseInt(opts.step)),$input.trigger("setvalue"),!1}if(!e.shiftKey&&(e.keyCode===keyCode.DELETE||e.keyCode===keyCode.BACKSPACE||e.keyCode===keyCode.BACKSPACE_SAFARI)&&caretPos.begin!==buffer.length){if(buffer[e.keyCode===keyCode.DELETE?caretPos.begin-1:caretPos.end]===opts.negationSymbol.front)return bffr=buffer.slice().reverse(),""!==opts.negationSymbol.front&&bffr.shift(),""!==opts.negationSymbol.back&&bffr.pop(),$input.trigger("setvalue",[bffr.join(""),caretPos.begin]),!1;if(!0===opts._radixDance){var radixPos=$.inArray(opts.radixPoint,buffer);if(opts.digitsOptional){if(0===radixPos)return bffr=buffer.slice().reverse(),bffr.pop(),$input.trigger("setvalue",[bffr.join(""),caretPos.begin>=bffr.length?bffr.length:caretPos.begin]),!1}else if(-1!==radixPos&&(caretPos.begin<radixPos||caretPos.end<radixPos||e.keyCode===keyCode.DELETE&&caretPos.begin===radixPos))return caretPos.begin!==caretPos.end||e.keyCode!==keyCode.BACKSPACE&&e.keyCode!==keyCode.BACKSPACE_SAFARI||caretPos.begin++,bffr=buffer.slice().reverse(),bffr.splice(bffr.length-caretPos.begin,caretPos.begin-caretPos.end+1),bffr=alignDigits(bffr,opts.digits,opts).join(""),$input.trigger("setvalue",[bffr,caretPos.begin>=bffr.length?radixPos+1:caretPos.begin]),!1}}}},currency:{prefix:"",groupSeparator:",",alias:"numeric",digits:2,digitsOptional:!1},decimal:{alias:"numeric"},integer:{alias:"numeric",digits:0},percentage:{alias:"numeric",min:0,max:100,suffix:" %",digits:0,allowMinus:!1},indianns:{alias:"numeric",_mask:function _mask(opts){return"("+opts.groupSeparator+"99){*|1}("+opts.groupSeparator+"999){1|1}"},groupSeparator:",",radixPoint:".",placeholder:"0",digits:2,digitsOptional:!1}}),module.exports=Inputmask},function(module,exports,__webpack_require__){"use strict";var _inputmask=_interopRequireDefault(__webpack_require__(1));function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){return!call||"object"!==_typeof(call)&&"function"!=typeof call?_assertThisInitialized(self):call}function _assertThisInitialized(self){if(void 0===self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return self}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&_setPrototypeOf(subClass,superClass)}function _wrapNativeSuper(Class){var _cache="function"==typeof Map?new Map:void 0;return _wrapNativeSuper=function _wrapNativeSuper(Class){if(null===Class||!_isNativeFunction(Class))return Class;if("function"!=typeof Class)throw new TypeError("Super expression must either be null or a function");if("undefined"!=typeof _cache){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_getPrototypeOf(this).constructor)}return Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:!1,writable:!0,configurable:!0}}),_setPrototypeOf(Wrapper,Class)},_wrapNativeSuper(Class)}function isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}function _construct(Parent,args,Class){return _construct=isNativeReflectConstruct()?Reflect.construct:function _construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a),instance=new Constructor;return Class&&_setPrototypeOf(instance,Class.prototype),instance},_construct.apply(null,arguments)}function _isNativeFunction(fn){return-1!==Function.toString.call(fn).indexOf("[native code]")}function _setPrototypeOf(o,p){return _setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){return o.__proto__=p,o},_setPrototypeOf(o,p)}function _getPrototypeOf(o){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)},_getPrototypeOf(o)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}if(document.head.createShadowRoot||document.head.attachShadow){var InputmaskElement=function(_HTMLElement){function InputmaskElement(){var _this;_classCallCheck(this,InputmaskElement),_this=_possibleConstructorReturn(this,_getPrototypeOf(InputmaskElement).call(this));var attributeNames=_this.getAttributeNames(),shadow=_this.attachShadow({mode:"closed"}),input=document.createElement("input");for(var attr in input.type="text",shadow.appendChild(input),attributeNames)Object.prototype.hasOwnProperty.call(attributeNames,attr)&&input.setAttribute(attributeNames[attr],_this.getAttribute(attributeNames[attr]));var im=new _inputmask.default;return im.dataAttribute="",im.mask(input),input.inputmask.shadowRoot=shadow,_this}return _inherits(InputmaskElement,_HTMLElement),InputmaskElement}(_wrapNativeSuper(HTMLElement));customElements.define("input-mask",InputmaskElement)}},function(module,exports,__webpack_require__){"use strict";function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}var $=__webpack_require__(3),Inputmask=__webpack_require__(1);void 0===$.fn.inputmask&&($.fn.inputmask=function(fn,options){var nptmask,input=this[0];if(void 0===options&&(options={}),"string"==typeof fn)switch(fn){case"unmaskedvalue":return input&&input.inputmask?input.inputmask.unmaskedvalue():$(input).val();case"remove":return this.each(function(){this.inputmask&&this.inputmask.remove()});case"getemptymask":return input&&input.inputmask?input.inputmask.getemptymask():"";case"hasMaskedValue":return!(!input||!input.inputmask)&&input.inputmask.hasMaskedValue();case"isComplete":return!input||!input.inputmask||input.inputmask.isComplete();case"getmetadata":return input&&input.inputmask?input.inputmask.getmetadata():void 0;case"setvalue":Inputmask.setValue(input,options);break;case"option":if("string"!=typeof options)return this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(options)});if(input&&void 0!==input.inputmask)return input.inputmask.option(options);break;default:return options.alias=fn,nptmask=new Inputmask(options),this.each(function(){nptmask.mask(this)})}else{if(Array.isArray(fn))return options.alias=fn,nptmask=new Inputmask(options),this.each(function(){nptmask.mask(this)});if("object"==_typeof(fn))return nptmask=new Inputmask(fn),void 0===fn.mask&&void 0===fn.alias?this.each(function(){if(void 0!==this.inputmask)return this.inputmask.option(fn);nptmask.mask(this)}):this.each(function(){nptmask.mask(this)});if(void 0===fn)return this.each(function(){nptmask=new Inputmask(options),nptmask.mask(this)})}})},function(module,exports,__webpack_require__){"use strict";var im=__webpack_require__(6),jQuery=__webpack_require__(3);im.dependencyLib===jQuery&&__webpack_require__(13),module.exports=im}],installedModules={},__webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=14);function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var modules,installedModules});;
/*!
 * The Final Countdown for jQuery v2.1.0 (http://hilios.github.io/jQuery.countdown/)
 * Copyright (c) 2015 Edson Hilios
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";function b(a){if(a instanceof Date)return a;if(String(a).match(g))return String(a).match(/^[0-9]*$/)&&(a=Number(a)),String(a).match(/\-/)&&(a=String(a).replace(/\-/g,"/")),new Date(a);throw new Error("Couldn't cast `"+a+"` to a date object.")}function c(a){var b=a.toString().replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");return new RegExp(b)}function d(a){return function(b){var d=b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);if(d)for(var f=0,g=d.length;g>f;++f){var h=d[f].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/),j=c(h[0]),k=h[1]||"",l=h[3]||"",m=null;h=h[2],i.hasOwnProperty(h)&&(m=i[h],m=Number(a[m])),null!==m&&("!"===k&&(m=e(l,m)),""===k&&10>m&&(m="0"+m.toString()),b=b.replace(j,m.toString()))}return b=b.replace(/%%/,"%")}}function e(a,b){var c="s",d="";return a&&(a=a.replace(/(:|;|\s)/gi,"").split(/\,/),1===a.length?c=a[0]:(d=a[0],c=a[1])),1===Math.abs(b)?d:c}var f=[],g=[],h={precision:100,elapse:!1};g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var i={Y:"years",m:"months",n:"daysToMonth",w:"weeks",d:"daysToWeek",D:"totalDays",H:"hours",M:"minutes",S:"seconds"},j=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.options=a.extend({},h),this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&("function"==typeof d?(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)):this.options=a.extend({},h,d)),this.setFinalDate(c),this.start()};a.extend(j.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},this.options.precision)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},toggle:function(){this.interval?this.stop():this.start()},pause:function(){this.stop()},resume:function(){this.start()},remove:function(){this.stop.call(this),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){if(0===this.$el.closest("html").length)return void this.remove();var b,c=void 0!==a._data(this.el,"events"),d=new Date;b=this.finalDate.getTime()-d.getTime(),b=Math.ceil(b/1e3),b=!this.options.elapse&&0>b?0:Math.abs(b),this.totalSecsLeft!==b&&c&&(this.totalSecsLeft=b,this.elapsed=d>=this.finalDate,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToWeek:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToMonth:Math.floor(this.totalSecsLeft/60/60/24%30.4368),totalDays:Math.floor(this.totalSecsLeft/60/60/24),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),months:Math.floor(this.totalSecsLeft/60/60/24/30.4368),years:Math.abs(this.finalDate.getFullYear()-d.getFullYear())},this.options.elapse||0!==this.totalSecsLeft?this.dispatchEvent("update"):(this.stop(),this.dispatchEvent("finish")))},dispatchEvent:function(b){var c=a.Event(b+".countdown");c.finalDate=this.finalDate,c.elapsed=this.elapsed,c.offset=a.extend({},this.offset),c.strftime=d(this.offset),this.$el.trigger(c)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];j.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new j(this,b[0],b[1])})}});;
$(function () {
    Eds.InitLogOutTimer();
    Eds.InitLogOutTimerReload();
    // Инициалайзим основную навигацию
    Eds.InitMainNavigation();

    //Eds.SetDatePickersDefaults();

    Eds.InitBodyHeight();
    Eds.InitBoxesHover();
    Eds.Footer.InitImages();
    Eds.InitUpArrow();
    Eds.InitPopups();
    //Eds.InitUserOnlinePing();
    //Eds.InitValidationSummary();
    //Eds.InitBottomPopups();
    Eds.InitForgotPasswordPopup();
    Eds.InitForgotFamilyKeyPopup();
    Eds.InitSearchIcon();
});

(function (eds, $) {
    eds.InitBodyHeight = function () {
        var setBodyContainerHeight = function() {
            var $bodyContainer = $(".body-container"),
                $navbar = $("#main-navbar"),
                $links = $(".links-layer"),
                $footer = $(".sticky-footer"),
                $window = $(window);
            $bodyContainer.css("min-height", $window.height() - $navbar.height() - $links.height() - $footer.height());
        };
        setBodyContainerHeight();

        if ("onorientationchange" in window) {
            window.addEventListener("orientationchange", function() {
                setBodyContainerHeight();
            }, false);
        }

        window.addEventListener("resize", function() {
            setBodyContainerHeight();
        }, false);
    };

    eds.InitMainNavigation = function() {
        // Для изменения способа выпадания основного меню.
        //$(window).on("resize", function() {
        //    if ($(window).width() < 750) {
        //        $("#main-navbar").addClass("navbar-static-top");
        //        $("#main-navbar").removeClass("navbar-fixed-top");
        //        $("body").css("padding-top", "0");
        //    } else {
        //        $("#main-navbar").removeClass("navbar-static-top");
        //        $("#main-navbar").addClass("navbar-fixed-top");
        //        $("body").css("padding-top", "50px");
        //    }
        //});

        // Имитируем ресайз окна для правильной инициализации основного меню при загрузке страницы.
        $(window).trigger("resize");

        // Чтобы форма не закрывалась при нажатии на неё (дефолтовое поведение Бутстрапа), не считая нажатия на кнопку "Войти".
        $("#login-form").on("click", "li", function(e) {
            if (!e.target || e.target.type != "submit") {
                if (!e.target || (e.target.name != "RememberMe" && e.target.htmlFor != "RememberMe")) {
                    e.preventDefault();
                }
                e.stopPropagation();
            }
        });
    };

    eds.SetDatePickersDefaults = function () {
        $.fn.datepicker.defaults.format = "dd.mm.yyyy";
        $.fn.datepicker.defaults.language = "ru";
    };

    eds.InitBoxesHover = function () {
        $("body").on("mouseenter", ".panel", function () {
            var elem = $(this);
            if (!elem.hasClass("panel-no-shadow")) {
                var color = $(".controller-home").length ? "white" : "#452849";
                elem.css("box-shadow", "0px 0px 15px 0px " + color);
                if (!elem.find(".panel-collapse") || !elem.find(".panel-collapse").length) {
                    elem.find(".panel-heading").find(".panel-title").css("color", "#428BCA");
                }
            }
        });

        $("body").on("mouseleave", ".panel", function () {
            var elem = $(this);
            elem.css("box-shadow", "none");
            if (!elem.find(".panel-collapse") || !elem.find(".panel-collapse").length) {
                elem.find(".panel-heading").find(".panel-title").css("color", "white");
            }
        });
    };

    eds.Footer = (function () {
        var self = {},
            footerSelector = ".sticky-footer";

        var optionsEnter = {
            width: "60px",
            height: "60px",
            borderRadius: "30px",
            margin: "20px",
            paddingTop: "18px"
        };

        var optionsLeave = {
            width: "30px",
            height: "30px",
            borderRadius: "15px",
            margin: "35px",
            paddingTop: "3px"
        };

        var enterAnimation = {},
            leaveAnimation = {};

        self.InitImages = function () {
            var imagesSelector = ".footer-circle > a";

            $(footerSelector).on("mouseenter", imagesSelector, function () {
                var $elem = $(this),
                    imgName = $elem.data("footer-img");
                if (imgName && !enterAnimation[imgName] && !leaveAnimation[imgName]) {
                    enterAnimation[imgName] = true;
                    $elem.animate(optionsEnter, 500, function() {
                        enterAnimation[imgName] = false;
                    });
                }
            });

            $(footerSelector).on("mouseleave", imagesSelector, function () {
                var $elem = $(this),
                    imgName = $elem.data("footer-img");
                if (imgName && !leaveAnimation[imgName]) {
                    leaveAnimation[imgName] = true;
                    $elem.animate(optionsLeave, 500, function () {
                        leaveAnimation[imgName] = false;
                    });
                }
            });
        };

        return self;
    })();

    eds.InitUpArrow = function () {
        var $upArrow = $(".up-arrow");
        $(window).on("scroll resize", function () {
            if (window.scrollY > 0) {
                $upArrow.fadeIn();
            } else {
                $upArrow.fadeOut();
            }
        });

        $upArrow.on("click", function () {
            window.scroll(0, 0);
        });
    };   

    eds.InitUserOnlinePing = function () {
        var pingUser = function() {
            $.get('/Home/UserOnlinePing').done(function (response) {
                // console.log("User authenticated and online: " + response);
            });
        };

        pingUser();

        setInterval(pingUser, 300000);
    };

    eds.PopupWindow = (function () {
        var self = {};
        var _options = {};
        var processOptions = function (element, opt) {
            opt = opt || {};
            _options.window = $(element).data('window-selector') || opt.windowSelector || '#popup-window';
            _options.contentUrl = $(element).data('url') || opt.contentUrl || "";
            _options.contentEl = $(element).data('element') || opt.contentElement;
            _options.hideFooter = $(element).data('hide-footer') || opt.hideFooter;
            _options.hideCloseButton = $(element).data('hide-close-button') || opt.hideCloseButton;
            _options.hideTitle = $(element).data('hide-title') || opt.hideTitle;
            _options.title = $(element).data('title') || opt.title;
            _options.modalClassAttr = $(element).data('class') || opt.cssClass;
            _options.modalColor = $(element).data('color') || opt.color;
            _options.message = $(element).data('message') || opt.message;
            _options.okCallback = $(element).data('ok-callback') || opt.okCallback,
            _options.onLoad = $(element).data('onload') || opt.onLoad,

            _options.isConfirmPopup = $(element).data('is-confirm-popup') || opt.isConfirmPopup;
            if (_options.isConfirmPopup) {
                var confirmData = opt.confirmData || {};
                _options.confirmData = {
                    yesCallback: $(element).data('yes-callback') || confirmData.yesCallback,
                    noCallback: $(element).data('no-callback') || confirmData.noCallback,
                    yesBtnText: $(element).data('yes-btn-text') || confirmData.yesBtnText,
                    noBtnText: $(element).data('no-btn-text') || confirmData.noBtnText,
                    hideNoBtn: $(element).data('hide-no-btn') || confirmData.hideNoBtn
                };
            }
        };

        var setAttributes = function () {
            var popupWindow = $(_options.window);
            popupWindow.removeClass().addClass('modal fade').addClass(_options.modalClassAttr);
            popupWindow.find('div.modal-header > .modal-title-text').toggle(!_options.hideTitle);
            popupWindow.find('div.modal-footer').toggle(!_options.hideFooter);
            popupWindow.find('#x-btn').toggle(!_options.hideCloseButton);
            popupWindow.find('.modal-header').attr("style", "border-bottom: none; background-color:" + _options.modalColor);
            popupWindow.find('.modal-body').attr("style", "background-color:" + _options.modalColor);

            if (!_options.hideFooter) {
                popupWindow.find('.modal-footer').attr("style", "background-color:" + _options.modalColor);
            }

            if (!_options.hideTitle) {
                popupWindow.find('div.modal-header > .modal-title-text').text(_options.title);
            }

            if (_options.isConfirmPopup && _options.confirmData) {
                setPopupAsConfirm(_options.confirmData.yesBtnText, _options.confirmData.noBtnText, _options.confirmData.hideNoBtn);
                popupWindow.find('#yes-btn').on('click', _options.confirmData.yesCallback || self.close);
                popupWindow.find('#no-btn').on('click', _options.confirmData.noCallback || self.close);
                popupWindow.find('#x-btn').on('click', _options.confirmData.noCallback || self.close);
            } else {
                setPopupAsAlert();
                popupWindow.find('#ok-btn').on('click', _options.okCallback || self.close);
                popupWindow.find('#x-btn').on('click', _options.okCallback || self.close);
            }

            function setPopupAsAlert() {
                popupWindow.find('#ok-btn').show();
                popupWindow.find('#yes-btn').hide();
                popupWindow.find('#no-btn').hide();
            }

            function setPopupAsConfirm(yesBtnText, noBtnText, hideNoBtn) {
                popupWindow.find('#ok-btn').hide();

                popupWindow.find('#yes-btn').text(yesBtnText || "Yes");
                popupWindow.find('#no-btn').text(noBtnText || "No");

                popupWindow.find('#yes-btn').show();

                if (hideNoBtn) {
                    popupWindow.find('#no-btn').hide();
                } else {
                    popupWindow.find('#no-btn').show();
                }
            }
        };

        var resetCallbacks = function () {
            var popupWindow = $(_options.window);
            popupWindow.find('#ok-btn').off('click');
            popupWindow.find('#yes-btn').off('click');
            popupWindow.find('#no-btn').off('click');
            popupWindow.find('#x-btn').off('click');
        };

        self.show = function (element, options, callback) {
            resetCallbacks();
            processOptions(element, options);
            setAttributes();

            var loadContentResult = loadContentAndShowWindow();

            function loadContentAndShowWindow() {
                var popupWindow = $(_options.window);
                popupWindow.on('hidden.bs.modal', function () {
                    popupWindow.find('.modal-body').html("");
                });

                if (_options.contentUrl) {
                    $.get(_options.contentUrl, function (response) {
                        showWindow(response);
                    }).done(function () {
                        if (_options.onLoad && typeof _options.onLoad == "function") {
                            _options.onLoad();
                        }
                    });
                } else if (_options.contentEl) {
                    showWindow($(_options.contentEl).html());
                } else if (_options.message) {
                    showWindow(_options.message);
                }

                function showWindow(content) {
                    popupWindow.find('div.modal-body').html(content);
                    if (!popupWindow.is(':visible')) {
                        popupWindow.modal({
                            'show': true,
                            "backdrop": "static"
                        });

                        if (callback)
                            callback();
                    }
                }

                return popupWindow;
            }

            return loadContentResult;

        };

        self.close = function () {
            var popupWindow = $(_options.window);
            popupWindow.modal('hide');
            resetCallbacks();
        };

        self.showAttention = function (message) {
            var footerWWAttention = $('#footerWWAttention').text();
            self.show(null, {
                title: footerWWAttention,
                message: message,
                cssClass: 'modal-window-400'
            });
        };

        self.showSuccess = function (message) {
            var footerQQSuccesOperation = $('#footerQQSuccesOperation').text();
            self.show(null, {
                title: footerQQSuccesOperation,
                message: message,
                cssClass: 'modal-window-400'
            });
        };

        self.showConfirmation = function (message, successCallback, rejectCallback) {
            function success() {
                self.close();
                if (successCallback && typeof successCallback == "function") {
                    successCallback();
                }
            }
            function reject() {
                self.close();
                if (rejectCallback && typeof rejectCallback == "function") {
                    rejectCallback();
                }
            }

            var footerWWConfirmAction = $('#footerWWConfirmAction').text();
            self.show(null, {
                title: footerWWConfirmAction,
                message: message,
                cssClass: 'modal-window-attention',
                isConfirmPopup: true,
                confirmData: {
                    yesCallback: success,
                    noCallback: reject,
                    yesBtnText: "OK",
                    noBtnText: "Отмена"
                }
            });
        };

        self.showErrors = function (errorList) {
            errorList = errorList || [];
            if (!errorList.length) return;
            var message = errorList.join('<br/>');
            if (!message) return;
            var unknownError = $('#footerUnknownErrorJs').text();
            self.show(null, {
                title: unknownError,
                message: message,
                cssClass: 'modal-error'
            });
        };

        return self;
    })();

    eds.InitPopups = function() {
        $(document).on('click', 'a.show-popup', function (event) {
            event.preventDefault();
            eds.PopupWindow.show(this);
        });
    };

    Eds.InitBottomPopups = function () {
        $('#diary_parent_link').popover();
        $('#diary_children_link').popover();
        $('#teacher_link').popover();
        $('#myschool_link').popover();
        $('#journal').popover();
        $('#journal_write').popover();
        $('#journal_archive').popover();
        $('#demoschool_link').popover();
        $('#demojournal_link').popover();
        $('#demoteacher_link').popover();
        $('#logoff_link').popover();
        $('#profile_link').popover();
        $('#message_index_link').popover();
        $('#register_link').popover();
        $('#forum_link').popover();
        $('#search_link').popover();
        $('#blog_link').popover();
        $('#account_family_link').popover();
        $('#account_parent_link').popover();
        $('#account_children_link').popover();
        $('#account_teacher_link').popover();
        $('#interface_1').popover();
        $('#interface_2').popover();
        $('#interface_3').popover();
        $('#interface_4').popover();
        $('#interface_5').popover();
        $('#interface_6').popover();
        $('#interface_7').popover();
        $('#subject-visible').popover();
        $('#pupil-sorted-option').popover();
        $('#eforum_link').popover();
        $('#edirector_link').popover();
        $('#eformmaster_link').popover();
        $('#demoarhive_link').popover();
        $('#moodle-link').popover();
        $('#classes_list_link').popover();
        $('#logout_timer').popover();
        $('#download_paragraph_excel_pupils_container').popover();
    };

    eds.InitForgotPasswordPopup = function() {
        $(document).on('click', '.openForgotPasswordPopup', function (event) {
            event.preventDefault();
            var footerQQRecuperationPassword = $('#footerQQRecuperationPassword').text();
            var options = {
                contentUrl: '/Account/ForgotPasswordPopup/',
                cssClass: "modal-window-400",
                hideFooter: true,
                title: footerQQRecuperationPassword
            };

            eds.PopupWindow.show(null, options);
        });

        $(document).on('click', '.forgotPasswordSubmit', function () {
            var email = $("#Email").val();
            var footerWWEnterEmail = $('#footerWWEnterEmail').text();
            if (!email) {
                message(footerWWEnterEmail, "error", $(".forgotPasswordEmail"));
                return;
            };
            var unknownError = $('#footerUnknownErrorJs').text();
            $("#main-loading").slideDown();
            $.post('/Account/ForgotPassword/', { email: email }).done(function (response) {
                if (response && response.OperationSucceeded) {
                    //$(".popup_wrap").removeClass("active");
                    //document.body.style.overflow = 'auto';
                    var footerQQOnEmail = $('#footerQQOnEmail').text();
                    var footerWWSendRecuperationPasswordLetter = $('#footerWWSendRecuperationPasswordLetter').text();
                    message(footerQQOnEmail + " '" + email + "' " + footerWWSendRecuperationPasswordLetter);
                } else {
                    if (response.ErrorMessages && response.ErrorMessages.length) {
                        message(response.ErrorMessages[0], "error");
                    } else {
                        message(unknownError, "error");
                    }
                }
            }).fail(function() {
                message(unknownError, "error");
            }).always(function() {
                $("#main-loading").slideUp();
            });
        });
    };

    eds.InitForgotFamilyKeyPopup = function () {
        $(document).on('click', '.openForgotFamilyKeyPopup', function (event) {
            event.preventDefault();

            var userId = $(this).data("user-id");
            var footerWWRecuperatinFamilyKey = $('#footerWWRecuperatinFamilyKey').text();
            if (userId) {
                var options = {
                    contentUrl: '/Account/ForgotFamilyKeyPopup?userId=' + userId,
                    cssClass: "modal-window-400",
                    hideFooter: true,
                    title: footerWWRecuperatinFamilyKey
                };

                eds.PopupWindow.show(null, options);
            }
        });


    };

    eds.InitLogOutTimer = function () {
        var now = new Date();
        var nowMilliseconds = now.getTime();
        var finalMilliseconds = nowMilliseconds + (59 * 60 + 59) * 1000;
        $(".logout-timer").countdown(finalMilliseconds, function (event) {
            $(this).html(event.strftime('%M:%S'));
        }).on('finish.countdown', function () {
            window.location.href = window.location.origin + "/Account/LogOff";
        });
    };

    eds.InitLogOutTimerReload = function() {
        $(".links-layer").on("click", "a", function(e) {
            eds.InitLogOutTimer();
        });

        $(".school-left-menu-box").on("click", "a", function (e) {
            eds.InitLogOutTimer();
        });
    };

    eds.InitSearchIcon = function() {
        $("#search-input").on("keyup", function (e) {
            var icon = $("#search-icon");

            if (icon) {
                var val = $("#search-input").val();
                if (val) {
                    icon.removeClass("disabled");
                } else {
                    icon.addClass("disabled");
                }
            }
        });
    };
})(window.Eds = window.Eds || {}, jQuery);

function getClassListByYear(yearStart)
{
    $("#main-loading").slideDown();
                $.ajax({
                    url: "/Teacher/ClassesList",
                    type: 'POST',
                    data: JSON.stringify({ yearStart: yearStart }),
                    contentType: 'application/json; charset=utf-8'
                }).done(function (response) {
                    if (response) {
                        $(".class-menu").each(function () {
                            this.outerHTML = response;
                        });
                        //нужно вернуть, отрефакторив с Русланом, что бы не было бесконечного цикла, когда передаётся параметр.
                        selectClass();
                    }
                }).always(function() {
                    $("#main-loading").slideUp();
                });
}

function getYearsByPupilId(pupilId) {
    $("#main-loading").slideDown();
    $.ajax({
        url: "/Client/ArchiveYearsListPupil",
        type: 'POST',
        data: JSON.stringify({ FirstIdForParent: pupilId }),
        contentType: 'application/json; charset=utf-8'
    }).done(function (response) {
        if (response) {
            $(".year-menu").each(function () {
                this.outerHTML = response;
            });
            //нужно вернуть, отрефакторив с Русланом, что бы не было бесконечного цикла, когда передаётся параметр.
            selectYear();
        }
    }).always(function () {
        $("#main-loading").slideUp();
    });
};
